如何解决如何让 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 举报,一经查实,本站将立刻删除。