Azure Devops 运行 两个构建顺序

Azure Devops Running Two Builds Sequentially

我们有 Azure Devops 设置。现在我们的项目将构建两次。

一次是在 YAML 文件中的 Pull Request Checkin 期间,另一次是由于构建设置(下图)。

这会触发两次构建,并导致我们的构建时间加倍。我们的 Devops 团队提到这是常规做法。为什么 Azure Devops 不只触发一次构建,或者两次构建是否更安全?

在功能上,这两个构建可能并不总是相同的。

假设您有以下示例。大写字母是提交,lower-case 字母是潜在的提交。

  e e'
 /   \
|  |   D
C  |   B 
 \ |  /
   A

这表明,有两个分支来自 A 提交(主分支)。每个功能分支都有一个为每个创建的 PR。一个分支在 e 提交上构建,另一个分支在 e' 提交上构建。 Azure devops 无法确定先合并哪个 PR。

合并两个 PR 后,您将在 master 中得到一个以前未构建的新提交。这是描述here

   F
   E \
 / |   D
C  |   B 
 \ |  /
   A

如果您想消除在 master 上构建的需要,您可以将构建到期时间设置为 Immediately when branch name is updated

Why doesn't Azure Devops just trigger one build, and or is it safer practice with two builds?

据我所知,这是 Azure Devops 的预期工作流程。

由于构建设置

这是Pull Request trigger

这个触发器发生在 Pull Request 的过程中,PR 触发器意味着 运行 每当创建 PR 时。

这个触发器相当于一个验证步骤,文件并没有真正提交到目标分支(Pre-merged到Targer Branch)。

您可以查看构建的结果来判断源分支代码是否有效。

例如:

如果Pull Request 触发失败,您可以拒绝该Pull Request。不影响目标分支,目标分支保持原状

在 YAML 文件中提取请求签入

这可能是 CI trigger

此触发器将在拉取请求完成时发生。

在这种情况下,目标分支已更改。目标分支的改变触发了 CI 触发器。这可以再次检查代码是否有效。

工作流程总结:

Create Pull Request -> Pull Request Trigger(Pre-merged and firest check)->Complete Pull Request -> CI trigger (Complete the branch merge and second check).

顺便说一句,如果你想排除一些文件,使它们不触发拉取请求触发器,你可以添加一个路径过滤器。

例如: