GitHub Actions permet d’automatiser l’ensemble du cycle de vie des images Docker, de la construction au déploiement, directement depuis votre dépôt. En combinant les actions Docker officielles avec les fonctionnalités de GitHub Actions, vous créez des pipelines CI/CD robustes qui construisent des images multi-architecture, les publient sur des registres de conteneurs et analysent les vulnérabilités de sécurité. Ce guide détaille la mise en place d’un workflow complet de construction et déploiement Docker.

Création du Workflow de Base

Créez le fichier de workflow dans votre dépôt :

# .github/workflows/docker-build.yml
name: Build and Push Docker Image

on:
  push:
    branches: [main]
    tags: ['v*']
  pull_request:
    branches: [main]

permissions:
  contents: read
  packages: write

jobs:
  build:
    runs-on: ubuntu-latest
    steps:
      - name: Checkout repository
        uses: actions/checkout@v4

      - name: Set up QEMU
        uses: docker/setup-qemu-action@v3

      - name: Set up Docker Buildx
        uses: docker/setup-buildx-action@v3

      - name: Log in to GHCR
        if: github.event_name != 'pull_request'
        uses: docker/login-action@v3
        with:
          registry: ghcr.io
          username: ${{ github.actor }}
          password: ${{ secrets.GITHUB_TOKEN }}

      - name: Extract metadata
        id: meta
        uses: docker/metadata-action@v5
        with:
          images: ghcr.io/${{ github.repository }}
          tags: |
            type=semver,pattern={{version}}
            type=sha,prefix=

      - name: Build and push
        uses: docker/build-push-action@v5
        with:
          context: .
          platforms: linux/amd64,linux/arm64
          push: ${{ github.event_name != 'pull_request' }}
          tags: ${{ steps.meta.outputs.tags }}
          labels: ${{ steps.meta.outputs.labels }}
          cache-from: type=gha
          cache-to: type=gha,mode=max

Ce workflow se déclenche sur les push vers main et les tags de version. Il utilise le cache GitHub Actions pour accélérer les builds suivants.

Authentification et Registres

Pour publier sur GHCR, le GITHUB_TOKEN suffit. Pour Docker Hub, configurez des secrets dans les paramètres de votre dépôt :

      - name: Log in to Docker Hub
        uses: docker/login-action@v3
        with:
          username: ${{ secrets.DOCKERHUB_USERNAME }}
          password: ${{ secrets.DOCKERHUB_TOKEN }}

Générez un token d’accès Docker Hub dans les paramètres de votre compte Docker Hub plutôt que d’utiliser votre mot de passe directement.

Builds Multi-Architecture

Les actions setup-qemu-action et setup-buildx-action permettent de construire des images pour plusieurs architectures dans un seul workflow. Le paramètre platforms: linux/amd64,linux/arm64 génère des images compatibles avec les serveurs x86 et les appareils ARM comme les instances AWS Graviton ou les Raspberry Pi.

Le cache BuildKit (cache-from/cache-to: type=gha) stocke les couches intermédiaires dans le cache GitHub Actions, réduisant considérablement les temps de build pour les commits suivants.

Analyse de Vulnérabilités

Ajoutez une étape d’analyse de sécurité après la construction de l’image :

      - name: Run Trivy vulnerability scanner
        uses: aquasecurity/trivy-action@master
        with:
          image-ref: ghcr.io/${{ github.repository }}:${{ steps.meta.outputs.version }}
          format: 'sarif'
          output: 'trivy-results.sarif'
          severity: 'CRITICAL,HIGH'

      - name: Upload Trivy scan results
        uses: github/codeql-action/upload-sarif@v3
        with:
          sarif_file: 'trivy-results.sarif'

Trivy analyse les couches de l’image à la recherche de CVE connues. Les résultats sont téléchargés au format SARIF et apparaissent dans l’onglet Security de votre dépôt GitHub.

Résumé

Ce guide a couvert la création d’un pipeline CI/CD complet avec GitHub Actions pour la construction et le déploiement d’images Docker. Les éléments clés incluent l’authentification aux registres, les builds multi-architecture avec BuildKit, le cache des couches et l’analyse de vulnérabilités avec Trivy. Adaptez ce workflow à vos besoins en ajoutant des étapes de tests, de linting ou de déploiement sur des environnements cibles.

Articles Connexes