Aller au contenu

Introduction aux Github Actions

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

GitHub Actions repose sur plusieurs concepts clés qui sont essentiels pour comprendre comment fonctionne cette solution de CI/CD.

Workflow

Un workflow est un ensemble d’actions à exécuter en réponse à des événements spécifiques. Ces événements peuvent être des actions telles que le push du code, la création d’une pull request, ou même une planification via un cron. Chaque workflow est défini dans un fichier écrit au format YAML. Les workflows permettent d’automatiser des processus tels que le build, les tests, le déploiement… ce qui améliore l’efficacité de votre travail de développement.

Job

Un job est une unité de travail au sein d’un workflow. Les workflows peuvent contenir un ou plusieurs jobs, qui peuvent être exécutés en parallèle ou en séquence, en fonction de la configuration que vous définissez. Chaque job est exécuté dans un environnement spécifique, que vous pouvez personnaliser en fonction des exigences de votre application. Par exemple, vous pourriez avoir un job de build qui compile votre code source, suivi d’un job de test qui exécute des tests unitaires.

Steps

Les steps sont les étapes individuelles qui composent un job. Chaque step représente une action spécifique à effectuer, comme la compilation du code, l’exécution de tests, la création de packages, ou le déploiement. Les steps sont exécutés de manière séquentielle et peuvent dépendre les uns des autres. Vous pouvez utiliser des actions prédéfinies à partir du Marketplace GitHub Actions ou créer vos propres actions pour définir les étapes de votre job.

Checkout

L’action Checkout est l’une des actions les plus couramment utilisées dans les workflows GitHub Actions. Elle permet de cloner le code du projet dans l’environnement du workflow, rendant ainsi le code source disponible pour les étapes suivantes. Cela garantit que votre workflow dispose toujours de la dernière version du code source avant de commencer à exécuter les jobs.

Secrets

Les secrets sont des variables sensibles stockées de manière sécurisée et utilisées dans les workflows. Ils sont généralement utilisés pour stocker des informations sensibles telles que des clés d’API, des jetons d’accès ou des mots de passe. GitHub Actions offre un espace de stockage sécurisé pour ces secrets.

Environnements

Les environnements sont des groupes d’exécution pour les jobs. Vous pouvez configurer des environnements spécifiques pour vos jobs, ce qui permet de définir des contraintes pour leur exécution. Par exemple, vous pouvez avoir un environnement de développement, un environnement de test et un environnement de production et configurer vos workflows pour exécuter des jobs spécifiques dans ces environnements en fonction des besoins.

Conditions

GitHub Actions permet d’utiliser des conditions pour déterminer si un job doit être exécuté en fonction d’une évaluation. Par exemple, vous pouvez définir des conditions pour exécuter un job uniquement si une certaine branche est modifiée, si une pull request a été ouverte, ou si d’autres critères spécifiques sont remplis. Cela vous permet de personnaliser davantage le comportement de vos workflows en fonction des événements et des circonstances.

Marketplace GitHub Actions

Le Marketplace GitHub Actions est une ressource précieuse qui offre un vaste choix d’actions pré-construites que vous pouvez intégrer dans vos workflows. Ces actions sont créées par la communauté GitHub et couvrent une variété de cas d’usage.

Pour accéder au Marketplace GitHub Actions, rendez-vous ici. Vous y trouverez une liste d’actions prédéfinies, triées par catégorie et par popularité. Vous pouvez parcourir ces actions pour trouver celles qui correspondent le mieux à vos besoins.

Créations des workflows

Pour créer des workflows dans GitHub Actions, vous devez :

  1. Créez le répertoire .github/workflows : Si ce répertoire n’existe pas déjà dans votre projet, créez-le.
  2. 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 Workflow
on:
push:
branches:
- main
  • name : 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@v2
- name: Installation des dépendances
run: npm install
- name: Exécution des tests
run: npm test
  • jobs : 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@v2
  • name : Le nom de l’étape.
  • uses : L’action à utiliser. Dans cet exemple, actions/checkout@v2 est l’action qui clone le code source du projet.

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@v2
- 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@v2
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@v2
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@v3
with:
path: "${{ github.repository }}"
- name: molecule
uses: robertdebock/molecule-action@4.0.7
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@v3
with:
path: "${{ github.repository }}"
- name: molecule
uses: robertdebock/molecule-action@4.0.7
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 :

Terminal window
asdf plugin add github-cli
asdf install github-cli latest
asdf global github-cli latest
gh --version 07:17:30
gh version 2.39.1 (2023-11-14)
https://github.com/cli/cli/releases/tag/v2.39.1

Une 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 :

Terminal window
asdf plugin add act
asdf install act latest
asdf global act latest
act --version
act version 0.2.54

Autre solution pour le télécharger :

  1. Téléchargez la dernière version de act depuis le projet GitHub.
  2. Installez act en 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 :

Terminal window
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, act exé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 :

Terminal window
act -j build

act 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

Blogs

Livres