Utiliser buildah dans Cloud Build

L’astuce consiste en l’utilisation d’une image buildah officielle, disponible à l’adresse quay.io/buildah/stable. Je distingue trois étapes dans mon build: la construction de l’image, la récupération de la clef de chiffrement depuis le Secret Manager et enfin, le stockage dans le Container Registry. Ce qui nous donne donc la configuration ci-dessous.

Construction de l’image

# Build image with buildah
- id: 'build'
  name: 'quay.io/buildah/stable'
  args: ['buildah', 'bud', '-t', 'mon-image', '.']
  volumes:
    - name: varlibcontainers
      path: '/var/lib/containers'

Récupération de la clef

# Get public key from secret manager
- id: 'get public key'
  name: gcr.io/cloud-builders/gcloud
  entrypoint: 'bash'
  args: [ '-c', "gcloud secrets versions access latest --secret=pub-key --format='get(payload.data)' | tr '_-' '/+' | base64 -d > pub-key.pem" ]

Stockage de l’image

# Push image with buildah
- id: 'push'
  name: 'quay.io/buildah/stable'
  args: ['buildah', 'push', '--encryption-key', 'jwe:./pub-key.pem', 'mon-image', 'eu.gcr.io/$PROJECT_ID/mon-image']
  volumes:
    - name: varlibcontainers
      path: '/var/lib/containers'

Note

Précisons que ce Cloud Build est déclenché en cas de push sur une branche particulière d’un dépôt git, ici hébergé chez GitHub et connecté à la GCP. Ce dépôt contient bien entendu un fichier Dockerfile à sa racine.