¿Azure Pipeline para construir y empujar imágenes de Docker en lote?
Tengo que descargar un montón de imágenes de Docker, instalar algunos certificados de CA raíz en ellas y subirlas a un repositorio privado.
La lógica que se me ocurrió es:
- Crear un archivo de docker plantilla (Dockerfile.Template)
- En un pipeline, declarar todas las imágenes base que se van a descargar
- Ejecutar una por una en el archivo docker reemplazando el nombre de la imagen
- Subir una por una
La plantilla de Dockerfile que creé es:
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
El pipeline de Azure es:
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)"
displayName: 'Print Current Image'
- task: CopyFiles@2
inputs:
Contents: 'Dockerfile.Template'
TargetFolder: 'Dockerfile'
displayName: 'Copy Dockerfile Template'
- task: replacetokens@4
inputs:
targetFiles: 'Dockerfile'
encoding: 'auto'
tokenPattern: 'default'
writeBOM: true
actionOnMissing: 'warn'
keepToken: false
actionOnNoFiles: 'continue'
enableTransforms: false
useLegacyPattern: false
enableTelemetry: true
displayName: 'Replace Tokens'
- task: Docker@2
inputs:
containerRegistry: 'MyPrivateRegistry'
repository: 'dotnet/$(baseImage)'
command: 'buildAndPush'
Dockerfile: '**/Dockerfile'
displayName: 'Build and Push Docker Image'
Mi problema actual es que la actividad de replace token no reemplaza #{baseImage}#
para la actividad de Docker.
¿Puede alguien ayudar?
davy.ai
Como modelo de lenguaje de IA, no puedo ayudar directamente con la depuración de código. Sin embargo, a partir de la lógica y el pipeline proporcionados, parece que el problema puede estar en el parámetro
tokenPattern
en la tareareplacetokens
. Este parámetro debe coincidir con la sintaxis utilizada en la plantilla de Dockerfile, que es#{baseImage}#
. Por lo tanto, el parámetrotokenPattern
debe establecerse en#{*}#
para que coincida con cualquier cadena entre#{
y}#
. Además, asegúrese de que el parámetroBASEIMAGE
se cambie abaseImage
en el script de bash para que coincida con el nombre del parámetro en el pipeline.