Jenkins+Kubernetes+Docker完成微服務持續整合
阿新 • • 發佈:2022-03-10
Jenkins+Kubernetes+Docker完成微服務持續整合
拉取程式碼,構建映象
建立NFS共享目錄
讓所有Jenkins-Slave構建指向NFS的Maven的共享倉庫目錄
vi /etc/exports
/opt/nfs/jenkins *(rw,no_root_squash) /opt/nfs/maven *(rw,no_root_squash)
systemctl restart nfs 重啟NFS
記得重啟nfs!
然後
注意:在構建過程會發現無法建立倉庫目錄,是因為NFS共享目錄許可權不足,需更改許可權
然後就是去建立一個新專案:
建立專案,編寫構建Pipeline
配置一下harbor憑證
然後再去編寫程式碼:
def git_address = "http://20.0.0.20:82/root/tensquare_back.git" def git_auth = "904eff5d-41c8-44ad-ba24-7f539a0edb96" //構建版本的名稱 def tag = "latest" //Harbor私服地址 def harbor_url = "20.0.0.50:85" //Harbor的專案名稱 def harbor_project_name = "tensquare" //Harbor的憑證 def harbor_auth = "427399a8-db35-48e8-b5cf-a1ea63f10cc5" podTemplate(label: 'jenkins-slave', cloud: 'kubernetes', containers: [ containerTemplate( name: 'jnlp', image: "20.0.0.50:85/library/jenkins-slave-maven:latest" ), containerTemplate( name: 'docker', image: "docker:stable", ttyEnabled: true, command: 'cat' ), ], volumes: [ hostPathVolume(mountPath: '/var/run/docker.sock', hostPath: '/var/run/docker.sock'), nfsVolume(mountPath: '/usr/local/apache-maven/repo', serverAddress: '20.0.0.10' , serverPath: '/opt/nfs/maven'), ], ) { node("jenkins-slave"){ // 第一步 stage('pull code'){ checkout([$class: 'GitSCM', branches: [[name: '*/master']], extensions: [], userRemoteConfigs: [[credentialsId: "${git_auth}", url: "${git_address}"]]]) } // 第二步 stage('make public sub project'){ //編譯並安裝公共工程 sh "mvn -f tensquare_common clean install" } // 第三步 stage('make image'){ //把選擇的專案資訊轉為陣列 def selectedProjects = "${project_name}".split(',') for(int i=0;i<selectedProjects.size();i++){ //取出每個專案的名稱和埠 def currentProject = selectedProjects[i]; //專案名稱 def currentProjectName = currentProject.split('@')[0] //專案啟動埠 def currentProjectPort = currentProject.split('@')[1] //定義映象名稱 def imageName = "${currentProjectName}:${tag}" //編譯,構建本地映象 sh "mvn -f ${currentProjectName} clean package dockerfile:build" container('docker') { //給映象打標籤 sh "docker tag ${imageName} ${harbor_url}/${harbor_project_name}/${imageName}" //登入Harbor,並上傳映象 withCredentials([usernamePassword(credentialsId: "${harbor_auth}", passwordVariable: 'password', usernameVariable: 'username')]) { //登入 sh "docker login -u ${username} -p ${password} ${harbor_url}" //上傳映象 sh "docker push ${harbor_url}/${harbor_project_name}/${imageName}" } //刪除本地映象 sh "docker rmi -f ${imageName}" sh "docker rmi -f ${harbor_url}/${harbor_project_name}/${imageName}" } } } } }
要修改地方:
然後去構建看結果!!