Article
Publier une Release Mix et son image Docker dans une pipeline de CI/CD
Après avoir vu ensemble comment publier une release mix avec Docker et l'héberger sur un registry, on va aller plus loin en automatisant cette partie dans une pipeline de CI/CD avec Sourcehut.
Cet article concerne particulièrement Elixir et Phoenix Framework pour le côté applicatif et build.sr.ht comme pipeline mais vous pouvez le lire même si votre besoin est sur un autre langage ou une autre pipeline !
Cet article fait parti d'une série sur la release et le déploiement d'une application Phoenix Framework. Si vous voulez accéder aux autres articles :
Comment utiliser Docker Compose pour notre application Phoenix Framework ?
Comment automatiser la release Mix et la publication de l'image dans une pipeline de CI/CD ?
Comment fonctionne une pipeline de CI/CD ?
Les pipelines comme Gitlab CI ou builds.sr.ht fonctionnent globalement toutes de la même façon. À partir d'un fichier de configuration, le service démarre un conteneur docker dans lequel il effectue l'ensemble des instructions demandées.
La particularité principale de ces outils est qu'il se remet toujours à zéro une fois qu'il a terminé un build. Cela signifie que vous devez préparer votre environnement à chaque fois. La façon de faire va dépendre de la pipeline mais grosso modo, vous allez partir d'une image Docker initiale, y ajouter des packages, la configurer et ensuite seulement lister les taches propres à votre projet.
Créer une image Docker et la publier depuis une pipeline de CI/CD
Dans le cas de build.sr.ht, le fichier de configuration se nomme .build.yml
et il se compose comme suit :
image: alpine/latest
packages:
- docker
sources:
- URL_DE_DEPOT_GIT_SOURCE
environment:
REGISTRY: MON_REGISTRY
IMAGE_VERSION: MON_REGISTRY/MON_IMAGE:latest
secrets:
- SSH_KEY
- MON_PASSWORD_REGISTRY
tasks:
- start_docker: |
sudo service docker start
sudo addgroup $(whoami) docker
- login: |
echo "$(cat ~/MON_PASSWORD_REGISTRY)" | docker login $REGISTRY -u nologin --password-stdin
- build: |
cd mon_projet
docker build . -t $IMAGE_VERSION
- push: |
docker push $IMAGE_VERSION
Dans un premier temps, on choisit l'image
qu'on veut parmi la liste des images disponibles.
Ensuite, on liste les packages
à installer. Comme notre image est alpine, les packages viendront d'apk
.
Après, on indique les dépôts git sources. Généralement il n'y a en qu'un seul.
On peut définir des variables d'environnement (environment
) qui seront ajoutées automatiquement. Attention, il ne faut pas y mettre des données sensibles.
On peut ensuite lister des secrets
. Ce sont des fichiers qui sont stockés de façon sécurisés par la pipeline et qui sont rendus accessibles lors du build. C'est ici que l'on va mettre nos clefs SSH ou nos mots de passe par exemple.
En dernier lieu, on définit l'ensemble des tâches (tasks
) à réaliser à chaque fois.
Dans d'autres systèmes, il est possible de définir quelles tâches exécutées en fonctions de critères comme le nom des branches. Cela n'existe pas dans la configuration de sourcehut mais il est possible de le faire en ligne de commande directement. Nous verrons cela dans un prochain article.