触发PR的构建,但在PR完成之前阻止CD

时间:2019-10-24 22:22:09

标签: azure-devops continuous-integration continuous-deployment pull-request

我和我的团队都在努力在ADO中实现特定的CI / CD模式。

我们定义了一个名为“ Develop”的构建管道和一个具有相同名称的发布管道。我们已经在我们的开发部门上设置了构建策略,该策略要求“开发”构建管道必须成功才能完成PR。我们也有关于审核/批准,评论解决和链接的工作项的政策。

正如预期的那样,当PR升高时,我们的政策中引用的内部版本就会启动。同样,正如预期的那样,只有在构建成功之前才能完成PR。但是,我们遇到的问题是,因为我们在Release Pipeline上设置了CD触发器,所以PR触发的构建生成的工件会始终部署,而与其余状态无关公关政策。

我们想要的顺序是这样:

  1. 提高PR会使我们的“开发”构建管道得以执行。
    • 此构建必须成功才能完成PR。
    • 存储此构建的工件,以便在PR完成后不必再次运行构建管道,只需进行部署即可(构建需要一段时间)。
  2. 构建管道成功执行。
    • 在满足其他政策之前,PR仍无法完成。
  3. 满足了其余分支机构的政策。
  4. PR已完成。
    • 现在只能部署从构建管道生成的工件。
  5. 执行“开发”发布管道,将工件部署到我们的测试环境。

摆弄了我们的管道的各种变化之后,我尝试在发布管道上简单地设置“拉请求触发器”,而不是“连续部署触发器”。我认为这将要求PR导致工件的创建,然后 完成PR。我的假设是不正确的。通过这种新设置,即使PR尚未完成,提高PR也会触发构建管道,而构建管道的成功也会触发发布管道。

我们的构建管道构建解决方案,运行测试,运行一些PowerShell脚本,最后将工件发布到Azure管道。也许这做得太多了。也许有某种方法可以构建,运行测试和脚本,然后以某种方式等待PR完成,然后再将工件传递到Release Pipeline。我似乎无法弄清楚。有什么办法可以完成我上面列出的顺序?

需求,简而言之:

  • 构建应该在PR升高后立即开始。
  • 该构建不必执行一次以上(这需要很长时间,并且我们不能仅仅为了满足“实际”构建之前的构建策略而等待两个构建)。
  • PR完成应该触发发布管道。

1 个答案:

答案 0 :(得分:1)

您的描述中有一些PR触发误解。

  

您可以配置一个拉取请求触发器,该触发器将创建一个新的   当拉取请求上传工件的新版本时释放。   启用触发器并添加以以下请求为目标的分支   您要激活此触发器。

     

Pull request triggers

但是对于CD触发器,如果​​要仅在通过编译某些分支中的代码来生成内部版本时才想创建发行版,则可以添加内部版本分支过滤器(仅当代码位于TFVC中时适用) ,Git或GitHub存储库),或者该版本具有某些标记。这些可以是包含和排除过滤器。例如,使用features / *将所有构建包含在features分支下。您还可以在过滤器值中包含自定义变量。

或者,您可以指定一个过滤器以使用在构建管道中指定的默认分支。例如,当每个开发sprint中的默认构建分支都发生变化时,这很有用。这意味着您不需要为所有更改而在所有发布管道中都更新触发器过滤器-只需在构建管道中更改默认分支即可。

更多详细信息,请查看Jeff Shepler在这个类似问题中的答复:VSTS release pull request build trigger