Azure Plynovod postavit a tlačit docker obrázků v dávkovém?

0

Otázka

Musím vytáhnout spoustu docker obrazů, nainstalovat nějaký root CA cert na ně a tlačit je do privátní repo.

Logiku jsem přišel je:

  1. Vytvořit šablonu docker file (Dockerfile.Šablona)
  2. Na potrubí, prohlašuji, že všechny základní obrazy, které mají být vytáhl
  3. Spusťte jeden po druhém na dockerfile nahrazuje název obrázku
  4. Tlačit jeden po druhém

Šablony dockerfile jsem přišel je:

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

Azure potrubí je:

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'

Můj aktuální problém je, že nahradit token činnost není výměna #{baseImage}# pro docker činnosti.

Může někdo pomoci?

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

Nejlepší odpověď

1

Nakonec jsem dělala takhle:

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

v podstatě jsem se přestěhoval šablony dockerfile do podsložky a přejmenována na jen Dockerfile. Pak jsem se zlomil baseImage do baseImageName a tag... a voila!

2021-11-23 22:50:54

V jiných jazycích

Tato stránka je v jiných jazycích

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