Bake con Docker GitHub Builder
El flujo de trabajo reutilizable bake.yml
compila a partir de una definición de Bake en lugar de un
conjunto de entradas de Dockerfile. Esta página muestra cómo llamar al flujo de trabajo para un target, cómo pasar
anulaciones y variables de Bake, y cómo exportar la salida local cuando un archivo de Bake
ya es la fuente de verdad para tu compilación.
Compilar y enviar un target de Bake
El siguiente flujo de trabajo compila el target image desde docker-bake.hcl y
publica el resultado con etiquetas generadas a partir de entradas de metadatos:
name: ci
on:
push:
branches:
- "main"
tags:
- "v*"
pull_request:
permissions:
contents: read
jobs:
bake:
uses: docker/github-builder/.github/workflows/bake.yml@v1
permissions:
contents: read # para obtener el contenido del repositorio
id-token: write # para firmar atestaciones con el token OIDC de GitHub
with:
output: image
push: ${{ github.event_name != 'pull_request' }}
target: image
meta-images: name/app
meta-tags: |
type=ref,event=branch
type=ref,event=pr
type=semver,pattern={{version}}
secrets:
registry-auths: |
- registry: docker.io
username: ${{ vars.DOCKERHUB_USERNAME }}
password: ${{ secrets.DOCKERHUB_TOKEN }}Los flujos de trabajo de Bake compilan un target por llamada de flujo de trabajo. No se admiten grupos ni compilaciones de múltiples targets porque la procedencia SLSA, el manejo de resúmenes (digests) y la creación de manifiestos están limitados a un único target.
El flujo de trabajo valida la definición antes de que comience la compilación y resuelve
el target a partir de los archivos que pases en files. La selección del runner utiliza la misma
entrada runner que el flujo de trabajo de compilación. Establece una única etiqueta de runner de Linux
alojado en GitHub o una asignación de plataformas cuando la asignación predeterminada no sea suficiente. Para obtener detalles,
consulta la selección de runners (runner selection).
Anular valores de target y variables
Dado que el flujo de trabajo delega la compilación a Bake, puedes seguir utilizando set y
vars para anulaciones específicas del target:
name: ci
on:
push:
branches:
- "main"
permissions:
contents: read
jobs:
bake:
uses: docker/github-builder/.github/workflows/bake.yml@v1
permissions:
contents: read # para obtener el contenido del repositorio
id-token: write # para firmar atestaciones con el token OIDC de GitHub
with:
output: image
push: true
target: image
vars: |
IMAGE_TAG=${{ github.sha }}
set: |
*.args.BUILD_RUN_ID=${{ github.run_id }}
*.platform=linux/amd64,linux/arm64
cache: true
cache-scope: image
meta-images: name/app
meta-tags: |
type=sha
set-meta-annotations: true
secrets:
registry-auths: |
- registry: docker.io
username: ${{ vars.DOCKERHUB_USERNAME }}
password: ${{ secrets.DOCKERHUB_TOKEN }}Esta forma se adapta a los repositorios que ya utilizan grupos de Bake, herencia de targets y expansión de variables. El flujo de trabajo reutilizable se encarga de la configuración de Buildx, la exportación de caché a GitHub Actions, los valores predeterminados de procedencia, el comportamiento de firma y el manifiesto multiplataforma final. Las etiquetas y anotaciones de metadatos se pueden fusionar en la definición de Bake sin añadir un paso de metadatos independiente a tu flujo de trabajo.
Exportar salida local desde Bake
Si el target debe exportar archivos en lugar de publicar una imagen, cambia la salida del
flujo de trabajo a local y sube el artefacto:
name: ci
on:
pull_request:
permissions:
contents: read
jobs:
bake:
uses: docker/github-builder/.github/workflows/bake.yml@v1
permissions:
contents: read # para obtener el contenido del repositorio
id-token: write # para firmar atestaciones con el token OIDC de GitHub
with:
output: local
target: binaries
artifact-upload: true
artifact-name: bake-outputCon output: local, el flujo de trabajo inyecta la anulación de salida local correspondiente
en la ejecución de Bake y fusiona los artefactos subidos una vez que finalizan las compilaciones de cada
plataforma. Si necesitas un patrón de Bake manual que permanezca en un trabajo normal,
consulta Imagen multiplataforma. Si tu compilación no necesita una
definición de Bake, utiliza build.yml en su lugar.