L’objectif
Utiliser Github Actions et Github container registry pour générer et héberger l’image Docker d’un projet hébergé sur Github.
Le contexte
Github propose depuis peu un service de “registry” pour héberger les images Docker. Ce service associé à Github Actions propose un workflow permettant d’automatiser la création d’une nouvelle image (lors d’une nouvelle version par exemple) et la mise à jour de l’image hébergée.
Proposer une image Docker pour un projet peut être un gros plus puisqu’il sera extrêmement simple de tester votre application sur un environnement Docker. Il suffira de télécharger l’image et de la lancer.
Mise en oeuvre
Le préalable indispensable est que votre projet dispose d’un Dockerfile qui va définir votre image Docker.
Il vous suffit ensuite de créer un fichier définissant les actions à accomplir dans le répertoire /.github/workflows/
de votre projet.
Voici le fichier .github/workflows/build-and-push-docker.yml
que j’utilise :
name: Build and Push Docker Image
on:
push:
tags: [ 'v*.*.*' ]
env:
REGISTRY: ghcr.io
IMAGE_NAME: ${{ github.repository }}
jobs:
build:
runs-on: ubuntu-latest
permissions:
contents: read
packages: write
steps:
- name: Checkout repository
uses: actions/checkout@v2
- name: Log in to the Container registry
uses: docker/login-action@f054a8b539a109f9f41c372932f1ae047eff08c9
with:
registry: ${{ env.REGISTRY }}
username: ${{ github.actor }}
password: ${{ secrets.GITHUB_TOKEN }}
- name: Extract metadata (tags, labels) for Docker
id: meta
uses: docker/metadata-action@98669ae865ea3cffbcbaa878cf57c20bbf1c6c38
with:
images: ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}
- name: Build and push Docker image
uses: docker/build-push-action@ad44023a93711e3deb337508980b4b5e9bcdc5dc
with:
context: .
push: true
tags: ${{ steps.meta.outputs.tags }}
labels: ${{ steps.meta.outputs.labels }}
Cette action va s’exécuter à chaque fois qu’un nouveau tag est créé sur votre projet.
Elle va générer une nouvelle image Docker et la mettre à jour sur le “container registry” Github.
Vous trouverez cette image dans la section “Packages” de votre projet ou de votre compte Github.
Par exemple, pour notre dernier petit projet, un générateur d’image openGraph
l’image Docker générée est ici : https://github.com/craftpunks/og-image/pkgs/container/og-image