說明
再官網文檔上有說明pipeline的工作流程,具體可以參考pipeline文檔和語法文檔。 這里將pipeline的生命周期圖貼出來
我們暫時不會用到完整的流程,只摘取有用的部分,完成最小的流程即可,下面是我舉的幾個實際例子
一般流程
node {
dir('/home/share/node/falcon') {
stage("git") {
sh "git fetch origin"
sh "git checkout -f origin/master"
}
stage("cpm install") {
sh "cnpm install"
}
stage("build") {
sh "npm run build"
}
stage("restart server") {
sh '''
pm_result=`pm2 ls`
if [[ $pm_result =~ `pwd` ]]
then
echo "`pwd` exists, restart"
pm2 delete app.js
pm2 start app.js --name `pwd`
exit 0
else
pm2 start app.js --name `pwd`
fi
'''
}
}
}
例子中用到了幾個方法
dir()
更換執行目錄,jenkins默認的執行目錄在環境設置中設置,默認是/
,如果我們使用的是multibranch pipeline的話,它會在jenkins的安裝目錄下找到workspace進行pipeline操作,目前來說,太麻煩了,所以就直接在腳本中設置好執行目錄stage()
方法是階段的名稱,這個是完全自定義的,相當於給構建流程中的某些步驟稱為一個階段,比如git操作階段、安裝依賴階段、編譯階段、發布階段,具體效果可以到 構建 章節看sh
后接的就是命令行操作了,如果只有一行,那么用''
或者用""
包裹起來,如果有多行的話,用'''
包裹
條件判斷
在構建項目時,我們可以寫一些條件,例如在一個新的服務器上進行完整的安裝時,我們可以不通過命令行進行git clone把項目拉下來,可以通過判斷目標目錄是否有項目,然后決定我們是git clone
還是 git fetch origin
node {
dir('/home/share/www') {
stage('Git') {
if(fileExists('openapi')) {
dir('/home/share/www/openapi') {
sh 'git fetch origin'
sh 'git checkout master'
sh 'git pull'
}
} else {
sh 'git clone git@git.coding.net:flashtd1/DPOpenAPI.git openapi'
}
}
}
}
交互流程
在進行版本切換的時候,需要手動輸入一些內容,比如分支名稱,commit名稱等,所以需要用戶輸入變量,下面舉個例子
node {
stage('Git') {
def branch = input message: 'input branch name for this job', ok: 'ok', parameters: [string(defaultValue: 'master', description: 'branch name', name: 'branch')]
echo branch
}
}
執行上述例子,會出現如下情況 當輸入后,會得到如下結果
如果一次性想輸入多個參數,可以在parameters數組中添加更多的變量,如下面的例子
node {
stage('Git') {
def input_result = input message: 'input branch name for this job', ok: 'ok', parameters: [string(defaultValue: 'master', description: 'branch name', name: 'branch'), string(defaultValue: '', description: 'commit to switch', name: 'commit')]
echo input_result.branch
echo input_result.commit
}
}
除了用.
的形式,也可以用['branch']
這樣的形式,如果要在sh中使用變量,可以寫作
node {
stage('Git') {
def input_result = input message: 'input branch name for this job', ok: 'ok', parameters: [string(defaultValue: 'master', description: 'branch name', name: 'branch'), string(defaultValue: '', description: 'commit to switch', name: 'commit')]
sh "echo ${input_result.branch}"
sh "echo ${input_result.commit}"
}
}
注意sh后的是""
,不然會出現錯誤
這里只舉了簡單的字符串輸入的情況,其實還有很多可以輸入的類型,不過文檔里並沒有寫的很詳細。這里介紹一下Jenkins的語法生成器,一些插件生成腳本的語句都可以在這里調出來
在Pipeline編輯的輸入框下,有一個Pipeline Syntax
超鏈接 紅色標記的下拉框中可以找到已經安裝了插件的支持編寫腳本的選項列表,這里用input來舉例
按照提示填完后,可以點擊下面的
Generate Pipeline Script
按鈕生成腳本 生成的腳本就可以復制到自己的腳本里啦