我已阅读 this page 中的文档,我可以看到有一个选项可以“在创建拉取请求时触发构建”。我做了以下事情:
在 Azure DevOps 中现在,每当我发出拉取请求时,确实会触发构建,但我的问题是:如何克隆拉取请求提交以便构建检查拉取请求是否应该完成?
另一个问题:我可以在“构建触发器”部分看到这些复选框:
这些有什么用?因为据我所知,只要在 Git 存储库中创建新的提交/拉取请求,只有“Poll SCM”复选框会导致构建运行。
使用 Freestyle 作业,我可以通过以下方式完成这项工作:
+refs/heads/*:refs/remotes/origin/* +refs/pull/*:refs/remotes/origin-pull/*
**
,以便跟踪和构建 pull/*
分支。问题是如何在流水线作业中实现这一点。
答案 0 :(得分:0)
检查 Jenkins 流水线作业中的拉取请求提交。您可以在结帐步骤中添加 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-->凭据,您可以在其中为 azure devops 存储库添加凭据。见here。
见下面的示例结果:
对于 Poll SCM
部分中的 Build Triggers
。如果您启用了 Poll SCM
,jenkin 服务器将按固定时间间隔轮询 SCM,以检查是否进行了更改,并在新提交被推送时构建项目。
不推荐使用 Poll SCM 选项。因为这对于 CVS 来说是一个昂贵的操作。它通常在“推送”触发器不起作用时使用(例如,repo 在本地源代码控制服务器中)
<块引用>请注意,这对于 CVS 来说将是一项昂贵的操作,因为每次轮询都需要 Jenkins 扫描整个工作区并与服务器进行验证。考虑设置一个“推送”触发器来避免这种开销
答案 1 :(得分:0)
好吧,经过很多时间搞砸了,我发现了以下结论,这对我来说并不完全有意义:
首先,在使用每个选项时会检查不同的行为。假设Jenkins的配置如下:
管道配置
feature
分支配置为“要构建的分支”Jenkinsfile
skipDefaultCheckout()
checkout(... branches: [[ name: '**' ]], userRemoteConfigs: [[refspec:"+refs/heads/*:refs/remotes/origin/* +refs/pull/*:refs/remotes/origin-pull/*" ]])
(忽略不相关的配置)现在,创建一个新的拉取请求,观察到的行为是:
使用通用构建:默认检出将检出 feature
分支。在声明 checkout
multiple candidate revisions
步骤可能(并且经常会)检出旧的拉取请求提交
使用触发 Git 构建:默认检出失败,因为它不知道提交对象,因为没有在配置页面中配置 refspec。配置好之后,默认的 checkout 会检查最新的 pull-request 提交。
所以基本上我们得到以下结论:
为了使其正常工作,请执行以下步骤:
Azure DevOps 服务挂钩
配置一个“拉取请求合并尝试”类型的Jenkins服务钩子,并设置为“触发Git Build”
管道配置页面
Poll SCM
选项+refs/heads/*:refs/remotes/origin/* +refs/pull/*:refs/remotes/origin-pull/*
和branches: [[name: '**']]
Jenkinsfile
skipDefaultCheckout
选项,并使用 checkout
步骤和 refspec
如上所述:checkout([$class: 'GitSCM', branches: [[name: '**']], , userRemoteConfigs: [[name: 'origin', refspec: '+refs/heads/*:refs/remotes/origin/* +refs/pull/*:refs/remotes/origin-pull/*', url: '<git_url>']]]))
如果有人对这些事情有进一步的解释,那就更欢迎了!