问题描述
我们有Azure Devops设置。现在,我们的项目将构建两次。
在YAML文件中的“拉取请求”检入过程中,一次是由于构建设置(下图)。
这会触发两次构建,并使我们的构建时间加倍。我们的Devops小组提到这是常规做法。为什么Azure Devops不会只触发一个版本,或者两个版本更安全呢?
解决方法
从功能上讲,两个版本可能并不总是相同的。
假设您有以下示例。大写字母是提交,小写字母是潜在的提交。
e e'
/ \
| | D
C | B
\ | /
A
这表明,有两个分支来自A提交(主分支)。每个功能分支都为每个功能分支创建了一个PR。一个分支基于e提交构建,另一个分支基于e'提交构建。 Azure开发人员无法确定哪个PR将首先被合并。
一旦合并两个PR,您将在master中以先前尚未构建的新提交来结束。描述here
F
E \
/ | D
C | B
\ | /
A
如果要消除在master上进行构建的需要,可以将构建到期时间设置为Immediately when branch name is updated
Azure Devops为什么不只触发一个版本,还是两个版本更安全呢?
据我所知,这是Azure Devops的预期工作流程。
由于构建设置
此触发器在请求请求过程中发生,PR触发器应在创建PR时运行。
此触发器等效于验证步骤,文件未真正提交到目标分支(已预合并到Targer分支)。
您可以检查构建结果以确定源分支代码是否有效。
例如:
如果“拉取请求”触发器失败,则可以拒绝拉取请求。它不影响目标分支,目标分支保持原始状态
在YAML文件中拉出请求签入
这可能是CI trigger。
拉动请求完成后,将触发此触发器。
在这种情况下,目标分支已更改。目标分支的更改将触发CI触发器。这样可以再次检查代码是否有效。
工作流程摘要:
创建请求请求->请求请求触发器(预合并和最原始检查)->完成请求请求-> CI触发器(完成分支合并和第二次检查)。
顺便说一句,如果要排除某些文件以免它们触发“拉取请求触发器”,则可以添加路径过滤器。
例如: