在Azure Devops中,是否有一种方法可以使build /工作目录在作业之间持久化?

时间:2020-09-10 14:30:53

标签: azure azure-devops yaml azure-pipelines

我在Azure Devops中有一条管道,目前正在尝试加快速度。当前,这是一项运行一系列步骤/任务的工作。基本概述是:1:构建; 2:运行测试; 3:将符号文件发布到符号服务器; 4:nuget软件包打包并推送; 5:发布工件。

3、4、5仅取决于适当的构建并在技术上同时运行。问题是,当我尝试将它们分解为单独的作业(取决于构建的完成情况)时,它不起作用,因为在运行其他作业时,在构建期间创建的目录不可用。

是否有一种方法可以使工作目录持久化,直到管道中的所有作业完成?

2 个答案:

答案 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完成。