我在 Azure Devops 中有一个管道,我目前正在尝试加快它的速度。目前,这是一个运行一堆步骤/任务的作业。基本大纲是 1:构建,2:测试运行,3:将符号文件发布到符号服务器,4:nuget 包打包和推送,5:发布工件。
3、4、5,仅依赖于正确的构建并在技术上同时运行。问题是,当我尝试将它们分解为单独的作业(取决于构建的完成)时,它不起作用,因为在构建期间创建的目录在其他作业运行时不可用。
有没有办法让工作目录持续存在,直到管道中的所有作业完成为止?
最佳答案
Is there a way to make the working directories persist until all jobs in the pipeline are finished?
否(如果您使用的是 Microsft-Hosted agent) ,如果您使用 self-hosted agent,则是 .
对于托管代理:该文档指出,每次运行管道时,您都会获得一个新的虚拟机
。但实际上每次运行作业时,您都会获得一个新的虚拟机
。这就是为什么第二个作业无法访问第一个作业的工作目录,它们是不同的虚拟机。
因此,如果您希望两个作业都有一个工作目录,则只能使用自托管代理。您可以查看this issue更多细节。由于这两个作业应该在同一个 self 代理中运行,我建议使用 demands指定您要选择的代理。
注意:使用托管代理时我们无法保留工作目录,但我们可以使用 Publish Artifact task and Download Artifact task在不同代理的不同作业之间共享文件。示例:
jobs:
- job: MyJob1
continueOnError: true
steps:
- task: PublishBuildArtifacts@1
inputs:
PathtoPublish: '$(System.DefaultWorkingDirectory)'
ArtifactName: 'drop'
publishLocation: 'Container'
- job: MyJob2
continueOnError: true
dependsOn: MyJob1
steps:
- download: none
- task: DownloadBuildArtifacts@0
inputs:
buildType: 'current'
downloadType: 'single'
artifactName: 'drop'
downloadPath: '$(System.DefaultWorkingDirectory)'
I have a pipeline in Azure Devops and I'm currently trying to speed it up.
不建议将它们分成单独的作业,我认为这实际上不会加快进程。您的步骤3.4.5取决于步骤1.2的完成,如果您在Job1中添加1.2并在Job2中添加步骤3.4.5,您仍然无法进行并行作业来加速它,因为Job2必须等待 直到 Job1 完成。
关于azure - 在 Azure Devops 中,有没有办法使构建/工作目录在作业之间持久存在?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63831922/