jenkins pipeline 釋出 jar並執行

正怒月神發表於2024-07-31

廢話不多說,上教程

一,配置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'
                }
            }
        }
    }
}

五 效果

相關文章