Jenkins(七)

歡迎關(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|X or *|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包含了ABORTEDFAILURE,SUCCESS,UNSTSBLENOT_BUILT

其中它們分別表示:

  • ABORTED:任務(wù)被手動中止
  • FAILURE:構(gòu)建失敗
  • SUCCESS:構(gòu)建成功
  • UNSTSBLE:存在一些錯誤,但不至于構(gòu)建失敗
  • NOT_BUILT:在多階段構(gòu)建時,前面階段的問題導(dǎo)致后面階段無法執(zhí)行

Gitlab通知觸發(fā)

  1. 安裝Gitlab插件
  2. 安裝git插件(應(yīng)該已經(jīng)安裝了)
image-20190713215959418
  1. 在Gitlab上創(chuàng)建一個項目
創(chuàng)建項目
  1. 將代碼上庫
$ 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一樣,添加一個憑證

添加憑證
觸發(fā)器

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

c342352fc4cf45e01c0f783a7fdf38b7就是一個Secret toekn

生成Secret toekn
配置Gitlab

額,到這里遇到一個比較尷尬的問題。我的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

創(chuàng)建API token
添加憑證
設(shè)置
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)容不展開

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 前言 在日常開發(fā)中,經(jīng)常會有發(fā)布的需求,而且經(jīng)常會碰到各種環(huán)境,比如:開發(fā)環(huán)境、測試環(huán)境、生產(chǎn)環(huán)境。雖然可以使用手...
    tinylk閱讀 39,409評論 34 78
  • 背景 在測試環(huán)境部署這塊,經(jīng)歷過以下幾個階段: 階段一有一臺測試服務(wù)器把項目放上面測試,當(dāng)初也沒有什么相關(guān)的經(jīng)驗,...
    anyesu閱讀 42,957評論 6 50
  • 在擁擠的列車上 出站的列車緩慢前行 孩子們在吵鬧 大人們在爭執(zhí) 透過車窗僅有的一絲縫隙 我看到了窗外美麗的風(fēng)光 園...
    1如是我聞閱讀 1,043評論 8 41
  • 文/居里社 01 真的不要低估你身邊的每一個人,你也并不知道究竟哪片云彩會下雨。 最近結(jié)交了一些新朋友,一些很時尚...
    居里葉閱讀 707評論 0 7
  • 剛剛五點二十鬧鐘響了一下,馬上按掉,想瞇一下在起床,想不到瞇一會的功夫就可以做一個夢。 夢到了在路上碰到一位初中同...
    55a50d532804閱讀 221評論 0 5

友情鏈接更多精彩內(nèi)容