1. 程式人生 > 實用技巧 >Jenkins流水線部署maven不同模組服務到不同伺服器執行

Jenkins流水線部署maven不同模組服務到不同伺服器執行

前言

現在的專案開發一般都是基於多模組的,並且分開部署的,在打包的同時將不同的模組傳送到不同的伺服器再到具體伺服器實現容器化部署或者普通執行部署,總的過程來說有點繁瑣,但是利用jenkins流水線(pipeline)加上萬能的shell指令碼可以大大簡化這個過程

演示

實現思路

1. 利用pipeline實現基本的程式碼拉取,以及程式碼打包
2. 在不同的階段實現不同的目的,比如我的目的是將打包後的不同jar包其他指令碼分發到不同的伺服器上,然後實現部署執行
3. 但是有時候不打算執行,也就是在流水線執行過程中中間有提示(pipeline的input配置)可以選擇是否在相應環境執行
4. 在具體伺服器執行暫時是根據具體shell指令碼

利用DockerFile打成映象,然後執行容器化部署

具體部署步驟(以我github上的專案舉例)

  • jenkins上新建一個流水線專案
  • 配置好GitHub專案地址和登入GitHub的憑據

  • 在專案根目錄建立JekninsFile檔案
  • 並在jenkinsFile檔案按照pipeline語法寫上具體執行步驟,檔案內容看後面單獨放出來
  • 開啟blue Ocean選在你新建的專案,點選執行

  • 這些基礎的掌握後部署專案沒問題了,但是實現部署邏輯還是要依賴JenkinsFile中的執行邏輯

jenkinsFile檔案說明

大體執行邏輯

1. 拉取程式碼
2. 構建jar包
3. 傳送至指定伺服器


4. 專案啟動(啟動前會有提示,選擇是否繼續執行)
5. 指令碼內容是具體不同模組打成容器映象的shell,無非就是根據DockerFile檔案打成映象,然後啟動映象,這裡不再放出

pipeline {
    agent any
    stages {
     /* 模擬程式碼拉取步驟,因為在上面直接根據SCM拉取的程式碼,所以這裡忽略,否則可以直接拉取,舉例: git branch: "suke", credentialsId: '', url: ''*/
        stage('拉取程式碼') {
            steps {
                echo "模擬程式碼拉取"
                sh 'mvn --version'
            }
        }
		/*這一步是打包過程*/
        stage('構建jar包') {
                    steps {
                        sh 'mvn clean package'
                        sh 'ls'
                    }
               }
			   /*打包完成後將檔案傳送到不同的伺服器,這裡我將所有檔案傳送到一個伺服器部署,common-start.sh 就是將三個模組在目標伺服器打成具體映象的指令碼*/
        stage('傳送至指定伺服器') {
                     steps {
                          sh 'date'
                          echo "專案構建結果路徑:${WORKSPACE}"
						   sh 'scp ${WORKSPACE}/common-start.sh [email protected]:/home/suc'
                          sh 'scp ${WORKSPACE}/AA/target/AA.jar [email protected]:/home/suc'
                          sh 'scp ${WORKSPACE}/BB/target/BB.jar [email protected]:/home/suc'
                          sh 'scp ${WORKSPACE}/CC/target/CC.jar [email protected]:/home/suc'
                          echo '傳送成功'
                       }
               }
			   /*等待手動去選擇是否在目標伺服器部署,避免出問題*/
        stage('專案啟動') {
                    input {
                                message "是否要啟動專案?"
                                ok "yes,continue"
                                submitter "suc"
                           }
						   /*繼續的話直接執行指令碼執行容器化部署*/
                     steps {
                          sh 'ssh [email protected] sh /home/suc/common-start.sh /home/suc'
                       }
                     }

    }
    post {
            always {
                echo '刪除構建資料夾'
                deleteDir()  /* clean up our workspace */
            }
            success {
                echo 'success'
            }
            unstable {
                echo 'I am unstable :/'
            }
            failure {
                echo 'failed'
            }
            changed {
                echo 'Things were different before...'
            }
        }
}


最後

  • 求點贊關注,有問題請留言
  • 文章來源 公眾號 蘇克分享