Azure DevOps - 清理构建目录

27

我正在使用自托管代理运行我的构建和发布流水线。

当构建失败,由于管道中的问题,工作目录中会存在从远程克隆的分支。第二次运行也使用相同的工作目录,而不是新目录。我在代理上验证过没有新目录被创建。我还可以在 Azure 流水线日志中看到它正在使用同一个旧目录。

我暂时解决这个问题的方法是我找到旧的工作目录(例如 /home/user/_work/13),并手动删除它。然后 Azure 就会在 _work 下创建一个新的文件夹(例如“14”),我可以在那个新目录下看到最新从远程克隆的代码。

如何在失败发生时自动删除工作文件夹(_work 下的编号目录)?

注意:我已经在我的管道末尾添加了清理步骤,这些步骤在管道成功完成时运行。另外,我编写的是 YAML 流水线,而不是经典的流水线。

如果需要更好的理解,请让我知道需要什么信息。


1
你是在使用Git还是TFVC?你是在使用YAML管道还是经典管道?你是否查看了有关工作文件夹清理选项的文档? - Daniel Mann
我正在使用Azure Git存储库,我不明白为什么有人会对此进行负评,如果他们觉得这很愚蠢,为什么不回答它呢.. - Indrajeet Gour
@DanielMann,如果您需要更好的理解,还有什么其他的要求,请告诉我。谢谢。 - Indrajeet Gour
2个回答

50

Azure DevOps - 清理构建目录

在“获取源代码”选项卡上有一个清理选项,可以在运行构建之前对私有代理的工作目录执行不同种类的清理操作:

enter image description here

我们可以将该值设置为true以清理私有代理的工作目录。即使构建失败。

您可以查看文档在代理上清理本地存储库以获取更多详细信息。

更新:

但这是针对经典流水线的,难道我们没有在 yml 流水线中定义的任何标记吗?

jobs:
- job: string  # name of the job (A-Z, a-z, 0-9, and underscore)
  ...
  workspace:
    clean: outputs | resources | all # what to clean up before the job runs

查看此文档YAML模式参考,以获取一些详细信息。
希望这有所帮助。


1
谢谢您的回复,但这是针对经典流水线的,我们在yml流水线中没有定义任何标签吗? - Indrajeet Gour
@YouAreAwesome,嗯,你在原始问题中没有提到YAML,所以我认为你是在经典模式下。现在,我已经根据你的评论更新了答案,请检查是否有帮助。 - Leo Liu
1
我不知何故错过了这份文档,感谢您提供的参考链接,非常感谢。 - Indrajeet Gour
1
在你的答案中提供的YAML模式参考链接中,我找不到有关清理工作区目录的任何信息。但是,你确实指出了正确的方向,并且我在Google上找到了以下 Azdo 页面,描述如何执行此操作:https://learn.microsoft.com/en-us/azure/devops/pipelines/process/phases?view=azure-devops&tabs=yaml#workspace - guicey
@IndrajeetGour 截图中的选项适用于yaml管道... - undefined
显示剩余2条评论

0

由于运行预清理作业 (workspace.clean) 或后清理作业 some step X 以清理代理 workdir 严重依赖于“某个流水线”的流水线作者来修复潜在的难以检测的“workdir污染”问题,因此我们决定重新实现这个想法,以确保workdir污染永远不会发生。

我创建了 https://github.com/EugenMayer/azure-agent-self-hosted-toolkit,它在代理级别上解决了这个问题,不需要对流水线进行任何更改,也不依赖于流水线。

引用项目想法:

The run-once mode is based on Microsoft's `./run.sh --once` which ensures that an agents only runs 1 job and then stops.
This is used to

 - cleanup the workdir in a safe manner after each job
 - ensures each job on an agent runs in a clean workdir
 - starts the agent right after cleanup up (few seconds) to be available for the next job

该存储库还提供了一个工具包,可使用Microsoft的原始工具启动/设置x-agents并使用方便的脚本进行维护。

如果这有助于其他任何人,我很乐意分享它。


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