我在Azure Devops中有一条管道,目前正在尝试加快速度。当前,这是一项运行一系列步骤/任务的工作。基本概述是:1:构建; 2:运行测试; 3:将符号文件发布到符号服务器; 4:nuget软件包打包并推送; 5:发布工件。
3、4、5仅取决于适当的构建并在技术上同时运行。问题是,当我尝试将它们分解为单独的作业(取决于构建的完成情况)时,它不起作用,因为在运行其他作业时,在构建期间创建的目录不可用。
是否有一种方法可以使工作目录持久化,直到管道中的所有作业完成?
答案 0 :(得分:0)
我认为并不一定要保证并行作业在处理1和2的同一代理上运行。它们甚至可能不在同一服务器上,因此它无法引用在Windows Server 2003中所做的工作。第1步和第2步。通常,如果您想并行执行某项操作,则可以发布管道或构建工件,然后在随后的相关工作中采取步骤将其拉下。由于您要并行执行的任务就像发布,因此我不确定是否真的可以并行运行。
答案 1 :(得分:0)
有没有办法使工作目录一直保留到所有作业 在管道中完成了吗?
否(如果您使用的是Microsft-Hosted agent,是,如果您使用的是self-hosted agent。
对于托管代理:该文档指出为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。
因此,如果您想为两个作业都拥有一个工作目录,则只能使用自托管代理。您可以检查this issue了解更多详细信息。由于这两个作业应在同一自我代理中运行,因此我建议使用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)'
我在Azure Devops中有一条管道,目前正在尝试加快速度 上。
不推荐,将其分解为单独的工作,我认为这实际上不会加快流程。您的步骤3.4.5取决于步骤1.2的完成,如果在Job1中添加1.2,在Job2中添加步骤3.4.5,由于Job2 必须等待,直到Job1完成。