繁体   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