Jenkins Pipeline語法(上)
Jenkins Pipeline語法(中)
Jenkins Pipeline語法(下)
如“ 入門指南 ”所述吓肋,Pipeline最基本的部分是“步驟”掂名★笔福基本上妒貌,步驟告訴Jenkins 要做什么,并且作為Declarative和Scripted Pipeline語法的基本構(gòu)建塊熄守。
聲明性Pipeline
聲明性Pipeline是Jenkins Pipeline 的一個(gè)相對較新的補(bǔ)充蜈垮, 它在Pipeline子系統(tǒng)之上提出了一種更為簡化和有意義的語法。
所有有效的聲明性Pipeline必須包含在一個(gè)pipeline塊內(nèi)裕照,例如:
pipeline {
/* insert Declarative Pipeline here */
}
聲明性Pipeline中有效的基本語句和表達(dá)式遵循與Groovy語法相同的規(guī)則 攒发,但有以下例外:
- Pipeline的頂層必須是塊,具體來說是:pipeline { }
- 沒有分號作為語句分隔符晋南。每個(gè)聲明必須在自己的一行
- 塊只能包含章節(jié)惠猿, 指令,步驟或賦值語句负间。
- 屬性引用語句被視為無參數(shù)方法調(diào)用偶妖。所以例如姜凄,輸入被視為input()
您可以使用 聲明性指令生成器 來幫助您配置聲明性Pipeline中的指令和部分。
Sections
聲明性Pipeline中的Sections通常包含一個(gè)或多個(gè)指令或步驟趾访。
代理 agent
agent
指定整個(gè)Pipeline或特定stage將在Jenkins環(huán)境中執(zhí)行的位置态秧,具體取決于該agent
部分的位置。該部分必須在pipeline
塊內(nèi)的頂層定義扼鞋,stage
塊內(nèi)的agent是可選的 申鱼。
是否必填 | 是 |
---|---|
參數(shù) | 如下面所描述的 |
允許出現(xiàn)在 | 在頂級pipeline 塊和每個(gè)stage 塊中。 |
參數(shù)
為了支持Pipeline作者可能擁有的各種使用場景云头,agent部分支持幾種不同類型的參數(shù)捐友。這些參數(shù)可以應(yīng)用于pipeline塊的頂層,也可以應(yīng)用在每個(gè)stage指令內(nèi)溃槐。
any
在任何可用的代理上執(zhí)行Pipeline或stage匣砖。例如:agent any
none
當(dāng)在pipeline
塊的頂層應(yīng)用時(shí),將不會為整個(gè)Pipeline運(yùn)行分配全局代理昏滴,并且每個(gè)stage
部分將需要包含其自己的agent
部分猴鲫。例如:agent none
label
使用提供的標(biāo)簽在Jenkins環(huán)境中可用的代理上執(zhí)行Pipeline或stage性執(zhí)行。例如:agent { label 'my-defined-label' }
node
agent { node { label 'labelName' } }
行為和 agent { label 'labelName' }
相同影涉,但node
允許其他選項(xiàng)(如customWorkspace
)变隔。
docker
用給定的容器執(zhí)行Pipeline规伐,或stage蟹倾,將被動(dòng)態(tài)地提供一個(gè)預(yù)先配置成基于Docker-based Pipelines的節(jié)點(diǎn),或和label
參數(shù)匹配的任選節(jié)點(diǎn)猖闪。 docker
還可以接受一個(gè)args
參數(shù)鲜棠,可以直接將參數(shù)傳遞給docker run
命令。例如:agent { docker 'maven:3-alpine' }
或
agent {
docker {
image 'maven:3-alpine'
label 'my-defined-label'
args '-v /tmp:/tmp'
}
}
-
dockerfile
使用從
Dockerfile
源存儲庫中包含的容器構(gòu)建容器來執(zhí)行Pipeline或stage 培慌。為了使用此選項(xiàng)豁陆,Jenkinsfile
必須從Multibranch Pipeline或Pipeline from SCM加載。通常Dockerfile
在源碼庫的根路徑:agent { dockerfile true }
吵护。如果Dockerfile
在其他目錄中建立盒音,請使用以下dir
選項(xiàng):agent { dockerfile { dir 'someSubDir' } }
。您可以使用additionalBuildArgs
選項(xiàng)將其他參數(shù)傳遞給docker build ...
命令馅而,如agent { dockerfile { additionalBuildArgs '--build-arg foo=bar' } }
祥诽。
常用選項(xiàng)
下面是可以用于兩個(gè)或多個(gè)agent的常用選項(xiàng)。在沒有明確說明的情況下選項(xiàng)是可選的瓮恭。
-
label
一個(gè)字符串雄坪。在這些標(biāo)簽上運(yùn)行Pipeline或每個(gè)
stage
。此選項(xiàng)可用于node
屯蹦,docker
和dockerfile
维哈,并且 對于node
是必需的绳姨。 -
customWorkspace
一個(gè)字符串。運(yùn)行Pipeline或每個(gè)
stage
阔挠, 在這個(gè)agent
的自定義的工作空間內(nèi)飘庄,而不是默認(rèn)的。它可以是相對路徑谒亦,在這種情況下竭宰,自定義工作區(qū)將位于節(jié)點(diǎn)上的工作空間根目錄下,也可以是絕對路徑份招。例如:
agent {
node {
label 'my-defined-label'
customWorkspace '/some/other/path'
}
}
-
reuseNode
一個(gè)布爾值切揭,默認(rèn)為false。如果為true锁摔,則在同一工作空間中廓旬,而不是完全在新節(jié)點(diǎn)上運(yùn)行Pipeline頂層指定的節(jié)點(diǎn)上的容器。此選項(xiàng)適用于
docker
和dockerfile
谐腰,并且僅在agent
的每個(gè)stage
內(nèi)才有效果孕豹。
例如:
Jenkinsfile (Declarative Pipeline)
pipeline {
agent { docker 'maven:3-alpine' }
stages {
stage('Example Build') {
steps {
sh 'mvn -B clean verify'
}
}
}
}
在給定名稱和tag(
maven:3-alpine
)的新創(chuàng)建的容器中執(zhí)行此Pipeline中定義的所有步驟。
Stage-level agent
部分
Jenkinsfile (Declarative Pipeline)
pipeline {
agent none
stages {
stage('Example Build') {
agent { docker 'maven:3-alpine' }
steps {
echo 'Hello, Maven'
sh 'mvn --version'
}
}
stage('Example Test') {
agent { docker 'openjdk:8-jre' }
steps {
echo 'Hello, JDK'
sh 'java -version'
}
}
}
}
agent none
在Pipeline頂層定義確保執(zhí)行者不會被不必要地分配十气。使用agent none
也強(qiáng)制每個(gè)stage
部分包含自己的agent
部分使用此鏡像在新創(chuàng)建的容器中執(zhí)行此stage中的步驟
在新創(chuàng)建的容器中使用與前一個(gè)stage的不同鏡像執(zhí)行此stage中的步驟
發(fā)布 post
post定義將在Pipeline運(yùn)行或stage結(jié)束時(shí)運(yùn)行的操作励背。一些條件后 的塊的內(nèi)支持post: always,changed砸西,failure叶眉,success,unstable芹枷,
和aborted
衅疙。這些塊允許在Pipeline運(yùn)行或stage結(jié)束時(shí)執(zhí)行步驟,具體取決于Pipeline的狀態(tài)鸳慈。
是否必填 | 否 |
---|---|
參數(shù) | 沒有 |
允許出現(xiàn)在 | 在頂級pipeline 塊和每個(gè)stage 塊中饱溢。 |
條件
-
always
無論P(yáng)ipeline運(yùn)行的完成狀態(tài)如何都會運(yùn)行。
-
changed
只有當(dāng)前Pipeline運(yùn)行的狀態(tài)與先前完成的Pipeline的狀態(tài)不同時(shí)走芋,才能運(yùn)行绩郎。
-
failure
僅當(dāng)當(dāng)前Pipeline處于“失敗”狀態(tài)時(shí)才運(yùn)行,通常在Web UI中用紅色指示表示翁逞。
-
success
僅當(dāng)當(dāng)前Pipeline具有“成功”狀態(tài)時(shí)才運(yùn)行肋杖,通常在具有藍(lán)色或綠色指示的Web UI中表示。
-
unstable
只有當(dāng)前Pipeline具有“不穩(wěn)定”狀態(tài)熄攘,通常由測試失敗兽愤,代碼違例等引起,才能運(yùn)行。通常在具有黃色指示的Web UI中表示浅萧。
-
aborted
只有當(dāng)前Pipeline處于“中止”狀態(tài)時(shí)逐沙,才會運(yùn)行,通常是由于Pipeline被手動(dòng)中止洼畅。通常在具有灰色指示的Web UI中表示吩案。
-
cleanup
無論管道或stage的狀態(tài)如何,在跑完所有其他的
post
條件后運(yùn)行此條件下 的post
步驟帝簇。
例如:
Jenkinsfile (Declarative Pipeline)
pipeline {
agent any
stages {
stage('Example') {
steps {
echo 'Hello World'
}
}
}
post {
always {
echo 'I will always say Hello again!'
}
}
}
通常徘郭,該
post
部分應(yīng)放在Pipeline末端post條件塊包含的步驟和steps中的步驟用法相同
stage stages
包含一個(gè)或多個(gè)stage指令的序列,該stages
部分是Pipeline 描述的大部分“工作”所在的位置丧肴。建議stages
至少為持續(xù)交付流程的每個(gè)獨(dú)立部分包含至少一個(gè)stage指令残揉,例如構(gòu)建,測試和部署芋浮。
是否必填 | 是 |
---|---|
參數(shù) | 沒有 |
允許出現(xiàn)在 | 在pipeline 內(nèi)只有一次抱环。 |
例如
pipeline {
agent any
stages {
stage('Example') {
steps {
echo 'Hello World'
}
}
}
}
stages
部分一般跟在agent
,options
等后面纸巷。
步驟 steps
steps
部分定義了在給定stage
指令中執(zhí)行的一系列一個(gè)或多個(gè)步驟镇草。
是否必填 | 是 |
---|---|
參數(shù) | 沒有 |
允許出現(xiàn)在 | 每個(gè)stage 塊內(nèi) |
例如
Jenkinsfile (Declarative Pipeline)
pipeline {
agent any
stages {
stage('Example') {
steps {
echo 'Hello World'
}
}
}
}
steps
部分必須包含一個(gè)或多個(gè)步驟