現狀:現在是這樣的,每個開發push時,都觸發jenkins進行構建
期望:只有當代碼被push到master時才進行構建
(根據使用的git平台)做這些配置需要先了解一些概念:
(github) pull request
(gitlab) merge request
理解 GitHub 的 Pull Request 和 GitLab 的 Merge Request 有區別嗎?看這篇
https://cloud.tencent.com/developer/article/1341633
個人理解,其實pull request 和 merge request表達的意思都是一樣的,只是在不同的平台,起了不同的名字
- GitHub、Bitbucket 和碼雲(Gitee.com)選擇 Pull Request 作為這項功能的名稱
- GitLab 和 Gitorious 選擇 Merge Request 作為這項功能的名稱
然后還要理解gitlab的工作流:
步入正題:
2種方式可以實現 只有master代碼變化時才觸發自動化測試
- 利用merge request: 當開發發送merger request給項目leader時(要求合代碼),就進行構建
- 利用jenkins進行配置,只有當master代碼產生push時,才進行構建
方式1:利用merge request方式:
step1:
打開gitlab倉庫配置的webhook,勾選Merge request events的選項
我這邊是已經配置過webhook了,如果還沒有配置過,請參考這篇進行配置:
GitLab 自動觸發 Jenkins 構建
step2:配置jenkins
打開項目配置
Builder triggers>>取消勾選Push Events 選項,然后把有關merge request events 的選項勾上(如果不去掉push events 當分支發生push時,jenkns還是會構建)
step3:測試配置結果
在gitlab 發送一個push的請求,可以看到jenkins已經不會構建了
再測試發送一個 merge request
發現jenkins已經在進行構建了
方式2:利用jenkins進行配置,只有當master代碼產生push時,才進行構建,這個很簡單
我們可以通過jenkins>>Builder triggers 配置正則匹配,只有當master分支發生改變時才會觸發jenkins。
step1:打開項目配置
Builder triggers>>Advanced>>Allowed branches>>Filter branches by regex>>Target Branch Regex>>填寫master>>保存配置
注意:這次要勾選 push events
step2:測試配置結果
a.當開發在dev分支push時,jenkins不會再進行構建
b.當開發在 master push時,jenkins進行構建了
至此就實現了我想要實現的效果:只有master分支會觸發jenkins進行構建
我遇到坑:
如果我使用方式2配置了過濾分支的正則表達式(同時勾選了push events ),gitlab發送請求的時候就會報錯
造成這個問題的原因是,我的正則表達式寫錯了,暈~
應該是master 而不是*master
我參考的文章,謝謝前人zai樹,讓后人可以乘涼
配置github的pull request觸發jenkins自動構建
jenkins定位master分支構建
配置GitHub pull request時jenkins自動構建