azure - 在 Azure Devops 中,有没有办法使构建/工作目录在作业之间持久存在?

标签 azure azure-devops yaml azure-pipelines

我在 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/

相关文章:

Azure 逻辑应用程序 Sql 连接器

sql-server - 使用 Invoke-Sqlcmd 运行 SQL 脚本以在 Synapse Workspace SQL 池中创建表

azure - VSTS - Azure 端点问题

azure-devops - 列出构建工件的文件

haskell - 如何在 Haskell 中编写内联 YAML(流式)?

linux - 在 docker-compose 命令中使用内联注释

docker - 发布构建工件任务结果 'path does not exist'错误

azure - Fiddler:输入的授权 token 无法满足请求。请检查预期的有效负载是否按照协议(protocol)构建,

azure - 需要允许我的 VSTS 服务连接向 azure 广告应用程序添加回复 URL

tfs - 当 VS-team-services 工作项状态更改时配置 CI 构建和发布