azure - 在 Azure Devops 中,有没有办法让构建/工作目录在作业中持续存在?
问题描述
我在 Azure Devops 中有一个管道,我目前正在尝试加快它的速度。目前它是一项运行一堆步骤/任务的工作。基本大纲是 1:构建,2:测试运行,3:符号文件发布到符号服务器,4:nuget 包打包和推送,5:工件发布。
3、4、5,仅取决于正确的构建并在技术上同时运行。问题是当我尝试将它们分解为单独的作业(取决于构建的完成)时它不起作用,因为在构建期间创建的目录在其他作业运行时不可用。
有没有办法让工作目录持续存在,直到管道中的所有作业都完成?
解决方案
有没有办法让工作目录持续存在,直到管道中的所有作业都完成?
如果您使用的是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 完成。
推荐阅读
- python - 熊猫如何将两列转换为没有重复的组列表
- mysql - 如何查找具有相同 ID 和某些部件号的条目列表?
- c++-cli - C++/CLI 中的“for each”:一个还是两个?
- google-sheets-api - 有没有办法只获取使用 google sheet API 修改的行?
- linux - awk 命令查找和替换值
- hive - impala CREATE EXTERNAL TABLE 并删除双引号
- javascript - 将 JSON 项添加到 localStorage
- python - 端口转发 Webserver Python
- php - Google 饼图未在 IE <= 8 中显示
- android - 有没有办法获取当前播放歌曲的信息?