Jenkins高階教程 - Jenkinsfile 介紹及實戰經驗
系列目錄
1.Jenkins 安裝
2.Jenkins 叢集
3.Jenkins 基本使用 - ASP.NET Core 持續整合(待補充)
4.Jenkins高階教程 - Pipeline 安裝
5.Jenkins高階教程 - Jenkinsfile 介紹及實戰經驗
常見問題:
1.Jenkins 時區設定
2.Jenkins 無法捕獲構建指令碼錯誤問題
一.什麼是 Jenkinsfile
Jenkinsfile 是 Jenkins 2.x 核心特性 Pipeline 的指令碼,由Groovy語言實現。Jenkinsfile一般是放在專案根目錄,隨專案一起受原始碼管理軟體控制,無需像建立“自由風格"(Jenkins FreeStyle)專案一樣,每次可能需要拷貝很多設定到新專案,提供了一些直接的好處:
- Pipeline上的程式碼審查/迭代
- Pipeline的審計跟蹤
- Pipeline的唯一真實來源,可以由專案的多個成員檢視和編輯。
Pipeline支援:Declarative(在Pipeline 2.5中引入)和Scripted Pipeline兩種格式。兩者都支援建立Pipeline,兩者都可以用於在Web UI中定義一個流水線Jenkinsfile,將Jenkinsfile檔案建立並檢查到原始碼控制庫中通常被認為是最佳做法。
更多詳細資訊參考:玩轉Jenkins Pipeline(大寶魚) 推薦必讀
二. Jenkinsfile 實戰經驗
看本小節之前,如果你不熟悉 Jenkinsfile 那麼推薦一定要閱讀,第一小節推薦的文章,裡面介紹了很多基本用法。
這裡的實戰主要講宣告式 Jenkinsfile,因為宣告式 Jenkinsfile是 Pipeline 2.5 引入的,比之以前的指令碼式會有一些更先進的設計和更快捷的用法,且宣告式Jenkinsfile還相容指令碼式語法。這裡主要講一些博主實際用的過程中的經驗。
1.在指定的Jenkins叢集結點上執行
pipeline {
agent {
node {
label 'slave-1'
}
}
}
label 指你的叢集結點名稱
2.定義環境變數
pipeline { environment { NUGET_KEY = 'abc' } }
使用:
env.NUGET_KEY
在sh
裡使用
$NUGET_KEY
例子:
輸出該環境變數
echo "${env.NUGET_KEY}"
sh:
sh 'echo $NUGET_KEY'
這裡要注意在 sh 語句塊裡使用的不同。
3.設定 github webhook 觸發器
triggers {
githubPush()
}
UI上沒有沒有設定github webhook觸發的。指令碼設定後,需要到 【系統管理】->【系統設定】裡,手動註冊一下github webhook即可
4.常用的預置環境變數
變數名 | 說明 |
---|---|
BRANCH_NAME | 當前分支名稱 |
GIT_COMMIT | 當前 commit hash |
GIT_PREVIOUS_SUCCESSFUL_COMMIT | 上一次構建成功 cimmit hash |
示例:
echo "branch: ${env.BRANCH_NAME}"
echo "current SHA: ${env.GIT_COMMIT}"
echo "previous SHA: ${env.GIT_PREVIOUS_SUCCESSFUL_COMMIT}"script
5.script塊
script 塊裡可以寫指令碼式Jenkinsfile的語法
例子:
stages {
stage('Build') {
steps {
script {
result = sh (script: "git log -1|grep 'Release'", returnStatus: true)
echo "result: ${result}"
}
}
}
}
6.設定構建結果
post { always { script { currentBuild.result = 'NOT_BUILT' } } }
一般放在 POST 語句塊
7.敏感資料設定
一些敏感資料,比如賬號密碼,不可能解除安裝指令碼中。
首先新建憑據(Jenkins 地址 /credentials/store/system/domain/_/):
型別選擇 Secret text,Secret 輸出你的 賬號/密碼等。然後記住你設定的ID,待會要用
可以通過 credentials
函式來獲取
credentials('<憑據id>')
例如
credentials('test')
直接輸出到控制檯也會加密:
8.定義變數
def cusversion="Jenkinsfile"
必須放在 pipeline 前面或者 script 語句塊裡面
9.指定分支執行stage
stage('Deploy') {
when {
branch "<分支名稱>"
}
}
三.擴充套件閱讀
Jenkinsfile 語法 https://jenkins.io/doc/book/pipeline/syntax
玩轉Jenkins Pipeline https://blog.csdn.net/diantun00/article/details/81075007