歡迎關(guān)注我公眾號呀~「測試游記」「zx94_11」
觸發(fā)流水線執(zhí)行可以分為:
- 時間觸發(fā)
- 事件觸發(fā)
時間觸發(fā)
定義一個時間,時間到了就觸發(fā)pipeline。
在Jenkins pipeline中使用trigger指令來定義時間觸發(fā)
定時執(zhí)行:cron
Jenkins trigger cron語法采用UNIX cron語法。一條cron包含五個字段,使用空格分隔。
格式:MINUTE HOUR DOM MONTH DOW
- MINUTE:分鐘 0~59
- HOUR:小時 0~23
- DOM:一個月中的某天 1~31
- MONTH:月份 1~12
- DOW:星期幾 0~7,0和7代表星期天
使用特殊字符,指定多個值
-
*:匹配所有值 -
M-N:匹配M-N之間的值 -
M-N|Xor*|x:指定M到N以X為步長的值 -
A,B,C……Z:多個值
為了解決在同一時刻執(zhí)行定時任務(wù)可能出現(xiàn)的負(fù)載不均衡問題。在Jenkins trigger cron語法中使用
H字符來解決這個問題。H代表hash
H 0 * * *代表在0點0分至0點59分任意一個時間點執(zhí)行。
幾個例子:
-
H/5 * * * *:每隔5分鐘構(gòu)建一次 -
H H/2 * * *:每兩小時構(gòu)建一次 -
0 12 * * *:每天12點定時構(gòu)建一次 -
H(0-29)/10 * * * *:前半小時的每隔10分鐘 -
45 9-16/2 * * 1-5:周一到周五的9點45到16點45的每隔兩個小時構(gòu)建一次
pipeline {
agent any
triggers {
cron ('0 0 * * *')
}
stages {
stage ('Nightly build') {
steps {
echo '明天凌晨執(zhí)行'
}
}
}
}
輪詢代碼倉庫:pollSCM
定期到代碼倉庫詢問代碼是否有變化,如果代碼倉庫有變化,就執(zhí)行
pipeline {
agent any
triggers {
pollSCM ('H/1 * * * *')
}
stages {
stage ('build') {
steps {
echo '輪詢執(zhí)行'
}
}
}
}
事件觸發(fā)
- 手動在界面上觸發(fā)
- 其他job觸發(fā)
- HTTP API Webhook觸發(fā)
由上游任務(wù)出發(fā):upstream
當(dāng)B任務(wù)的執(zhí)行依賴A任務(wù)的執(zhí)行結(jié)果,A就是B的上游任務(wù)。
triggers {
upstream(upstreamProjects: 'job1,job2',threshold:hudson.model.Result.SUCCESS)
}
- job1和job2是任務(wù)名
- threshold判斷上游任務(wù)是什么狀態(tài)的時候觸發(fā)
- hudson.model.Result包含了
ABORTED,FAILURE,SUCCESS,UNSTSBLE,NOT_BUILT
其中它們分別表示:
- ABORTED:任務(wù)被手動中止
- FAILURE:構(gòu)建失敗
- SUCCESS:構(gòu)建成功
- UNSTSBLE:存在一些錯誤,但不至于構(gòu)建失敗
- NOT_BUILT:在多階段構(gòu)建時,前面階段的問題導(dǎo)致后面階段無法執(zhí)行
Gitlab通知觸發(fā)
- 安裝Gitlab插件
- 安裝git插件(應(yīng)該已經(jīng)安裝了)

- 在Gitlab上創(chuàng)建一個項目

- 將代碼上庫
$ git clone http://123.56.13.233:9000/zhongxin/hello-world-pipeline.git
正克隆到 'hello-world-pipeline'...
warning: 您似乎克隆了一個空倉庫。
$ cd hello-world-pipeline
$ touch 1.py
$ git add 1.py
$ git commit -m "add 1.py"
[master(根提交) e815882] add 1.py
1 file changed, 0 insertions(+), 0 deletions(-)
create mode 100644 1.py
$ git push -u origin master
remote: You are not allowed to push code to this project.
fatal: unable to access 'http://123.56.13.233:9000/zhongxin/hello-world-pipeline.git/': The requested URL returned error: 403
$ git push -u origin master
分支 'master' 設(shè)置為跟蹤來自 'origin' 的遠(yuǎn)程分支 'master'。
Everything up-to-date
PS:如果遇到403問題請將.git/config中的url修改為:https://用戶名:密碼@123.56.13.233:9000/zhongxin/hello-world-pipeline.git/


再同之前GitHub一樣,添加一個憑證


為了保障安全,需要生成一個Secret toekn
c342352fc4cf45e01c0f783a7fdf38b7就是一個Secret toekn


額,到這里遇到一個比較尷尬的問題。我的gitlab服務(wù)器在公網(wǎng),Jenkins服務(wù)器在局域網(wǎng)內(nèi)
如果,如果成功了的話就可以在下方Project services處看到新增的Webhooks
Jenkinsfile中編寫Gitlab trigger
pipeline {
agent any
triggers {
gitlab(triggerOnPush: true,
triggerOnMergeRequest: true,
branchFilterType: 'All',
secretToken: 'c342352fc4cf45e01c0f783a7fdf38b7')
}
stages {
stage('build') {
steps {
echo "Hello wolrd"
}
}
}
}
- triggerOnPush:當(dāng)Gitlab觸發(fā)push事件,是否執(zhí)行構(gòu)建
- triggerOnMergeRequest:當(dāng)Gitlab觸發(fā)mergeRequest事件時,是否執(zhí)行構(gòu)建
- branchFilterType:只有符合條件的分支才會觸發(fā),必選
將構(gòu)建信息推送到GitLab



pipeline {
agent any
triggers {
gitlab(triggerOnPush: true,
triggerOnMergeRequest: true,
branchFilterType: 'All',
secretToken: 'c342352fc4cf45e01c0f783a7fdf38b7')
}
stages {
stage('build') {
steps {
echo "Hello wolrd"
}
}
}
post {
failure {
updateGitlabCommitStatus name:'build',state:'failed'
}
success {
updateGitlabCommitStatus name:'build',state:'success'
}
}
options {
gitLabConnecton('gitlab')
}
}
其他系統(tǒng)觸發(fā)Webhook
使用Generic Webhook Trigger插件,具體內(nèi)容不展開