Jenkins對(duì)Gitlab merge requests進(jìn)行代碼檢查

引子

當(dāng)前大部分公司的代碼管理業(yè)務(wù)流使用merge requests方式,當(dāng)功能開(kāi)發(fā)完成之后由開(kāi)發(fā)發(fā)起merge requests將代碼合入主干分支。

Jenkins的SCM可以監(jiān)控git某個(gè)分支的狀態(tài),如果分支上有新的代碼上傳則可以觸發(fā)任務(wù)。

用此種方式如果任務(wù)失敗執(zhí)行失敗,開(kāi)發(fā)修改代碼之后需要再次去提交merge請(qǐng)求。如果我們能在merge請(qǐng)求時(shí)候觸發(fā)Jenkins任務(wù)則可以大大減少這種情況。

此文介紹使用Jenkins的Gitlab插件和Gitlab的Webhook在merge請(qǐng)求中觸發(fā)Jenkins任務(wù)(代碼靜態(tài)檢查)并在請(qǐng)求中備注狀態(tài)的一種實(shí)踐。

前提環(huán)境

  • Gitlab 12.9.2-ee
  • Jenkins 2.235.5
  • Sonar 7.9.4.35981
  • GitLab Plugin 1.5.13

配置

  1. Jenkins中配置Gitlab權(quán)限,該用戶權(quán)限需要為Developer或Maintainer。其他權(quán)限不能上傳pipline狀態(tài)(該權(quán)限可單獨(dú)設(shè)置,可找管理員確認(rèn))。
  2. Jenkins中創(chuàng)建freestyle任務(wù)(pipeline官方插件提示git merge支持不完整)
  3. 輸入git地址,如:git@your.gitlab.server:gitlab_group/gitlab_project.git,在高級(jí)設(shè)置中輸入Name為origin,Refspec為+refs/heads/:refs/remotes/origin/ +refs/merge-requests//head:refs/remotes/origin/merge-requests/
  4. 設(shè)置Branch Specifier屬性,如果項(xiàng)目為單一代碼庫(kù)工作流,輸入origin/{gitlabSourceBranch}。為Fork代碼工作流則輸入merge-requests/{gitlabMergeRequestIid}
  5. 在附加選項(xiàng)中添加Merge before build,其中Name設(shè)置為origin,Branch to merge設(shè)置為${gitlabTargetBranch}
  6. 設(shè)置觸發(fā)器為Build when a change is pushed to GitLab。選擇觸發(fā)事件為Opened merge requests和comments
  7. 去gitlab頁(yè)面設(shè)置webhook,其中url在上述第六步會(huì)提示,token也在第六步高級(jí)選型里面生成的,去除SSL驗(yàn)證的勾選,保存并測(cè)試webhook可以正確發(fā)送
  8. 在build中添加靜態(tài)代碼檢查工具,如現(xiàn)在項(xiàng)目用的Sonar(其配置自行上網(wǎng)搜索)
  9. 在構(gòu)建后操作中添加Publish build status to GitLab,該功能可上傳pipeline狀態(tài)到gitlib。

其他設(shè)置

  • 如需添加評(píng)論信息在gitlib,可添加Add a note to merge requests到構(gòu)建后操作中
  • 如需添加投票信息到gitlib,可添加Add Vote for build status on merge requests
  • 如需讓構(gòu)建失敗的提交不能合入可在gitlab設(shè)置中開(kāi)啟“Pipelines must succeed”選項(xiàng)

常見(jiàn)問(wèn)題

  • merge請(qǐng)求中查看不到pipeline狀態(tài)

確認(rèn)Jenkins中使用的gitlib賬戶的權(quán)限,同時(shí)在項(xiàng)目設(shè)置中查看pipeline權(quán)限。

  • 怎樣重新運(yùn)行檢查

因?yàn)樯鲜雠渲弥刑砑恿薱omment觸發(fā),可在merge請(qǐng)求中添加備注“jenkins please retry a build”再次觸發(fā)構(gòu)建。

  • Gitlib中找不到webhook設(shè)置

需要登錄賬戶的權(quán)限為Maintainer。

參考

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

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