在Azure Devops中,是否有一种方法可以使构建/工作目录在多个作业中保持不变



我在Azure Devops中有一个管道,我目前正在努力加快它的速度。目前,它是一个运行一系列步骤/任务的作业。基本概要是1:构建,2:运行测试,3:发布到符号服务器的符号文件,4:打包和推送nuget包,5:发布工件。

3、4、5,只是取决于正确的构建和技术上同时运行。问题是,当我试图将它们分解为单独的作业(取决于构建的完成情况(时,它不起作用,因为在构建过程中创建的目录在其他作业运行时不可用。

有没有一种方法可以使工作目录持久存在,直到管道中的所有作业都完成?

有没有办法让工作目录一直存在到所有作业在管道中完成?

如果使用Microsft托管代理,则为否,如果使用自托管代理,为是。

对于托管代理:文档声明each time you run a pipeline, you get a fresh virtual machine。但实际上是each time you run a job, you get a fresh virtual machine。这就是为什么第二个作业不能访问第一个作业的工作目录,它们是不同的VM。

因此,如果您想为这两个作业都有一个工作目录,则只能使用自托管代理。您可以查看此问题以了解更多详细信息。由于这两个作业应该在同一个自代理中运行,我建议使用需求来指定您要选择的代理。

注意:使用托管代理时,我们无法保留工作目录,但我们可以使用发布工件任务和下载工件任务在不同代理中的不同作业之间共享文件。样品:

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)'

我在Azure Devops中有一个管道,我目前正在努力加快它的速度向上的

不建议将它们分解为单独的作业,我认为这实际上不会加快进程。你的步骤3.4.5取决于步骤1.2的完成,如果你在Job1中添加1.2,在Job2中添加步骤3.4.5,你仍然无法进行并行作业来加快速度,因为Job2必须等待,直到Job1完成。

我认为并行作业不一定能保证在处理1&2.它们甚至可能不在同一台服务器上,因此无法引用步骤1&2.通常,如果你想并行地做一些事情,你会发布管道或构建工件,然后在后续的依赖作业中有一个步骤来将它们拉下来。由于你想并行的任务就像发布一样,我不确定是否真的能够并行运行。

相关内容

最新更新