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