Compartir comentarios
Las respuestas se generan en base a la documentación.

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-output

Con 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.