說明
Jenkins pipeline 是一套插件,支持將連續輸送管道實施和整合到Jenkins,Pipeline提供了一組可擴展的工具,用于通過管道DSL為代碼創建簡單到復雜的傳送流水線,他目前支持jenkins 2.x以上版本,pipeline是由groovy語言撰寫
1.安裝jenkins
可以查看:https://www.cnblogs.com/jxxiaocao/p/16191140.html
設定倉庫和jenkins的關聯(因為我使用的是gitee所以就介紹gitee,其他的都差不多)
gitee和jenkins關聯:https://www.cnblogs.com/jxxiaocao/p/12668993.html
其他插件:
用戶相關資訊:https://www.cnblogs.com/jxxiaocao/p/16203126.html
2.安裝pipeline插件

3.創建job

3.1引數化構建程序
設定git引數

3.2流水線

pipeline宣告式代碼:
pipeline {
agent any //環境maven、jdk等
stages { //專案構建
stage('拉取代碼') { //拉取代碼
steps { //具體實施步驟
echo '拉取代碼開始'
//下面 生成流水腳本 生成的 陳述句
// extensions: [[$class: 'SparseCheckoutPaths', sparseCheckoutPaths: [[path: 'common']]]] 拉取指定目錄
checkout([
$class: 'GitSCM', branches: [[name: '*']],
extensions: [
[$class: 'CleanCheckout', deleteUntrackedNestedRepositories: true]
],
userRemoteConfigs: [[credentialsId: '需要獲取', url: 'git地址']]
])
echo "拉取的TAG:${TAGNAME}"
echo '拉取代碼結束'
}
}
stage('編譯打包') { // 編譯打包
steps { //具體實施步驟
echo 'build project' // 打包命令
}
}
stage('部署上線') { // 部署上線
steps { //具體實施步驟
echo 'publish project' // 部署命令
}
}
}
post {
success {
//企微通知 TAGNAME 是上面 git引數 那的 名稱
sh 'sh /var/lib/jenkins/pipeline/wechat_send.sh token "環境" "${JOB_NAME}" "${TAGNAME}" "${BUILD_DISPLAY_NAME}" "${BUILD_USER}"'
echo 'whole pipeline successful'
}
failure {
echo 'FAILED (global)'
}
}
}
pipeline腳本式代碼:
node { //全域變數(外部可以使用,比如shell中使用) env.ENVI = "test" //定義環境 env.WECHAT_TOKEN = "key" env.ERRI = "false" env.WORKSPACE = "/www/jenkins/workspace/${JOB_NAME}" //區域變數(在shel中不能使用) def GIT_URL = "git地址" try{ stage('拉取代碼') { //拉取代碼 echo '拉取代碼開始' checkout([ $class: 'GitSCM', branches: [[name: '${TAGNAME}']], extensions: [[$class: 'CleanCheckout', deleteUntrackedNestedRepositories: true]], userRemoteConfigs: [[credentialsId: '4e89640d-3576-4043-a4e2-47d', url: "${GIT_URL}"]] ]) echo "拉取的TAG:${TAGNAME}" echo '拉取代碼結束' } stage('編譯打包') { // 編譯打包 echo '編譯打包開始' echo '編譯打包結束' } stage('部署上線') { echo '部署上線開始'
// 這里用到 ansible 同步代碼(Jenkins+Pipeline+Ansible 自動化部署) sh 'ansible-playbook -e "host=wb workspace=${WORKSPACE} item=${JOB_NAME} exclude=.git*" /etc/ansible/variables.yml' echo '部署上線結束' } env.RESULT = currentBuild.currentResult }catch(err){ echo "編譯失敗,錯誤原因如下:${err} " env.ERRI = "true" env.RESULT = "FAILURE:\n ${err}" }finally{ } //獲取構建用時 env.DURATION_STRING = currentBuild.durationString //企微通知 sh 'sh /var/lib/jenkins/pipeline/wechat_send.sh "${WECHAT_TOKEN}" \ "${ENVI}" \ "${JOB_NAME}" \ "${TAGNAME}" \ "${BUILD_DISPLAY_NAME}" \ "${DURATION_STRING}" \ "${RESULT}" \ "${BUILD_USER}"' //判斷是否失敗,如果是強制顯示失敗圖示 if(env.ERRI == "true"){ script { error "${ERRI}" } } }
ps:Pipeline流水線的優化方案
Pipeline語法:
比如獲取credentialsId


點擊 生成流水腳本

把生成的 checkout(.......) 放到 上面
3.3構建

結果:

wechat_send.sh 腳本(通知)
#!/bin/sh CHAT_WEBHOOK_KEY="$1" ENV="$2" ITEM="$3" TAG="$4" BUILD_DISPLAY_NAME="$5" MILLIS_TIME="$6" STATE="$7" OPERATOR="$8" CHAT_WEBHOOK_URL='https://qyapi.weixin.qq.com/cgi-bin/webhook/send?key' CHAT_CONTENT_TYPE='Content-Type: application/json' curl "${CHAT_WEBHOOK_URL}=${CHAT_WEBHOOK_KEY}" \ -H "${CHAT_CONTENT_TYPE}" \ -d ' { "msgtype": "markdown", "markdown": { "content": "<font color=\"warning\">版本發布通知</font>\n >發布環境:<font color=\"info\">'"${ENV}"'</font> >專案名稱:<font color=\"info\">'"${ITEM}"'</font> >發布Tag:<font color=\"info\">'"${TAG}"'</font> >構建名稱:<font color=\"comment\">'"${BUILD_DISPLAY_NAME}"'</font> >構建用時:<font color=\"comment\">'"${MILLIS_TIME}"'</font> >構建狀態:<font color=\"warning\">'"${STATE}"'</font> >執行人:<font color=\"comment\">'"${OPERATOR}"'</font>" } }
ps:企微通知需要安裝 Qy Wechat Notification 插件,當然也可以用 釘釘 通知就不介紹了都差不多
通知
成功:

失敗:

轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/469896.html
標籤:其他

