如何在 Azure 管道完成后删除相关工件?

7

我有以下管道结构:

Job A --> Generate build files
Parallel:
  Job B --> Uses the build files
  Job C --> Uses the build files
Job D --> Publishes the build files
Job E --> Release
On finish, I want to delete the build files completely

我不太认同使用构件(因为上传/下载所需的时间较长),但似乎需要使用它们以便在作业之间使用文件。

在管道结束时,我不需要保留构建文件(即构件),那么我应该如何在管道运行结束时简单地删除它们?

我正在使用azure-pipelines.yml


为什么要这样挑战呢?如果想要去除它们,那就违背了设计初衷。而且在无法重新部署最初发布的构件时,回滚更改就变得更加困难了。 - DreadedFrost
1
@DreadedFrost:因为如果我们需要重新部署,简单地重新运行和重建工件会更有意义。保留多年,几个月甚至几天的几乎不使用且回滚极少发生的冗余工件是没有必要的。因此,在我们对环境的专业知识中,我们将质疑为什么要保留冗余工件? - Dom
@DreadedFrost:在进行交换之前,我们还会对运行应用程序的容器进行测试。此外,我们的回滚是在 Docker 镜像上进行的,而不是使用“构件”。 - Dom
这不是一个好的做法,因为它会破坏与代码部署相关的审计跟踪,无法了解代码被部署的内容、方式和原因。使用容器时要明确自己在说什么。如果担心发布的内容,可以在发布管道工件任务中进行过滤。正如提到的保留策略是减少工件存在时间的一种方式。 - DreadedFrost
@DreadedFrost,你所建议的与问题无关且不必要。希望有人能提供替代方案。感谢你的帮助。 - Dom
2个回答

4
据我所知,目前没有直接实现此功能的方法,因为Azure CLI命令和Azure Rest API端点都没有相应的任务。在这种情况下,您可以通过更改保留策略并通过以下方式进行限制来解决问题: enter image description here

直接的URL将是https://dev.azure.com/{{ORG}}/{{PROJECT}}/_settings/settings - KargWare

1
适当的方法是 @Krzysztof 帖子中提到的那个方法。然而,如果 OP 真的需要立即删除工件,而不是等待一天,可以在管道的末尾使用命令行任务来完成。
将工作目录设置为工件放置的位置,并运行以下命令:
del /s /q *.* 2>NUL
rmdir /s /q "./" 2>NUL
exit 0

enter image description here

Azure Devops过去在正确覆盖工件方面出现了问题,因此我使用该代码在发布新工件之前清理目录。

我希望我们早些时候就有了这个答案,因为这个原因我们放弃了使用Azure DevOps和Azure Repo。微软按GB使用量收费,由于每天有大量的提交,我们支付了我们根本不需要的存储费用。感谢Jereme。 - Dom

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