廢話不多說,上教程
一,配置publish ssh
二,配置 ssh server
記住Name
三 設定釋出選項
1 設定模組多選(請安裝多選外掛:Active Choices Plug-in)
四 編寫pipeline
說明:
1 modules.split(',')中的modules就是上面多選框的Name
2 詳細解說:
execCommand: 'cd /java ; ps -ef | grep '+module_list[i].trim()+' | grep -v grep | awk \'{print $2}\' | xargs --no-run-if-empty kill -9 ; source /etc/profile ; nohup java -jar '+module_list[i].trim()+'.jar > '+module_list[i].trim()+'.log 2>&1 & '
// 轉到目錄
cd /java
//透過程序名查詢PID
ps -ef | grep '+module_list[i].trim()+' | grep -v grep | awk \'{print $2}\'
//刪除此程序(如果為空則不執行kill)
xargs --no-run-if-empty kill -9
//此命令配合nohup,不然Jenkins中無法透過nohup執行Jar
source /etc/profile ;
//後臺執行nohup
nohup java -jar '+module_list[i].trim()+'.jar > '+module_list[i].trim()+'.log 2>&1 &
完整程式碼:
pipeline { agent any // 設定工具 tools { maven "Maven3" jdk "JDK17" } //動態引數 environment{ source_dir="${WORKSPACE}" } options { timestamps() // 設定在專案列印日誌時帶上時間戳 disableConcurrentBuilds() // 不允許同時執行流水線,被用來防止同時訪問公共資源等 timeout(time: 40, unit: 'MINUTES') // 設定流水線執行超時時間,Jenkins自動終止流水線 buildDiscarder(logRotator(numToKeepStr: '10')) // 保留n次構建歷史 } // 存放所有任務的合集 stages { stage('clone') { steps { // 拉取程式碼 git credentialsId: 'xxxx-xxxx-xxxx-xxx-xxxxxxxx', url: 'http://localhost:xxxx/xxxxx/kintech-cloud', branch: 'dev' } } // 打包 stage('install') { steps { script { //服務名稱陣列 module_list = modules.split(',') for (int i = 0; i < module_list.size(); i++) { echo "=================package ${module_list[i]} " // 打對應的專案以及依賴包 bat 'mvn -Dmaven.test.failure.ignore=true -pl kintech-modules/' + module_list[i].trim() + ' -am clean package ' } echo 'Install success' } } } // 部署 stage('deploy') { steps { script { for (int i = 0; i < module_list.size(); i++) { echo "=================sshPublisher ${module_list[i]} " // scp 免密傳輸 sshPublisher(publishers: [sshPublisherDesc(configName: 'kintech-cloud測試服務', transfers: [sshTransfer(cleanRemote: false, excludes: '', execCommand: 'ls', execTimeout: 120000, flatten: false, makeEmptyDirs: false, noDefaultExcludes: false, patternSeparator: '[, ]+', remoteDirectory: '', remoteDirectorySDF: false, removePrefix: 'kintech-modules/'+module_list[i].trim()+'/target/', sourceFiles: 'kintech-modules/'+module_list[i].trim()+ '/target/' +module_list[i].trim()+'.jar')], usePromotionTimestamp: false, useWorkspaceInPromotion: false, verbose: true)]) } echo 'Deploy success' } } } // 啟動 stage('start') { steps { script { for (int i = 0; i < module_list.size(); i++) { //啟動 (cd到java目錄,殺掉程序,啟動jar) sshPublisher(publishers: [sshPublisherDesc(configName: 'kintech-cloud測試服務', transfers: [sshTransfer(cleanRemote: false, excludes: '', execCommand: 'cd /java ; ps -ef | grep '+module_list[i].trim()+' | grep -v grep | awk \'{print $2}\' | xargs --no-run-if-empty kill -9 ; source /etc/profile ; nohup java -jar '+module_list[i].trim()+'.jar > '+module_list[i].trim()+'.log 2>&1 & ', execTimeout: 120000, flatten: false, makeEmptyDirs: false, noDefaultExcludes: false, patternSeparator: '[, ]+', remoteDirectory: '', remoteDirectorySDF: false, removePrefix: '/java', sourceFiles: '/java')], usePromotionTimestamp: false, useWorkspaceInPromotion: false, verbose: true)]) } echo 'Start success' } } } } }
五 效果