前言
現在的項目開發一般都是基於多模塊的,並且分開部署的,在打包的同時將不同的模塊發送到不同的服務器再到具體服務器實現容器化部署或者普通運行部署,總的過程來說有點繁瑣,但是利用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 root@192.168.1.44:/home/suc'
sh 'scp ${WORKSPACE}/AA/target/AA.jar root@192.168.1.44:/home/suc'
sh 'scp ${WORKSPACE}/BB/target/BB.jar root@192.168.1.44:/home/suc'
sh 'scp ${WORKSPACE}/CC/target/CC.jar root@192.168.1.44:/home/suc'
echo '發送成功'
}
}
/*等待手動去選擇是否在目標服務器部署,避免出問題*/
stage('項目啟動') {
input {
message "是否要啟動項目?"
ok "yes,continue"
submitter "suc"
}
/*繼續的話直接運行腳本執行容器化部署*/
steps {
sh 'ssh root@192.168.1.44 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...'
}
}
}
最后
- 求點贊關注,有問題請留言
- 文章來源 公眾號
蘇克分享

