Azure Pipelines - 并行步骤 (YAML)

Jam*_*ill 15 azure-devops azure-pipelines

我正在设置我的 Azure Devops Pipelines,并且有一个需要一些相当长的设置步骤才能运行的构建。这些需要在其他可以并行运行的任务之前运行。

但是,我只能通过指定作业来完成此操作,这需要每次都执行这些冗长的步骤。IE:

jobs:
  - job: Run1
     steps:
       - task: Long running setup task
       - task: Run taskA
  - job: Run2
       - task: Long running setup task
       - task: Run taskB  
Run Code Online (Sandbox Code Playgroud)

有没有办法让这个长时间运行的任务运行,并使任务 A/B 依赖于该环境而不需要按顺序运行它们?理想情况下,它会是这样的:

-job
  steps:
    -task: Long running setup
    -task: Parallel: taskA
    -task: Parallel: taskB
Run Code Online (Sandbox Code Playgroud)

或者,如果可能的话,之前的作业是否拍摄了容器/映像快照并重用?

dpa*_*kar 11

简短的回答,你不能。

作业中的任务无法并行运行,因为它们在同一代理上运行,并且 Azure Devops 无法“快照”环境以便稍后由其他作业并行重新利用。但是作业可以并行运行,因为它们可以安排在不同的代理上,因此设置将运行两次但并行运行。因此,您需要根据自己的要求在时间和资源使用之间进行权衡。

不过,还有另一种解决方案,取决于您愿意为此投资多少:

如果您的“设置”不经常更改并且您愿意托管自己的代理。然后,您可以运行一个单独的“设置 + 代理”构建,它会创建代理的 docker 映像,将其推送到您的 azure 容器注册表,然后将此映像部署到您的自托管代理(Azure Kubernetes 服务)集群。然后任务 A 和任务 B 可以轻松地并行运行,前提是它们运行的​​环境(代理 + 设置 docker 映像)始终准备就绪。这正是我的设置。

请参阅:Azure DevOps Docker