微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何让 Azure Devops 中的 Microsoft 托管代理保留作业之间的工作空间?

如何解决如何让 Azure Devops 中的 Microsoft 托管代理保留作业之间的工作空间?

我想将在 Microsoft 托管的代理上运行的大型作业分解为在同一代理上按顺序运行的较小作业。大型作业的组织方式如下:

pool:
  vmImage: 'windows-latest'

jobs:
- job: large_job
  steps:
    - task: NuGetCommand@2
       inputs:
          command: 'restore'
    - task: VSBuild@1
    - task: VSTest@2

我想把它分解成两个较小的工作,像这样:

pool:
  vmImage: 'windows-latest'

jobs:
- job: job_one
  steps:
    - task: NuGetCommand@2
       inputs:
          command: 'restore'

- job: job_two
  dependsOn: job_one
  steps:
    - checkout: none
    - task: VSBuild@1
    - task: VSTest@2

... 以便下载我所有的二进制资源将在 job_one 中进行,构建和测试将在 job_two 中进行。

作业包括一个可选参数 workspace:clean,它与自托管代理一起使用,以指定是否应从代理中删除二进制资源、构建结果或所有内容。如果省略 workspace:clean 参数,则不会删除任何内容 - 保留所有内容。这就是我想要的。

但是,根据Workspace topic in the Azure Devops documentation

工作区清理选项仅适用于自托管代理。使用 Microsoft 托管的代理时,作业始终在新代理上运行。

这意味着在 job_two 可以运行构建任务之前,我的所有二进制资源都被删除了。我想做这样的事情:

- job: job_two
  dependsOn: job_one
  workspace:
    clean: none
  steps:
    - checkout: none
    - task: VSBuild@1
    - task: VSTest@2

我想避免使用自托管代理。如何使用 Microsoft 托管的代理执行此操作?

解决方法

您永远不能依赖于作业之间的工作空间相同,期间 -- 作业可以在任何一个可用代理上运行,这些代理分布在多个工作文件夹中,甚至可能在不同的物理机。

让你的工作publish artifacts

steps:
- publish: $(System.DefaultWorkingDirectory)/bin/WebApp
  artifact: WebApp

然后在下游工作中,

steps:
- download: current
  artifact: WebApp

但是,您真正要找的似乎是为您的包使用 pipeline cache

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。