Azure Pipeline para construir e empurre a janela de encaixe imagens em lote?

0

Pergunta

Eu tenho que puxar um monte de janela de encaixe imagens, instalar alguns certificados de autoridade de CERTIFICAÇÃO raiz no-los e empurrá-los para uma particular operação de recompra.

A lógica que inventei é:

  1. Criar um modelo de encaixe de arquivo (Dockerfile.Modelo)
  2. Em um pipeline, declarar todas as imagens de base a ser puxado
  3. Executar um por um no dockerfile substituir o nome da imagem
  4. Empurrar um por um

O modelo dockerfile eu cheguei é:

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

O azure pipeline é:

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'

O meu problema atual é que o substitua token de atividade não é substituir o #{baseImage}# para a janela de encaixe atividade.

Alguém pode me ajudar?

azure-devops azure-pipelines docker
2021-11-23 19:36:47
1

Melhor resposta

1

Acabei de fazer como esta:

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

basicamente, eu mudei o modelo dockerfile para uma subpasta e o nome mudado para apenas Dockerfile. Então eu parti baseImage em baseImageName e tag... e voila!

2021-11-23 22:50:54

Em outros idiomas

Esta página está em outros idiomas

Русский
..................................................................................................................
Italiano
..................................................................................................................
Polski
..................................................................................................................
Română
..................................................................................................................
한국어
..................................................................................................................
हिन्दी
..................................................................................................................
Français
..................................................................................................................
Türk
..................................................................................................................
Česk
..................................................................................................................
ไทย
..................................................................................................................
中文
..................................................................................................................
Español
..................................................................................................................
Slovenský
..................................................................................................................