Azure DevOps YAML 流水线 - 清理动态部署

4
我们当前的流水线在Azure Repos上创建新分支时会部署一个新实例,就像Heroku或Gitlab上的Review Apps一样。创建部分很顺利,但是我不确定如何处理孤立的资源和分支删除后的部署(希望是由接受的PR删除)。
手动删除它们不是一个选项,并且我在文档中找不到分支删除的触发器。
目前我唯一能想到的选择是为主分支(因为它总是存在)创建一个定期作业,使用Bash脚本比较已部署应用程序的列表和现有分支,并清理资源。
这是我的唯一选择,还是有其他方法可以避免使用相当复杂、全面访问的销毁机器?

您想要删除与已删除分支相对应的构建流程,还是想要删除服务器上部署的资源? - Hugh Lin
部署的资源,例如Docker Swarm堆栈、数据库、Azure队列等。 - István Ignácz
据我所知,除了手动删除之外,您只能尝试通过脚本来实现。不应该有这样的触发器:一旦分支被删除,相关的部署资源就会自动删除。 - Hugh Lin
如果你也遇到了同样的问题,那么当我能够在拉取请求被批准时触发操作以清理测试资源时,这将非常酷!在 YAML 管道中真的没有办法实现这一点吗? - dahund
2个回答

3

我进行了一些调查,将所有环境变量导出到Notepad++并使用比较插件,发现当PR被接受时有两个环境变量不同。

首先,推送时初始变量“BUILD_REASON”设置为“IndividualCI”,但“BUILD_SOURCEBRANCH”设置为“refs/heads/feature/******”。当发起拉取请求时,“BUILD_REASON”更改为“pullrequest”,“BUILD_SOURCEBRANCH”更改为“refs/pull/***”。

最后,当PR被接受时,变量更改为“BUILD_REASON”=“IndividualCI”和“BUILD_SOURCEBRANCH”=“refs/heads/master”。

一旦我弄清楚了这一点,我就可以创建具有以下条件的阶段:

- stage: CleanUp
  displayName: 'CleanUp'
  dependsOn: Test
  condition:  and(succeeded(), in(variables['Build.Reason'], 'IndividualCI'),in(variables['Build.SourceBranchName'], 'master'))

当PR被接受时,上述阶段将被触发以清理在PR期间创建的资源 :-) 尚未完全测试,但似乎能够完成任务。

1
我猜您现在需要手动检查哪些孤立的资源需要清理?这只是在主构建上运行此步骤吗? - caveman_dick

0

您可以在Azure DevOps中使用Webhook来监视拉取请求的更新。当拉取请求状态更改为已完成时,触发一个脚本来删除用于PR的资源。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接