首页 > 解决方案 > 在 Azure Devops 中,有没有办法让构建/工作目录在作业中持续存在?

问题描述

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

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

有没有办法让工作目录持续存在,直到管道中的所有作业都完成?

标签: azureazure-devopsyamlazure-pipelines

解决方案


有没有办法让工作目录持续存在,直到管道中的所有作业都完成?

如果您使用的是Microsft-Hosted 代理,则,如果您使用的是自托管代理,则

对于托管代理:该文件指出each time you run a pipeline, you get a fresh virtual machine. 但实际上是each time you run a job, you get a fresh virtual machine。这就是为什么第二个作业无法访问第一个作业的工作目录的原因,它们是不同的虚拟机。

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

注意:使用托管代理时我们不能保留工作目录,但我们可以使用Publish Artifact 任务和 Download Artifact 任务在不同代理的不同作业之间共享文件。样本:

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


推荐阅读