您好,本模塊主要學習聲明式流水線的核心語法,掌握核心語法便於編寫Jenkinsfile 😀
目錄
- 聲明式流水線
- agent代理
- post運行後處理
- stages階段
- environment環境變量
- options運行選項
- parameters參數
- trigger觸發器
- tool構建工具
- input交互輸入
- when條件判斷
- parallel並行
- script腳本標籤
聲明式流水線
聲明式Pipleine是官方推薦的語法,聲明式語法更加簡潔。所有的聲明式Pipeline都必須包含一個 pipeline塊中,比如:
pipeline {
//run
}
在聲明式Pipeline中的基本語句和表達式遵循Groovy的語法。但是有以下例外:
- 流水線頂層必須是一個塊,特別是pipeline{}。
- 不需要分號作爲分割符,是按照行分割的。
- 語句塊只能由階段、指令、步驟、賦值語句組成。例如: input被視爲input()。
agent代理
agent
指定了流水線的執行節點。
agent { node { label 'labelname' }}
aget { label ' labelname '}
參數:
- any 在任何可用的節點上執行pipeline。none 沒有指定agent的時候默認。
- label 在指定標籤上的節點上運行Pipeline。 node 允許額外的選項(自定義workspace)。
post運行後處理
當流水線完成後根據完成的狀態做一些任務。例如:構建失敗後郵件通知
post {
always {
echo 'I will always say Hello again!'
}
failure{
email : [email protected]
}
}
常用的狀態:
- always 無論流水線或者階段的完成狀態。
- changed 只有當流水線或者階段完成狀態與之前不同時。
- failure 只有當流水線或者階段狀態爲”failure”運行。
- success 只有當流水線或者階段狀態爲”success”運行。
- unstable 只有當流水線或者階段狀態爲”unstable”運行。例如:測試失敗。
- aborted 只有當流水線或者階段狀態爲”aborted “運行。例如:手動取消。
stages階段
stages
是流水線的整個運行階段,包含一個或多個 stage
, 建議 stages
至少包含一個 stage
。
stages {
stage('Example') {
steps {
echo 'Hello World'
}
}
}
environment環境變量
定義流水線環境變量,可以定義在全局變量或者步驟中的局部變量。這取決於 environment 指令在流水線內的位置。
agent any
//全局變量
environment {
activeEnv = 'dev'
}
stages {
stage('Example') {
//局部變量
environment {
AN_ACCESS_KEY = credentials('my-prefined-secret-text')
}
steps {
sh 'printenv'
}
}
}
options運行選項
定義流水線運行時的配置選項,流水線提供了許多選項, 比如buildDiscarder,但也可以由插件提供, 比如 timestamps。
agent any
options {
timeout(time: 1, unit: 'HOURS')
}
stages {
stage('Example') {
steps {
echo 'Hello World'
}
}
}
其他部分參數:
- buildDiscarder: 爲最近的流水線運行的特定數量保存組件和控制檯輸出。
- disableConcurrentBuilds: 不允許同時執行流水線。 可被用來防止同時訪問共享資源等。
- overrideIndexTriggers: 允許覆蓋分支索引觸發器的默認處理。
- skipDefaultCheckout: 在agent 指令中,跳過從源代碼控制中檢出代碼的默認情況。
- skipStagesAfterUnstable: 一旦構建狀態變得UNSTABLE,跳過該階段。
- checkoutToSubdirectory: 在工作空間的子目錄中自動地執行源代碼控制檢出。
- timeout: 設置流水線運行的超時時間, 在此之後,Jenkins將中止流水線。
- retry: 在失敗時, 重新嘗試整個流水線的指定次數。
- timestamps 預測所有由流水線生成的控制檯輸出,與該流水線發出的時間一致。
parameters參數
爲流水線運行時設置項目相關的參數,就不用在UI界面上定義了,比較方便。
//string 字符串類型的參數, 例如:
parameters { string(name: 'DEPLOY_ENV', defaultValue: 'staging', description: '') }
//booleanParam 布爾參數, 例如:
parameters { booleanParam(name: 'DEBUG_BUILD', defaultValue: true, description: '') }
agent any
parameters {
string(name: 'PERSON', defaultValue: 'Mr Jenkins', description: 'Who should I say hello to?')
}
stages {
stage('Example') {
steps {
echo "Hello ${params.PERSON}"
}
}
}
trigger觸發器
構建觸發器
//cron 計劃任務定期執行構建。
triggers { cron('H */4 * * 1-5') }
//pollSCM 與cron定義類似,但是由jenkins定期檢測源碼變化。
triggers { pollSCM('H */4 * * 1-5') }
agent any
triggers {
cron('H */4 * * 1-5')
}
stages {
stage('Example') {
steps {
echo 'Hello World'
}
}
}
tool構建工具
構建工具maven、ant、gradle,獲取通過自動安裝或手動放置工具的環境變量。支持maven/jdk/gradle。工具的名稱必須在系統設置->全局工具配置中定義。
agent any
tools {
maven 'apache-maven-3.0.1'
}
stages {
stage('Example') {
steps {
sh 'mvn --version'
}
}
}
input交互輸入
input用戶在執行各個階段的時候,由人工確認是否繼續進行。
agent any
stages {
stage('Example') {
input {
message "Should we continue?"
ok "Yes, we should."
submitter "alice,bob"
parameters {
string(name: 'PERSON', defaultValue: 'Mr Jenkins', description: 'Who should I say hello to?')
}
}
steps {
echo "Hello, ${PERSON}, nice to meet you."
}
}
}
參數解釋:
- message 呈現給用戶的提示信息。
- id 可選,默認爲stage名稱。
- ok 默認表單上的ok文本。
- submitter 可選的,以逗號分隔的用戶列表或允許提交的外部組名。默認允許任何用戶。
- submitterParameter 環境變量的可選名稱。如果存在,用submitter 名稱設置。
- parameters 提示提交者提供的一個可選的參數列表。
when條件判斷
when 指令允許流水線根據給定的條件決定是否應該執行階段。 when 指令必須包含至少一個條件。
//branch: 當正在構建的分支與模式給定的分支匹配時,執行這個階段,這隻適用於多分支流水線例如:
when { branch 'master' }
//environment: 當指定的環境變量是給定的值時,執行這個步驟,例如:
when { environment name: 'DEPLOY_TO', value: 'production' }
//expression 當指定的Groovy表達式評估爲true時,執行這個階段, 例如:
when { expression { return params.DEBUG_BUILD } }
//not 當嵌套條件是錯誤時,執行這個階段,必須包含一個條件,例如:
when { not { branch 'master' } }
//allOf 當所有的嵌套條件都正確時,執行這個階段,必須包含至少一個條件,例如:
when { allOf { branch 'master'; environment name: 'DEPLOY_TO', value: 'production' } }
//anyOf 當至少有一個嵌套條件爲真時,執行這個階段,必須包含至少一個條件,例如:
when { anyOf { branch 'master'; branch 'staging' } }
stage('Example Deploy') {
when {
branch 'production'
environment name: 'DEPLOY_TO', value: 'production'
}
steps {
echo 'Deploying'
}
}
parallel並行
聲明式流水線的階段可以在他們內部聲明多隔嵌套階段, 它們將並行執行。 注意,一個階段必須只有一個 steps 或 parallel的階段。 嵌套階段本身不能包含 進一步的 parallel 階段, 但是其他的階段的行爲與任何其他 stageparallel 的階段不能包含 agent 或 tools階段, 因爲他們沒有相關 steps。
stage('Parallel Stage') {
when {
branch 'master'
}
failFast true
parallel {
stage('Branch A') {
agent {
label "for-branch-a"
}
steps {
echo "On Branch A"
}
}
stage('Branch B') {
agent {
label "for-branch-b"
}
steps {
echo "On Branch B"
}
}
}
}
failFast true 當其中一個進程失敗時,強制所有的 parallel 階段都被終止。
script腳本標籤
可以通過此標籤嵌入腳本式語法。
stage("Build"){
steps{
script{
println("運行構建")
}
}
}
掃碼關注,獲取課程: