【问题标题】:Azure DevOps Container Jobs: Cache Container for multiple Jobs?Azure DevOps 容器作业:多个作业的缓存容器?
【发布时间】:2019-09-24 09:20:03
【问题描述】:

尊敬的开发者们,

在 azure 管道的容器作业中,对于从注册表中提取的每个作业容器,即使同一个容器用于多个作业。

当然,如果图像非常小,这没问题,但如果有人打算使用覆盖 vscode 本地开发的相同图像构建 - 这可能会比实际构建消耗更多时间。

那么有人解决了缓存容器的问题吗?

这是一个例子:

# in this example, all jobs use the same container.

# in stage 1, the jobs are started serial, so job 2 only starts if 
# job 1 is done -> and the image is downloaded for both jobs independently

# in stage 2, the jobs are started in parallel, 
# and the image is downloaded for both jobs in the stage independently

trigger:
  batch: true
  branches:
    include:
      - "*"


resources:
  containers:
    - container: ubuntu
      image: ubuntu:18.04

stages:
  - stage: STAGE1
    jobs:
     - job: PrintInfoStage1Job1
       container: ubuntu
       steps:
          - script: |
              echo "THIS IS STAGE 1, JOB 1"
            displayName: "JOB 1"
     - job: PrintInfoStage1Job2
       dependsOn: PrintInfoStage1Job1
       container: ubuntu
       steps:
          - script: |
              echo "THIS IS STAGE 1, JOB 2"
            displayName: "JOB 2"

  - stage: STAGE2
    dependsOn: STAGE1
    jobs:
      - job: PrintInfoStage2Job1
        dependsOn: []
        container: ubuntu
        steps:
          - script: |
               echo "THIS IS THE STAGE 2, JOB 1"
            displayName: "JOB 1"

      - job: PrintInfoStage2Job2
        container: ubuntu
        dependsOn: []
        steps:
          - script: |
               echo "THIS IS THE STAGE 2, JOB 2"
            displayName: "JOB 2"

【问题讨论】:

    标签: azure-devops azure-pipelines


    【解决方案1】:

    Azure DevOps 容器作业:多个作业的缓存容器?

    最初,我们的设计和开发思路主要是出于安全性和一致性的考虑,每次都应该是一个新鲜的图像。现在,我们收到了许多开发人员关于希望支持缓存图像的曼尼功能请求。现在,考虑到这种设计思路的缺点,它会让开发者浪费太多时间来等待图像被拉下来。如果可以缓存图片,可以大大提高构建的效率。

    现在,有关此功能的大部分实际缓存工作已由我们的 Azure Artifacts 团队开发完成。由于我从该团队获得的最新流程是在我们可以在 azure devops 中发布此功能之前,因此我们需要做一些工作,围绕安全性确保缓存不能用作攻击媒介。完成后,我们将启动客户预览。它将在最近部署。

    请查看我们的路线图:Speed up pipeline with caching 以跟踪其开发和发布过程。您还可以跟踪由 azure artifacts PM 发布的 blog。另外,您可以关注和监控这个PR

    到目前为止,没有更好的解决方法来改进这一点。甚至使用 Cache 任务结合 Docker 保存/加载各自的操作来执行它的操作,这与从公共注册表下载基本图像/层的操作非常匹配。


    我仍将监控此功能的开发过程。一旦 PR 完成并将功能代码部署到所有区域,即使它作为预览功能发布,我也会更新这个答案,让您和其他 SO 用户知道。

    【讨论】:

    • 哇,非常感谢您为写出如此详细的答案而付出的努力!
    猜你喜欢
    • 1970-01-01
    • 2020-06-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-03-18
    • 2020-06-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多