系列目錄
1.Jenkins 安裝
2.Jenkins 集群
3.Jenkins 持續集成 - ASP.NET Core 持續集成(Docker&自由風格&Jenkinsfile)
4.Jenkins 高級用法 - Pipeline 安裝
5.Jenkins 高級用法 - Jenkinsfile 介紹及實戰經驗
6.Jenkins 高級用法 - Blue Ocean 使用
7.Jenkins 高級用法 - 根據 git commit 控制構建過程
8.Jenkins 高級用法 - 微服務DevOps實戰(ASP.NET Core)
常見問題:
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