pipeline最簡結(jié)構(gòu)
pipeline{
agent any
stages{
stage('build'){
steps{
echo "我是一個(gè)最簡結(jié)構(gòu),缺一不可"
}
}
}
}
- pipeline:代表整條流水線,包含整條流水線的邏輯
- agent:指定流水線的執(zhí)行器 (在節(jié)點(diǎn)上)和工作區(qū)
- stages:封裝了用于定義流水線主體和邏輯的所有單個(gè)階段定義
- 至少包含一個(gè)stage
- stage:代表流水線的階段,每個(gè)階段都必須有名稱
- steps:封裝一組DSL步驟
- 至少包含一個(gè)步驟
pipeline代碼塊

agent
- 指定整個(gè)流水線或者一個(gè)特定的階段在哪里運(yùn)行
- agent any:該流水線或階段可以運(yùn)行在任何一個(gè)定義好的代理節(jié)點(diǎn)上
- agent none:在頂端時(shí),代表不設(shè)置一個(gè)全局的代理節(jié)點(diǎn),同時(shí)也代表,如有必要,需要為單個(gè)階段指定一個(gè)代理節(jié)點(diǎn)
- agent { label "<label>" }:表明該流水線或階段可以運(yùn)行在任何一個(gè)具有<label>標(biāo)簽的代理節(jié)點(diǎn)上
- agent {docker '<image>'}:docker節(jié)點(diǎn),這個(gè)在后續(xù)學(xué)習(xí)中繼續(xù)補(bǔ)充
environment
用于設(shè)置環(huán)境變量,可定義在stage或pipeline部分
在流水線代碼頂部定義的環(huán)境,將使流水線所有的步驟都可以訪問變量
-
在一個(gè)階段中定義的環(huán)境,只能在這個(gè)階段范圍內(nèi)訪問變量
pipeline{ environment{ FIRSTNAME = "san" LASTNAME = "zhang" USERNAME = "${LASTNAME}${FIRSTNAME}" } agent any stages{ stage('build'){ steps{ echo "我的名字${USERNAME}" } } } } -
憑證與環(huán)境變量
- 學(xué)完憑證功能后,再補(bǔ)充
tools
可定義在pipeline或stage部分
會(huì)自動(dòng)下載下載并安裝我們指定的工具,并將其加入PATH變量中
-
在全局工具配置(Global Tool Configuration)界面配置工具版本,必須是選擇了自動(dòng)安裝
image-20190606165944537.png
pipeline{
agent any
tools{
maven 'maven3-6'
}
stages{
stage('build'){
steps{
sh 'mvn clean test install'
echo "tools命令自動(dòng)安裝maven"
}
}
}
}
options
用于配置jenkins pipeline本身的選項(xiàng)
指定一些屬性和值,這些預(yù)定義的選項(xiàng)可以應(yīng)用到整個(gè)流水線
-
這些屬性一般都可以在jenkins web表單進(jìn)行基本的配置
image-20190606173114352.png 可以定義在stages或pipeline部分
保留歷史構(gòu)建記錄的數(shù)量
- 保留指定數(shù)量的流水線數(shù)量,包含控制臺(tái)輸出以及制品
options{
buildDiscarder(logRotator(numToKeepStr:'10'))
}
指定從版本庫中檢出源碼時(shí)的檢出目錄
拉取代碼時(shí),默認(rèn)檢出到工作空間的根目錄
-
此選項(xiàng)可以指定檢出到工作空間的子目錄中
options{ checkoutToSubdirectory('zimulu') }
不允許并發(fā)構(gòu)建
阻止jenkins開始并發(fā)執(zhí)行同一個(gè)流水線
-
在某些pipeline存在槍占資源或調(diào)用沖突的場(chǎng)景下,此選項(xiàng)非常有用
options{ disableConcurrentBuilds() }
重試次數(shù)
如果流水線執(zhí)行失敗,重試運(yùn)行整個(gè)流水線,重試的次數(shù)為指定的數(shù)量
-
當(dāng)使用retry選項(xiàng)時(shí),options可以被放在stage塊中
options{ retry(2) }
超時(shí)
設(shè)置一個(gè)超時(shí)時(shí)間,如果超過該時(shí)間,整個(gè)流水線終止
當(dāng)使用retry選項(xiàng)時(shí),options可以被放在stage塊中
-
unit:SECONDS、MINUTES、HOURS
options{ timeout(time:15, unit:'MINUTES') }
讓每個(gè)stage都分別運(yùn)行在一個(gè)新的容器中
當(dāng)agent為docker或dockerfiles時(shí),指定在同一個(gè)jenkins節(jié)點(diǎn)上,每個(gè)stage都分別運(yùn)行在一個(gè)新的容器中
-
不設(shè)置的話,是所有的stage都運(yùn)行在同一個(gè)容器中
options{ newContainerPerStage() }
添加時(shí)間戳到控制臺(tái)輸出中
這個(gè)選項(xiàng)需要安裝timestamper插件
-
該選項(xiàng)會(huì)全局應(yīng)用到整個(gè)流水線中執(zhí)行
options{ timestamper() }
其他,后期完善
- skipDefaultCheckout
- skipStagesAfterUnstable
pipeline{
agent any
options{
buildDiscarder(logRotator(numToKeepStr:'10'))
}
stages{
stage('build'){
steps{
echo "保留最近十次的構(gòu)建"
}
}
}
}
triggers
- 這些觸發(fā)器并不適用于多分支流水線、Github組織或者Bitbuchet團(tuán)隊(duì)/項(xiàng)目等類型的任務(wù)
- 需要手動(dòng)觸發(fā)一次任務(wù),讓jenkins加載后,trigger指令才會(huì)生效
cron
定時(shí)執(zhí)行
MINUTE:一小時(shí)內(nèi)的分鐘,0~59
HOUR:一天內(nèi)的小時(shí),0~23
DOM:一個(gè)月的某一天,0~31
MONTH:月份,1~12
DOW:星期幾,0~7,0和7代表星期天
*:匹配所有值
-
*/<value>:表示每隔<value>
-
*/10 * * * *:每10min執(zhí)行一次
-
M-N:匹配M到N之間的值
M-N/X 或者 */X:指定在M-N范圍內(nèi),每隔X執(zhí)行一次,步長
A,B,······,Z:使用逗號(hào)枚舉多個(gè)值
-
H:代表隨機(jī)值
-
H 1 * * *:1點(diǎn)的0-59分內(nèi)隨機(jī) -
H(0,30) * * * *:每小時(shí)的0-30分內(nèi)隨機(jī) -
H H(0-7) * * *:0點(diǎn)到7:59之間的某個(gè)時(shí)間點(diǎn) - H符號(hào)在某個(gè)范圍上的隨機(jī)值,對(duì)于指?jìng)€(gè)項(xiàng)目,他是固定的
-
H/15 * * * *:每15min(可能是:07、:22、:37、52) -
H(0-29)/10 * * * *:前半個(gè)小時(shí),每隔10min執(zhí)行一次(:03、:13、:23) -
45 9-16/2 * * 1-5:每個(gè)工作日(周一到周五)從9:45開始到15:45結(jié)束,每隔兩個(gè)小時(shí)執(zhí)行一次 -
H H 1,15 1-11 *:除12月外,每個(gè)月的第1天、第15天執(zhí)行一次
-
// 從周一到周五上午8點(diǎn)開始執(zhí)行流水線
triggers{
cron('0 8 * * 1-5')
}
pollSCM
- 定期輪詢代碼倉庫是否有變化,有變化則執(zhí)行
- 設(shè)置時(shí)間的規(guī)則與cron一致
// 每分鐘判斷一次代碼是否有變化
triggers{
pollSCM('*/1 * * * *')
}
upstream
-
由上游任務(wù)觸發(fā)
triggers{ upstream(upstreamProjects:'job1,job2',threshold:hudson.model.Result.SUCCESS) } job1,job2都是任務(wù)名
upstreamProjects:接收任務(wù),用
,隔開threshold:上游任務(wù)的執(zhí)行結(jié)果是什么值時(shí)觸發(fā)
-
hudson.model.Result是一個(gè)枚舉,包含以下值
- ABORTED:任務(wù)被手動(dòng)終止
- FAILURE:構(gòu)建失敗
- SUCCESS:構(gòu)建成功
- UNSTABLE:存在一些錯(cuò)誤,但不至于構(gòu)建失敗
- NOT_BUILT:在多階段構(gòu)建時(shí),前面階段的問題導(dǎo)致后面階段無法執(zhí)行
parameters
參數(shù)化pipeline是指可以通過傳參來決定pipeline的行為
參數(shù)化讓寫pipeline就像寫函數(shù),可重用
只能放在pipeline塊下
-
三個(gè)參數(shù)
- defaultValue:默認(rèn)值
- description:參數(shù)的描述信息
- name:參數(shù)名
-
引用
params.name 多種參數(shù)類型
-
string,字符串類型
parameters{ string(name:'DEPLOY_ENV',defaultValue:'staging',description:'string') }image-20190613142009863.png-
等同于
image-20190613142141172.png
-
-
text,多行文本類型,換行使用 \n
parameters{ text(name:'DEPLOY_TEXT',defaultValue:'文本一\n文本二\n文本三',description:'text') }image-20190613142300193.png
-
booleanParam,布爾類型
parameters{ booleanParam(name:'DEBUG_BUILD',defaultValue:'true',description:'booleanParam') }image-20190613142348006.png -
choice,選擇參數(shù)類型,使用 \n 來分隔多個(gè)選項(xiàng)
parameters{ choice(name:'CHOICES',choices:'dev\ntest\nstaging',description:'請(qǐng)選擇部署環(huán)境') }image-20190613142736693.png
-
file,文件類型,用戶可上傳文件—不推薦使用
parameters{ file(fileLocation:'',defaultValue:'select the file to upload') }
?
- password:密碼類型
parameters{ password(name:'PASSWORD',defaultValue:'SECRET',description:'password') }image-20190613142848211.png







