Tout savoir sur GitHub Actions CI/CD
Mise à jour :
GitHub Actions, intégré directement dans GitHub, offre une plateforme puissante et flexible pour la mise en place de pipelines CI/CD.
Histoire et Évolution de GitHub Actions
GitHub Actions a été lancé en 2018, marquant une étape importante dans l’évolution de GitHub en tant que plateforme DevOps. Avant GitHub Actions, les développeurs s’appuyaient sur des outils tiers pour automatiser leurs workflows CI/CD. GitHub Actions est donc né de la nécessité de fournir une solution d’automatisation intégrée directement au sein de GitHub, permettant aux utilisateurs de gérer l’ensemble du cycle de vie du développement logiciel sans quitter la plateforme.
Concepts Clés
- Workflow: ensemble d’actions déclenchées par des événements (push, PR, cron) décrites en YAML pour automatiser build, tests et déploiement.
- Job: unité de travail d’un workflow; s’exécute dans un environnement dédié; peut être parallèle ou séquentiel selon la configuration.
- Steps: étapes séquentielles d’un job (actions Marketplace ou commandes) comme compiler, tester, packager ou déployer.
- Checkout: action qui clone le dépôt dans l’environnement du workflow pour rendre le code disponible aux étapes suivantes.
- Secrets: variables sensibles (jetons, mots de passe, clés API) stockées de façon sécurisée et référencées dans les workflows.
- Environnements: contextes d’exécution (dev, test, prod) appliquant des contraintes et validations aux jobs ciblés.
- Conditions: expressions contrôlant l’exécution des jobs/steps selon événements, branches ou critères spécifiques.
- Marketplace GitHub Actions: catalogue d’actions réutilisables de la communauté pour accélérer l’automatisation (voir ↗).
Créations des workflows
Pour créer des workflows dans GitHub Actions, vous devez :
- Créez le répertoire .github/workflows : Si ce répertoire n’existe pas déjà dans votre projet, créez-le.
- Créez un fichier de workflow : Dans le répertoire
.github/workflows, créez un fichier YAML pour définir votre workflow. Vous pouvez nommer ce fichier comme vous le souhaitez, mais il doit posséder l’extension.yml. Par exemple,build.yml.
Syntaxe des Workflows
La syntaxe des fichiers de workflows GitHub Actions est basée sur le YAML. L’utilisation du YAML rend la définition des workflows intuitive et lisible, ce
Structure de base
Un fichier de workflow GitHub Actions commence généralement par une structure de base qui définit les propriétés de celui-ci :
name: Mon Workflowon: push: branches: - mainname: Il s’agit du nom de votre workflow.on: Cette section définit les événements déclencheurs du workflow. Dans cet exemple, le workflow est déclenché à chaque push sur la branche principale (main) et seulement sur cette branche.
Jobs et steps
Ensuite on retrouve la définition des jobs et des steps : structure :
jobs: build: runs-on: ubuntu-latest steps: - name: Checkout du code uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 - name: Installation des dépendances run: npm install - name: Exécution des tests run: npm testjobs: Cette section définit les jobs à exécuter dans le workflow. Ici il y a un job appelé “build”.runs-on: Cette ligne indique l’environnement sur lequel le job sera exécuté. Ici, il s’agit d’une Ubuntu.steps: Cette section définit la suite d’actions ou de commandes à exécuter.
Utilisation d’actions de la marketplace
GitHub Actions encourage l’utilisation d’actions de sont marketplace, qui sont des composants réutilisables permettant d’automatiser des tâches spécifiques. Vous pouvez aussi créer vos propres actions. Voici comment utiliser une action prédéfinie pour l’étape “Checkout du code” :
- name: Checkout du code uses: actions/checkout@v6.0.1name: Le nom de l’étape.uses: L’action à utiliser. Dans cet exemple,actions/checkout@v6.0.1est l’action qui clone le code source du projet.
Retrouver les hashes (commit SHA) des actions
Pour épingler une action avec une référence immuable, récupérez le commit SHA correspondant :
-
Interface GitHub: ouvrez le dépôt de l’action (
actions/checkout), onglet Releases/Tags, cliquez sur le tag (v4,v3,v2) puis suivez le lien du commit pour copier le SHA. -
API GitHub:
Terminal window # Résoudre un tag vers son commitcurl -s https://api.github.com/repos/actions/checkout/commits/v6.0.1 | jq -r .sha8e8c483db84b4bee98b60c0593521ed34d9990e8# Lister les tags et leur ciblecurl -s https://api.github.com/repos/actions/checkout/tags | jq -r '.[0]'{"name": "v6.0.1","zipball_url": "https://api.github.com/repos/actions/checkout/zipball/refs/tags/v6.0.1","tarball_url": "https://api.github.com/repos/actions/checkout/tarball/refs/tags/v6.0.1","commit": {"sha": "8e8c483db84b4bee98b60c0593521ed34d9990e8","url": "https://api.github.com/repos/actions/checkout/commits/8e8c483db84b4bee98b60c0593521ed34d9990e8"},"node_id": "MDM6UmVmMTk3ODE0NjI5OnJlZnMvdGFncy92Ni4wLjE="} -
CLI
gh:Terminal window # Obtenir le SHA pour un tag donnégh api repos/actions/checkout/commits/v4 --jq .sha{"name": "v6.0.1","sha": "8e8c483db84b4bee98b60c0593521ed34d9990e8"}# Lister les tags et leur commitgh api repos/actions/checkout/tags --jq '.[] | {name: .name, sha: .commit.sha}'
Ensuite, épinglez l’action (exemple avec actions/checkout déjà résolu):
uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8Note: remplacez les autres @<commit-sha> par les SHA réels obtenus via les
commandes ci-dessus pour chaque action utilisée (upload-artifact,
download-artifact, molecule-action, etc.).
Gestion des Artifacts
Les artifacts sont des fichiers ou des dossiers générés par un job et qui
peuvent être archivés et partagés entre les jobs d’un même workflow. Ils
permettent de stocker des résultats importants tels que des fichiers de build,
des rapports de test ou des binaires. Vous pouvez utiliser l’action
upload-artifact pour archiver des artifacts et l’action download-artifact
pour les récupérer dans d’autres jobs.
Exemple:
name: Pipeline Avancée
on: push: branches: - main
jobs: build-and-test: runs-on: ubuntu-latest steps: - name: Checkout du code uses: actions/checkout@8ade135a41bc03ea155e62e844d188df1ea18608 - name: Installation des dépendances run: npm install - name: Exécution des tests run: npm test - name: Archive des résultats de tests uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 with: name: test-results path: test-results
deploy: needs: build-and-test runs-on: ubuntu-latest steps: - name: Téléchargement des résultats de tests uses: actions/download-artifact@d3f86a106a0bac45b974a628896c90dbdf5c8093 with: name: test-results - name: Déploiement sur le serveur de production run: | # Script de déploiement ici echo "Déploiement de l'application sur le serveur de production."Matrices
Les matrices vous permettent d’exécuter en parallèle un même job avec plusieurs configurations différentes. Cela peut être utile lorsque vous avez besoin de tester votre application sur différentes versions de langages, de systèmes d’exploitation ou de dépendances. Vous pouvez définir une matrice de configurations dans votre fichier de workflow pour exécuter un job pour chaque combinaison de valeurs que vous spécifiez.
Un exemple :
---## Ansible managed#
name: Ansible Molecule
on: push: tags_ignore: - '*' pull_request: schedule: - cron: '1 1 1 * *'
jobs: lint: runs-on: ubuntu-20.04 steps: - name: checkout uses: actions/checkout@8ade135a41bc03ea155e62e844d188df1ea18608 with: path: "${{ github.repository }}" - name: molecule uses: robertdebock/molecule-action@d3e37309fc9c287d6a3507d172520d37df0e2dda with: command: lint test: needs: - lint runs-on: ubuntu-20.04 strategy: fail-fast: false matrix: config: - image: "debian" tag: "latest" - image: "debian" tag: "bookworm" - image: "fedora" tag: "35" - image: "fedora" tag: "latest" - image: "fedora" tag: "rawhide" - image: "ubuntu" tag: "latest" - image: "ubuntu" tag: "focal" steps: - name: checkout uses: actions/checkout@8ade135a41bc03ea155e62e844d188df1ea18608 with: path: "${{ github.repository }}" - name: molecule uses: robertdebock/molecule-action@d3e37309fc9c287d6a3507d172520d37df0e2dda with: image: ${{ matrix.config.image }} tag: ${{ matrix.config.tag }}Cet exemple permet de lancer des tests sur des roles Ansible avec molecule sur différents OS.
Utilisation de l’API GitHub
GitHub Actions permet d’interagir avec l’API GitHub directement depuis vos
workflows. Vous pouvez créer, mettre à jour ou extraire des informations de
votre projet, des pull requests ou des problèmes en utilisant des actions
prédéfinies telles que actions/github-script. Cela permet par exemple de poser
des tags, de créer des commentaires automatiques…
La CLI GitHub (gh)
La CLI GitHub gh permet d’interagir avec GitHub directement depuis votre
terminal. L’utilisation de La CLI GitHub dans vos workflows peut vous offrir des
fonctionnalités supplémentaires pour automatiser et simplifier votre flux de
travail de développement.
Installation de La CLI GitHub
Pour commencer, vous devez installer La CLI GitHub sur votre système. Vous pouvez suivre les instructions d’installation officielles pour votre système d’exploitation sur la page GitHub CLI ↗.
Vous pouvez aussi l’installer avec asdf vm :
asdf plugin add github-cliasdf install github-cli latestasdf set --home github-cli latest
gh --version 07:17:30gh version 2.39.1 (2023-11-14)https://github.com/cli/cli/releases/tag/v2.39.1Une fois installé, vous pouvez utiliser gh pour effectuer diverses opérations
sur vos projets GitHub, notamment la création de pull requests, la gestion des
problèmes, la consultation des informations de projet et bien plus encore.
Intégration de La CLI GitHub dans les Workflows GitHub Actions
La CLI GitHub peut être utilisée dans les workflows GitHub Actions pour automatiser certaines tâches, notamment la création de pull requests, la gestion des étiquettes ou l’accès aux données de votre projet GitHub.
Voici un exemple de workflow qui utilise La CLI GitHub pour créer une pull request à partir d’une branche :
name: Création de Pull Request
on: push: branches: - feature/*
jobs: create-pr: runs-on: ubuntu-latest
steps: - name: Checkout du code uses: actions/checkout@v2
- name: Installation de La CLI GitHub run: | curl -fsSL https://cli.github.com/packages/githubcli-archive-keyring.gpg | gpg --dearmor -o /usr/share/keyrings/githubcli-archive-keyring.gpg echo "deb [signed-by=/usr/share/keyrings/githubcli-archive-keyring.gpg arch=all] https://cli.github.com/packages stable main" | tee /etc/apt/sources.list.d/github-cli.list apt update apt install gh
- name: Création de la Pull Request run: | gh auth login --with-token < ${{ secrets.GITHUB_TOKEN }} gh pr create --base main --head ${{ github.ref }} --title "Nouvelle fonctionnalité" --body "Cette pull request ajoute une nouvelle fonctionnalité."Sécurité et Accès aux Secrets
Lorsque vous utilisez la CLI GitHub dans vos workflows GitHub Actions,
assurez-vous de gérer les autorisations et l’accès aux secrets de manière
sécurisée. Dans l’exemple ci-dessus, nous utilisons le token GitHub ${{ secrets.GITHUB_TOKEN }} pour authentifier la CLI GitHub. Veillez à ne pas
exposer vos tokens ou vos informations sensibles dans vos workflows.
En utilisant La CLI GitHub en conjonction avec GitHub Actions, vous pouvez automatiser des tâches spécifiques de manière plus avancée et simplifier la gestion de vos workflows. Cette intégration vous offre davantage de flexibilité pour personnaliser et optimiser votre processus de développement.
Lancer localement vos workflows avec act
act est un outil open source qui vous permet de tester sur votre machine de
travail vos workflows avant de les pousser sur votre projet GitHub. Cette
approche vous permet d’accélérer le processus de développement, d’identifier les
erreurs potentielles et de valider vos workflows sans avoir à attendre une
exécution réelle sur GitHub.
Installation de act
Pour commencer à utiliser act, vous devez l’installer sur votre système. Voici
comment procéder avec asdf :
asdf plugin add actasdf install act latestasdf set --home act latestact --versionact version 0.2.54Autre solution pour le télécharger :
- Téléchargez la dernière version de
actdepuis le projet GitHub ↗. - Installez
acten suivant les instructions d’installation spécifiques à votre système d’exploitation.
Utilisation de act
Une fois act installé, vous pouvez l’utiliser pour exécuter des workflows
GitHub Actions localement. Voici comment fonctionne la commande de base :
act -j <nom-du-job><nom-du-job>: Remplacez ceci par le nom du job que vous souhaitez exécuter. Si vous ne spécifiez pas de nom de job,actexécutera le premier job défini dans votre fichier de workflow.
Par exemple, si vous avez un fichier de workflow nommé ci-cd.yml avec un job
appelé build, vous pouvez lancer le test localement avec la commande suivante
:
act -j buildact utilise Docker pour créer
un environnement d’exécution isolé basé sur les actions définies dans votre
workflow. Il exécutera ensuite le job spécifié, vous permettant de voir les
résultats.
Personnalisation de l’environnement
Vous pouvez personnaliser l’environnement d’exécution de act en utilisant des
fichiers de configuration spécifiques, tels que .actrc ou .github/act.yml.
Cela vous permet de définir des variables d’environnement, des secrets, ou
d’autres paramètres nécessaires à votre workflow.
Conclusion
Vous l’aurez compris, GitHub Actions est une puissante solution de CI/CD intégrée qui offre de nombreuses fonctionnalités pour automatiser et améliorer vos projets.
Plus d’infos
Site Officiel et Documentation
- Documentation GitHub Actions ↗ : Cette documentation officielle fournit une vue d’ensemble complète de GitHub Actions.
- Guides pour GitHub Actions ↗ : Ces guides inclus dans la documentation officielle offrent des cas d’usage spécifiques et des exemples pour aider à configurer les workflows GitHub Actions.
- Démarrage rapide pour GitHub Actions ↗ : Une section de la documentation officielle qui propose des moyens rapides pour créer des flux de travail GitHub Actions.
Blogs
- Comment se servir de GitHub Actions ? ↗ : Un article de blog qui explique comment utiliser GitHub Actions pour l’intégration continue et le déploiement continu.
Livres
- GitHub Actions: Par la pratique (French Edition) - Amazon.com ↗ : Un livre disponible sur Amazon qui propose une démarche pédagogique basée sur la pratique avec des exercices et la création de scénarios réels pour couvrir l’ensemble des fonctionnalités de GitHub Actions.