Introduction à GitHub Actions

Qu'est-ce que GitHub Actions ?

GitHub Actions est une plateforme d'automatisation intégrée à GitHub, qui permet de créer, gérer et exécuter des workflows automatisés directement à partir de vos dépôts GitHub. Avec GitHub Actions, vous pouvez définir des processus d'intégration continue (CI) et de déploiement continu (CD), automatiser les tests, les builds, les déploiements, et bien plus encore.

La grande force de GitHub Actions est son intégration native avec GitHub, vous permettant de déclencher des workflows en fonction d’événements de dépôt comme les push, pull requests, ou même des déclencheurs personnalisés comme un cron planifié.

Caractéristiques principales de GitHub Actions

  • Intégration complète avec GitHub : Les workflows peuvent être déclenchés par les événements GitHub tels que les push, les pull request, les issues, et bien d'autres.

  • Flexibilité : GitHub Actions est hautement personnalisable avec des centaines d'actions disponibles dans le GitHub Marketplace.

  • Runners hébergés et auto-hébergés : GitHub propose des environnements de build préconfigurés, ou vous pouvez utiliser vos propres machines pour exécuter des workflows.


Utilisation principale dans l'intégration continue (CI) et le déploiement continu (CD)

GitHub Actions est particulièrement utile pour implémenter des pipelines d'intégration continue (CI) et de déploiement continu (CD). Voici un aperçu de chaque concept :

Intégration Continue (CI)

L'intégration continue est un processus dans lequel les développeurs fusionnent régulièrement leurs modifications de code dans la branche principale du dépôt. Les tests automatisés sont exécutés pour vérifier que le code nouvellement intégré ne casse rien dans le projet. GitHub Actions permet d’automatiser ce processus en créant des workflows qui s'exécutent automatiquement lorsqu'un push ou une pull request est fait sur un dépôt.

  • Exemple d’utilisation CI :

  • Exécution automatique des tests unitaires après chaque commit ou pull request.

  • Compilation automatique du code pour vérifier qu’il n’y a pas d’erreurs de syntaxe ou de compilation.

name: CI Pipeline on: [push, pull_request] jobs: build: runs-on: ubuntu-latest steps: - name: Checkout repository uses: actions/checkout@v2 - name: Set up Node.js uses: actions/setup-node@v2 with: node-version: '14' - name: Install dependencies run: npm install - name: Run tests run: npm test

Déploiement Continu (CD)

Le déploiement continu consiste à automatiser le déploiement de votre application dans différents environnements (développement, staging, production). GitHub Actions peut être utilisé pour déclencher des déploiements après le succès des tests. Par exemple, vous pouvez configurer un workflow pour déployer une application sur un service cloud comme AWS, Azure ou GCP après chaque merge sur la branche principale.

  • Exemple d’utilisation CD :

  • Déploiement d’une application sur AWS après un merge réussi sur la branche main.

  • Automatisation des versions avec des workflows qui génèrent automatiquement des versions de l’application et les publient.

name: CD Pipeline on: push: branches: - main jobs: deploy: runs-on: ubuntu-latest steps: - name: Checkout code uses: actions/checkout@v2 - name: Deploy to AWS uses: aws-actions/configure-aws-credentials@v1 with: aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID }} aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }} aws-region: us-west-2 - name: Deploy application run: | aws s3 sync ./build s3://my-app-bucket


Concepts clés de GitHub Actions

GitHub Actions repose sur plusieurs concepts clés qui permettent de structurer et organiser les workflows d’automatisation. Voici une explication détaillée des termes fondamentaux :

Workflows

Un workflow est une automatisation définie dans un fichier YAML dans le répertoire .github/workflows/. Un workflow est composé d'une ou plusieurs jobs qui s’exécutent en fonction d'événements spécifiques. Par exemple, un workflow peut être déclenché lorsqu'un développeur pousse du code dans le dépôt.

  • Déclencheurs d’événements : Les workflows sont déclenchés par des événements spécifiques, tels qu'un push, une pull request, ou des événements planifiés avec un cron.

  • Définition de jobs : Un workflow contient un ou plusieurs jobs. Chaque job est une série d'étapes exécutées dans un environnement distinct.

Jobs

Un job est une séquence d'étapes qui s’exécutent dans un environnement isolé. Tous les jobs dans un workflow s’exécutent par défaut en parallèle, mais ils peuvent être configurés pour s'exécuter de manière séquentielle si un job dépend d’un autre.

  • Exécution parallèle : Plusieurs jobs peuvent s’exécuter en parallèle pour réduire le temps total d’exécution.

  • Dépendances entre jobs : Un job peut dépendre de l'achèvement d'un autre job.

jobs: job1: runs-on: ubuntu-latest steps: - name: Step 1 run: echo "Job 1 Step 1" job2: needs: job1 # Dépend de job1 runs-on: ubuntu-latest steps: - name: Step 1 run: echo "Job 2 Step 1"

Actions

Une action est une tâche individuelle que vous pouvez exécuter dans un job. GitHub Actions offre une large bibliothèque d’actions prédéfinies disponibles dans le GitHub Marketplace. Vous pouvez également créer vos propres actions pour répondre à des besoins spécifiques.

  • Actions de Marketplace : Vous pouvez réutiliser des actions développées par d’autres, telles que actions/checkout pour vérifier le code ou actions/setup-node pour configurer Node.js.

  • Actions personnalisées : Il est possible de créer des actions spécifiques à votre projet en utilisant des scripts Bash ou en créant des conteneurs Docker. Pour un exemple détaillé de création d'une action personnalisée, consultez le dépôt Cedille-Actions-By-Example, qui illustre comment structurer et configurer une action comme KubeSketcher, une action permettant de générer des diagrammes d'architecture de namespaces Kubernetes.

steps: - name: Checkout repository uses: actions/checkout@v2 # Action prédéfinie depuis le Marketplace - name: Run custom script run: ./my-custom-script.sh # Action personnalisée

Runners

Un runner est la machine qui exécute le job défini dans un workflow. GitHub offre des runners hébergés (machines préconfigurées par GitHub) et vous pouvez également configurer vos propres runners auto-hébergés si vous avez des besoins spécifiques en termes d'environnement d'exécution.

  • Runners hébergés : GitHub fournit des runners hébergés sous Linux, Windows, et macOS avec les outils CI/CD les plus utilisés déjà installés.

  • Runners auto-hébergés : Si vous avez des besoins spécifiques en termes de matériel ou de sécurité, vous pouvez configurer vos propres runners en utilisant vos machines.

jobs: build: runs-on: ubuntu-latest # Utilise un runner hébergé sous Ubuntu custom-build: runs-on: self-hosted # Utilise un runner auto-hébergé


Différences entre GitHub Actions et d'autres outils CI/CD

GitHub Actions se distingue par son intégration native avec GitHub, son flexibilité et la simplicité de sa configuration. Voici quelques différences majeures entre GitHub Actions et d'autres outils CI/CD tels que Jenkins, Travis CI ou CircleCI :

Intégration native avec GitHub

Contrairement à d'autres outils CI/CD qui nécessitent une intégration externe à GitHub, GitHub Actions est directement intégré dans l’interface de GitHub. Cela signifie que vous pouvez gérer vos workflows CI/CD sans quitter GitHub, avec une gestion facile des triggers, secrets et permissions.

Flexibilité

GitHub Actions est extrêmement flexible, vous permettant de définir vos workflows à l'aide d'un simple fichier YAML. Vous avez également accès à une grande variété d’actions prédéfinies dans le Marketplace, et la possibilité de créer vos propres actions.

Exécution dans GitHub

L’exécution des workflows se fait directement dans GitHub à l’aide des runners hébergés. D'autres services, comme Jenkins, nécessitent souvent de configurer vos propres serveurs d'exécution.

Comparaison des Fonctionnalités

Outils CI/CD

GitHub Actions

Jenkins

Travis CI

CircleCI

Intégration

Native GitHub

Externe

Externe

Externe

Configuration

YAML dans le dépôt

Interface Jenkins

YAML dans le dépôt

YAML dans le dépôt

Caractéristiques

GitHub Actions

Jenkins

CircleCI

GitLab CI/CD

Runners

Hébergés / Auto-hébergés

Serveurs Jenkins

Hébergés uniquement

Hébergés / Auto-hébergés

Marketplace

Oui, avec actions

Plugins Jenkins

Oui

Oui


Conclusion

GitHub Actions est une plateforme puissante pour automatiser vos pipelines CI/CD directement au sein de GitHub. Grâce à son intégration transparente, sa flexibilité et ses nombreux outils disponibles, GitHub Actions simplifie l’automatisation des workflows pour les développeurs tout en restant adaptable aux besoins spécifiques de chaque projet. Que ce soit pour un petit projet ou pour une grande infrastructure DevOps, GitHub Actions constitue une solution robuste et évolutive.