【问题标题】:Azure Pipeline to build and push docker images in batch?Azure Pipeline 批量构建和推送 Docker 映像?
【发布时间】:2021-11-23 19:36:47
【问题描述】:

我必须拉出一堆 docker 镜像,在它们上面安装一些根 CA 证书并将它们推送到私有仓库。

我想出的逻辑是:

  1. 创建模板 docker 文件 (Dockerfile.Template)
  2. 在管道上,声明所有要拉取的基础镜像
  3. 在 dockerfile 上一一运行,替换镜像名称
  4. 一一推送

我想出的模板dockerfile是:

FROM mcr.microsoft.com/dotnet/#{baseImage}# AS base

COPY RootCA-1.crt /usr/local/share/ca-certificates/
COPY RootCA-SubCA-1.crt /usr/local/share/ca-certificates/

RUN update-ca-certificates

天蓝色的管道是:

trigger:
- master

parameters:
- name: 'images'
  type: object
  default: 
  - sdk:6.0
  - sdk:5.0
  - sdk:3.1
  - sdk:2.1

pool:
  vmImage: ubuntu-latest

steps:
- ${{ each baseImage in parameters.images }}:

  - bash: |
     echo "current image is $(BASEIMAGE)"

  - task: CopyFiles@2
    inputs:
      Contents: 'Dockerfile.Template'
      TargetFolder: 'Dockerfile'
  - task: replacetokens@4
    inputs:
      targetFiles: 'Dockerfile'
      encoding: 'auto'
      tokenPattern: 'default'
      writeBOM: true
      actionOnMissing: 'warn'
      keepToken: false
      actionOnNoFiles: 'continue'
      enableTransforms: false
      useLegacyPattern: false
      enableTelemetry: true

  - task: Docker@2
    inputs:
      containerRegistry: 'MyPrivateRegistry'
      repository: 'dotnet/$(baseImage)'
      command: 'buildAndPush'
      Dockerfile: '**/Dockerfile'

我当前的问题是替换令牌活动没有替换 docker 活动的 #{baseImage}#

谁能帮忙?

【问题讨论】:

    标签: docker azure-devops azure-pipelines


    【解决方案1】:

    我最终这样做了:

    steps:
    - ${{ each value in parameters.images }}:
      - bash: echo "##vso[task.setvariable variable=baseImage]${{ value }}"
      - bash: echo "##vso[task.setvariable variable=tag]${{ replace(replace(replace(value,'sdk:',''),'runtime:',''),'aspnet:','') }}"
      - bash: echo "##vso[task.setvariable variable=baseImageName]${{ replace(replace(value,replace(replace(replace(value,'sdk:',''),'runtime:',''),'aspnet:',''),''),':','') }}"
      - bash: |
         echo "current image is $(baseImageName) and tag is $(tag)"
      
      - task: CopyFiles@2
        inputs:
          SourceFolder: 'DockerfileTemplate'
          Contents: 'Dockerfile'
          TargetFolder: '$(Build.SourcesDirectory)'
          OverWrite: true
    
      - task: replacetokens@4
        inputs:
          targetFiles: 'Dockerfile'
          encoding: 'auto'
          tokenPattern: 'default'
          writeBOM: true
          actionOnMissing: 'warn'
          keepToken: false
          actionOnNoFiles: 'continue'
          enableTransforms: false
          useLegacyPattern: false
          enableTelemetry: true
    
      - task: Docker@2
        inputs:
          containerRegistry: 'MyPrivateRegistry'
          repository: 'dotnet/$(baseImageName)'
          command: 'buildAndPush'
          Dockerfile: 'Dockerfile'
          tags: '$(tag)'
        continueOnError: true
    

    基本上我将模板 dockerfile 移到了一个子文件夹并重命名为 Dockerfile。然后我将baseImage 分解为baseImageNametag... 瞧!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-12-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-02-27
      • 1970-01-01
      相关资源
      最近更新 更多