linuxea:jenkins pipeline參數化構建發布和回滾(網站其他文章也很不錯)


jenkins pipeline 發布和回滾

I. jenkins pipeline參數化構建
在前面有章簡單的介紹了pipeline用法,jenkins pipeline簡單使用示例(2)
jenkins+pipeline+gitlab+ansible快速安裝配置(1)
但是不夠靈活,在經過資料查閱后,發現可以將條件構建步驟轉換成jenkins pipeline,如下:
官方參考 : https://jenkins.io/doc/book/pipeline/syntax/#parameters

parameters { string(defaultValue: '', name: 'GIT_TAG', description: '請根據發布類型進行選擇發布:\n1,輸入-TESTING-發布-最新代碼-到灰度\n2,輸入-LATEST-發布-最新代碼-到生產\n3,輸入-版本號-發布-制定版本-到生產 ' ) }
II. 發布和回滾
發布:代碼倉庫是gitlab,我們知道gitlab發布要么git pull 最新的代碼(不需要版本號),或者checkout 指定的版本號代碼。我們把代碼拉到本地jenkins,是用來發布,且不管拉取那個已經存在的版本
回滾:checkout,通常提供版本號即發布和回滾,因為通過版本號直接可以checkout git倉庫已有的代碼,了解這個后發布和回滾則變的簡單起來
也可以git reset --hard HEAD^來進行回退,在這里並沒有介紹,通過簡單的修改即可實現,如:git pull最新代碼,git reset --hard HEAD^來進行回退

III. pipeline if判斷
參數化構建和發布方式確定后就可以編寫pipeline文件來進行測試
其中內容和上一篇博客https://www.linuxea.com/1738.html中的做修改后使用的,
在參數化構建時,提示如下:
請根據發布類型進行選擇發布:
1,輸入-TESTING-發布-最新代碼-到灰度
2,輸入-LATEST-發布-最新代碼-到生產
3,輸入-版本號-發布-制定版本-到生產
當GIT_TAG == 'TESTING'執行TESTING的腳本,等於LATEST則執行LATEST腳本,如果都不等於則git checkout,pipeline部分如下:

stage('代碼推送') {
        steps {
        echo "code sync"
            script {
                if (env.GIT_TAG == 'TESTING') {
                    echo 'TESTING'
                        sh "ansible ${ITEMNAME2} -m synchronize -a 'src=${SRCPATH}/ dest=${DESTPATH}/ rsync_opts=-avz,--exclude=.git,--delete'"
                    } else {
                    if (env.GIT_TAG == 'LATEST') {
                        echo 'LATEST'
                        sh "ansible ${ITEMNAME} -m synchronize -a 'src=${SRCPATH}/ dest=${DESTPATH}/ rsync_opts=-avz,--exclude=.git,--delete'"                      
                    } else { 
                        sh """
                        git checkout ${GIT_TAG}
                        }
                        }

完整的如下所示

pipeline {
agent any
parameters { string(defaultValue: '', name: 'GIT_TAG', description: '請根據發布類型進行選擇發布:\n1,輸入-TESTING-發布-最新代碼-到灰度\n2,輸入-LATEST-發布-最新代碼-到生產\n3,輸入-版本號-發布-制定版本-到生產 ' ) }
environment {
def ITEMNAME = "webapp"
def ITEMNAME2 = "twebapp"
def DESTPATH = "/data/wwwroot"
def SRCPATH = "~/workspace/linuxea-2"
}
stages {
stage('代碼拉取'){
steps {
echo "checkout from ${ITEMNAME}"
git url: 'git@git.ds.com:mark/maxtest.git', branch: 'master'
//git credentialsId:CRED_ID, url:params.repoUrl, branch:params.repoBranch
}
}
stage('目錄檢查') {
steps {
echo "檢查${DESTPATH}目錄是否存在"
script{
def resultUpdateshell = sh script: 'ansible webapp -m shell -a "ls -d ${DESTPATH}"'
//def resultUpdateshell = sh script: 'ansible twebapp -m shell -a "ls -d ${DESTPATH}"'
if (resultUpdateshell == 0) {
skip = '0'
return
}
}
}
}
stage('服務檢查') {
steps {
echo "檢查nginx進程是否存在"
script{
def resultUpdateshell = sh script: 'ansible webapp -m shell -a "ps aux|grep nginx|grep -v grep"'
//def resultUpdateshell = sh script: 'ansible twebapp -m shell -a "ps aux|grep nginx|grep -v grep"'
if (resultUpdateshell == 0) {
skip = '0'
return
}
}
}
}
stage('發布確認') {
steps {
input "檢查完成,是否發布?"
}
}
stage('代碼推送') {
steps {
echo "code sync"
script {
if (env.GIT_TAG == 'TESTING') {
echo 'TESTING'
sh "ansible ${ITEMNAME2} -m synchronize -a 'src=${SRCPATH}/ dest=${DESTPATH}/ rsync_opts=-avz,--exclude=.git,--delete'"
} else {
if (env.GIT_TAG == 'LATEST') {
echo 'LATEST'
sh "ansible ${ITEMNAME} -m synchronize -a 'src=${SRCPATH}/ dest=${DESTPATH}/ rsync_opts=-avz,--exclude=.git,--delete'"
} else {
sh """
git checkout ${GIT_TAG}
ansible ${ITEMNAME} -m synchronize -a 'src=${SRCPATH}/ dest=${DESTPATH}/ rsync_opts=-avz,--exclude=.git,--delete'
"""
}
}
}
}
}
}
}
IV. 創建項目
創建item

直接把腳本復制進去即可

構建一次后,點擊build with parameters

除非另有說明,否則本站上的內容根據以下許可進行許可: CC署名-非商業性使用-相同方式共享4.0國際許可協議4.0進行許可
本文作者:www.linuxea.com for Mark
文章鏈接:https://www.linuxea.com/1742.html (轉載請注明本文出處和本章鏈接)


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM