
設(shè)置好了功能強(qiáng)大的流水線后,接下來(lái)我們要做的就是去執(zhí)行流水線,如果都靠手動(dòng)去觸發(fā)流水線,顯然不符合帶著自動(dòng)化基因新一代工程師的風(fēng)格,必須自動(dòng)觸發(fā)。
那么Jenkins的Pipeline支持哪些觸發(fā)機(jī)制呢。一起來(lái)看一下。
定時(shí)觸發(fā):cron
cron規(guī)則與crontab的規(guī)則是一樣的
pipeline{
agent any
triggers{
cron('0 0 * * *')
}
stages{
stage('半夜觸發(fā)'){
steps{
echo "凌晨執(zhí)行"
}
}
}
}
輪詢代碼倉(cāng)庫(kù)
周期性檢查代碼,看代碼是否有更新。這種方式需要使用
pipeline{
agent any
triggers{
pollSCM('* * * * *')
}
stages{
stage('每分鐘檢查'){
steps{
echo "每分鐘檢查代碼倉(cāng)庫(kù)是否更新"
}
}
}
}
由上游任務(wù)觸發(fā)
pipeline{
agent any
triggers{
upstream(upstreamProjects: 'job1,job2', threshold: hudson.model.Result.SUCCESS)
}
stages{
stage('上游觸發(fā)'){
steps{
echo "當(dāng)job1或job2執(zhí)行成功時(shí),觸發(fā)該流水線"
}
}
}
}
hudson.model.Result包括以下?tīng)顟B(tài):
ABORTED:任務(wù)被手動(dòng)中止
FAILURE:構(gòu)建失敗
SUCCESS:構(gòu)建成功
UNSTABLE:存在一些錯(cuò)誤,但構(gòu)建沒(méi)失敗
NOT_BUILT:多階段構(gòu)建時(shí),前面階段問(wèn)題導(dǎo)致后面階段無(wú)法執(zhí)行
GitLab通知觸發(fā)
詳情請(qǐng)?jiān)诓寮?a target="_blank" rel="nofollow">Gitlab plugin的github頁(yè)面上查看
pipeline{
agent any
triggers{
gitlab(
triggerOnPush: true,
triggerOnMergeRequest: true,
branchFilterType: 'All',
secretToken: "abcdxxxfa")
}
stages{
stage('構(gòu)建'){
steps{
echo "gitlab 觸發(fā)"
}
}
}
}
將構(gòu)建狀態(tài)信息推送到GitLab
- 在Jenkins的系統(tǒng)設(shè)置中,Gitlab選項(xiàng)下填入Gitlab信息。例Connection name設(shè)為gitlab
- 按提示設(shè)置Gitlab的憑證,以對(duì)話框中輸入Gitlab平臺(tái)獲取的API token
- 在pipeline的post部分,將構(gòu)建結(jié)果更新到Gitlab相應(yīng)的commit記錄下,同時(shí)還需要在options參數(shù)中加入
gitLabConnection配置
pipeline{
agent any
triggers{
gitlab(
triggerOnPush: true,
triggerOnMergeRequest: true,
branchFilterType: 'All',
secretToken: "abcdxxxfa")
}
stages{
stage('構(gòu)建'){
steps{
echo "gitlab 觸發(fā)"
}
}
}
post{
failure{
updateGitlabCommitStatus name: 'build', state: 'failed'
}
success{
updateGitlabCommitStatus name: 'build', state: 'success'
}
}
options{
gitLabConnection('gitlab')
}
}
Generic Webhook Trigger插件觸發(fā)
Generic Webhook Trigger是一個(gè)通用的通過(guò)Webhook的方式觸發(fā)pipeline的插件
pipeline{
agent any
triggers{
GenericTrigger(
genericVariables: [
key: 'ref', value: '$.ref'
],
token: 'secret',
causeString: 'Triggered on $ref',
printContributedVariables: true,
printPostContent: true,
regexpFilterText: '$ref',
regexpFilterExpression: 'refs/heads(master|dev)'
)
}
stages{
stage('自定義觸發(fā)'){
steps{
echo "Generic 觸發(fā)"
}
}
}
}
然后通過(guò)POST請(qǐng)求觸發(fā)
curl -X POST -H "Content-Type: application/json" -d '{"ref": "refs/heads/master" }' -vs http://jenkins.local:8080/jenkins/generic-webhook-trigger/invoke?token=secret
觸發(fā)條件依靠:token、regexpFilterText、regexpFilterExpression三個(gè)參數(shù)。首先token必須匹配,其次regexpFilterText指定的key對(duì)應(yīng)的值滿足regexpFilterExpression表達(dá)式。
參考資料
《Jenkins 2.X實(shí)踐指南》