簡體   English   中英

由於 Azure git 回購請求,觸發 Jenkins 作業

[英]Trigger Jenkins job due to a Azure git repo pull request

我已閱讀 此頁面中的文檔,並且可以看到有一個選項可以“在創建拉取請求時觸發構建”。 我做了以下事情:

在 Azure DevOps
  1. 服務掛鈎 -> Jenkins 訂閱 -> 嘗試合並請求
  2. 觸發通用構建 -> 指定憑據和特定構建。
在 Jenkins 工作中
  1. 創建管道作業並選中“輪詢 SCM”復選框

現在,每當我發出拉取請求時,確實會觸發構建,但我的問題是:如何克隆拉取請求提交以便構建檢查拉取請求是否應該完成?

如果您願意,還有一個問題:我可以在我的“構建觸發器”部分中看到這些復選框:

  • 將更改推送到 TFS 拉取請求時構建
  • 將更改推送到 TFS/Team Services 時構建

這些有什么用? 因為據我所知,只要在 Git 存儲庫中創建新的提交/拉取請求,只有“輪詢 SCM”復選框才會導致構建運行。

編輯

使用自由式工作,我可以通過以下方式完成這項工作:

  1. 在 SCM 配置中設置 refspecs,如下所示:
 +refs/heads/*:refs/remotes/origin/* +refs/pull/*:refs/remotes/origin-pull/*
  1. 將“要跟蹤的分支”設置為** ,以便跟蹤和構建pull/*分支。

問題是如何在流水線作業中進行這項工作。

檢查 Jenkins Pipeline 作業中的拉取請求提交。 您可以在結帳步驟中添加 refspec,如下所示:

 steps {
             
              checkout([$class: 'GitSCM', 
              extensions: [[$class: 'LocalBranch']],
              userRemoteConfigs: [[refspec:"+refs/heads/*:refs/remotes/origin/* +refs/pull/*:refs/remotes/origin-pull/*",credentialsId: '<credentialsId>', url: "<git repo url>"]]])
              //
         }

注意: credentialsId來自Jenkins --> Credentials ,您可以在其中為 azure devops 存儲庫添加憑據。 這里

在此處輸入圖像描述

請參見下面的示例結果:

在此處輸入圖像描述

對於Build Triggers部分中的Poll SCM 如果您啟用了Poll SCM ,jenkin 服務器將以固定的時間間隔輪詢 SCM 以檢查是否進行了更改並在推送新提交時構建項目。

不推薦輪詢 SCM 選項。 因為它對 CVS 來說是一項昂貴的操作。 它通常在“推送”觸發器不起作用時使用(例如,repo 在本地源代碼控制服務器中)

請注意,這對於 CVS 來說將是一項昂貴的操作,因為每次輪詢都需要 Jenkins 掃描整個工作區並與服務器進行驗證。 考慮設置“推送”觸發器以避免這種開銷

好吧,在搞砸了很多時間之后,我發現了以下結論,這對我來說並不完全有意義:

觸發通用構建與觸發 Git 構建

首先,在使用這些選項時會檢查不同的行為。 假設Jenkins的配置如下:

管道配置

  • 來自 SCM 的管道腳本 -> Git
  • 將某些 repo 和feature分支配置為“要構建的分支”
  • 輪詢 SCM(用於使用“觸發器 Git 構建”)

詹金斯文件

  • 不包含skipDefaultCheckout()
  • checkout(... branches: [[ name: '**' ]], userRemoteConfigs: [[refspec:"+refs/heads/*:refs/remotes/origin/* +refs/pull/*:refs/remotes/origin-pull/*" ]]) (忽略不相關的配置)

現在,創建一個新的拉取請求,觀察到的行為是:
使用通用構建:默認簽出將簽出feature分支。 在聲明multiple candidate revisions后, checkout出步驟可能(並且通常會)簽出舊的拉取請求提交

使用觸發器 Git 構建:默認簽出失敗,因為它不知道提交 object,因為未在配置頁面中配置 refspec。 配置完成后,默認簽出會檢查最新的拉取請求提交。

結論

所以基本上我們得到以下結論:
為此,請執行以下步驟:

Azure DevOps 服務掛鈎
配置“拉取請求合並嘗試”類型的 Jenkins 服務掛鈎,並將其設置為“觸發 Git 構建”

管道配置頁面

  • 設置Poll SCM選項
  • 配置 Git 存儲庫
  • 如果要使用 Default Checkout,請在advanced下配置 refspec 如下: +refs/heads/*:refs/remotes/origin/* +refs/pull/*:refs/remotes/origin-pull/*branches: [[name: '**']]

詹金斯文件

  • 如果您使用的是默認結帳,那么您基本上已經設置好了。
  • 如果沒有,請設置skipDefaultCheckout選項,並使用上面寫的帶有refspeccheckout步驟:
checkout([$class: 'GitSCM', branches: [[name: '**']], , userRemoteConfigs: [[name: 'origin', refspec: '+refs/heads/*:refs/remotes/origin/* +refs/pull/*:refs/remotes/origin-pull/*', url: '<git_url>']]]))

如果有人對這些事情有進一步的解釋,那么歡迎您!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM