Pourquoi apprendre Github Actions en 2024 ?

Qu'est-ce que le DevOps ?

"Devops" est la concaténation des trois premières lettres du mot anglais development (développement) et de l'abréviation ops du mot anglais operations (exploitation).

C'est un terme qui a été inventé par le belge Patrick Debois en 2007.

Le DevOps est un ensemble de pratiques qui visent à réduire le fossé entre le développement logiciel (Dev) et les opérations informatiques (Ops), d'où le terme.

L'idée est de favoriser une collaboration plus étroite et une meilleure communication entre ces deux entités qui, dans les modèles traditionnels, opèrent souvent de manière isolée.

Les principes clés du DevOps comprennent aujourd'hui :

  • l'intégration continue (CI pour continuous integration en anglais - le code est régulièrement fusionné et testé), 
  • la livraison continue (CD pour continuous delivery - les mises à jour du logiciel sont régulièrement libérées pour la production),
  • l'infrastructure en tant que code (la gestion et la provision des infrastructures informatiques via le code),
  • la surveillance et la journalisation (le suivi en temps réel de la performance et des erreurs du logiciel)
  • la culture de la rétroaction (l'encouragement à l'amélioration constante via les retours d'information)

Le schéma classique est celui-ci :

 Outils DevOps principaux

1 - Planification et collaboration :

Ces outils permettent de créer des tâches et de gérer un projet. Les plus utilisés sont :

  • Gitlab
  • Github
  • Jira

2 - Gestion du code (développement)

Ces outils permettent d'effectuer un contrôle de version du code. Les plus utilisés sont :

  • GitHub
  • GitLab
  • Bitbucket

3 - Intégration Continue / Déploiement Continu (CI/CD) :

Ces outils surveillent les commits dans votre dépôt par exemple Github. Lorsqu'un commit est effectué, ils lancent automatiquement un "pipeline" d'intégration continue qui peut compiler le code, exécuter des tests unitaires, des tests d'intégration, et d'autres types de tests pour s'assurer que les dernières modifications n'ont pas introduit de bugs.

Si tous les tests passent, ces outils peuvent être configurés pour déployer automatiquement les changements sur un environnement de production, de staging ou de test. Cela accélère le processus de livraison de nouvelles fonctionnalités et de corrections de bugs.

Des solutions très connues sont :

  • Jenkins
  • GitLab CI/CD
  • Github actions
  • AWS CodePipeline
  • Azure DevOps
  • CircleCI
  • Travis CI

4 - Gestion de l'infrastructure :

Ces outils permettent de faire des choses très différentes mais concernent les serveurs et les clusters.

Nous pouvons citer quelques exemples :

  • Docker : pour créer des images et ensuite les exécuter dans des conteneurs sur un cluster.
  • Docker Hub (ou tout autre Container Registry - il y en a plusieurs dizaines) : plateforme de service cloud qui permet aux développeurs de stocker et d'utiliser des images d'applications conteneurisées.
  • Kubernetes : plateforme qui automatise la déploiement, la mise à l'échelle et la gestion des applications conteneurisées, offrant un cadre pour orchestrer et coordonner des conteneurs au sein d'un environnement de cloud.
  • Terraform : outil d'Infrastructure as Code (IaC) open source qui permet aux développeurs de définir et de fournir des infrastructures de centres de données en utilisant un langage de description déclaratif, facilitant ainsi la gestion et l'orchestration des ressources cloud.
  • Ansible : outil d'automatisation open source qui permet la gestion de configuration, le déploiement d'applications et l'orchestration de tâches sur une variété de systèmes et de plateformes (en résumé permet de configurer et de gérer des serveurs plus simplement).

5 - Surveillance et retour d'information :

Ces outils permettent de surveiller (monitoring) des clusters ou plus généralement des applications exécutées sur des serveurs.

Voici une liste des outils les plus courants :

  • Prometheus : système de surveillance et d'alerte qui collecte et stocke les métriques d'application et de système en temps réel, offrant des fonctionnalités de requête et d'alerte pour aider à la détection et à la résolution des problèmes.
  • Grafana : plateforme pour la visualisation et l'analyse de données, permettant aux utilisateurs de créer des tableaux de bord interactifs et compréhensibles pour surveiller et analyser en temps réel les données provenant de diverses sources, le plus souvent de Prometheus.
  • ELK Stack (Elasticsearch, Logstash, Kibana) : suite d'outils qui fournit des capacités de recherche, d'analyse, de journalisation et de visualisation de données, permettant aux utilisateurs de transformer leurs données en insights précieux.
  • Datadog / Nagios / New Relic / Sentry : plateformes de surveillance et d'analyse des performances en temps réel pour les infrastructures cloud, les applications, les journaux et les métriques, facilitant la détection des problèmes et leur résolution.

Vous pouvez retrouver tous les outils principaux utilisés avec Kubernetes ici. Ne soyez pas découragés, il n'y besoin dans la plupart des projets que de n'en connaitre vraiment que quelques-uns.

Qu'est-ce que le CI / CD ?

CI (Continuous Integration - Intégration Continue)

L'Intégration Continue (CI), est une pratique de développement logiciel dans laquelle les développeurs intègrent régulièrement leur code dans un répertoire Git. Chaque fois qu'un développeur pousse du code, une série d'automatisations est déclenchée pour compiler, tester et vérifier le code nouvellement ajouté. L'objectif principal de la CI est de détecter les problèmes d'intégration tôt et de garantir que le code nouvellement ajouté ne casse pas l'application existante.

Les étapes typiques incluent la compilation du code (build), l'exécution de tests unitaires et d'autres tests automatisés, la vérification des normes de code, la génération de rapports de test et la fourniture de commentaires rapide aux développeurs sur l'état de leur code. Dans un contexte de conteneurisation, comme avec Kubernetes, c'est également pendant l'intégration continue que sont build les images.

Les outils CI couramment utilisés incluent Jenkins, Travis CI, CircleCI, GitLab CI/CD, Github Actions, et bien d'autres.

CD (Continuous Deployment - Déploiement Continu)

Le CD, ou Déploiement Continu, est une extension de la CI qui vise à automatiser le déploiement des changements de code nouvellement validés vers les environnements de production ou de pré-production.

Contrairement à la CI qui se concentre principalement sur les builds, les tests et les vérifications, le CD s'intéresse à l'automatisation de la mise en production des changements.

Avec le CD, une fois que le code a passé avec succès les étapes de la CI et qu'il a été validé, il est automatiquement déployé dans un environnement cible, généralement à partir d'un pipeline automatisé. Le CD permet de minimiser le temps nécessaire pour mettre en production de nouvelles fonctionnalités ou des correctifs, tout en réduisant les risques liés aux déploiements manuels.

Il existe deux approches principales en matière de CD :

  1. Continuous Deployment (Déploiement Continu) : dans cette approche, chaque changement de code validé est automatiquement déployé dans l'environnement de production sans intervention humaine. Cela nécessite une confiance élevée dans l'automatisation et une solide suite de tests automatisés.
  2. Continuous Delivery (Livraison Continue) : ici, les changements de code validés sont automatiquement déployés dans un environnement de pré-production ou de staging. La décision de déployer dans l'environnement de production est prise manuellement, généralement par un responsable technique, après avoir évalué les risques.

Qu'est-ce que GitHub ?

GitHub est une plateforme de développement collaboratif conçue pour héberger, réviser, gérer et partager le code source.

Basée sur le système de gestion de versions Git, elle permet aux développeurs individuels et aux équipes de travailler ensemble sur des projets de toutes tailles.

GitHub a été lancé le 10 avril 2008. Le nom GitHub est composé du mot « git » et du mot « hub » faisant référence au réseau social bâti autour du système Git, mais aussi à une plate-forme de correspondance qui est appelée en anglais un « hub ».

En 2018, GitHub a été acquis par Microsoft.

Octocat est la mascotte de la marque :

La plateforme a dépassé les 100 millions d'utilisateurs actifs en 2023.

Fonctionnalités principales de GitHub

Gestion de version avec Git

  • Repositories Git : GitHub permet de créer des dépôts (ou repositories) pour héberger le code source de vos projets. Chaque dépôt contient l'historique complet des modifications apportées au code.
  • Branches et fusions (merges) : les branches aident à gérer différentes versions d'un projet en parallèle. Les fusions permettent d'intégrer ces versions.

Collaboration et revue de code

  • Pull Requests : mécanisme central pour proposer des changements de code et les discuter avec l'équipe avant de les intégrer dans la branche principale.
  • Issues : système de suivi des problèmes et des demandes d'améliorations.

Actions et CI/CD

  • GitHub Actions : outil d'automatisation pour créer des chaînes de CI/CD (Intégration et Déploiement Continus) directement dans vos dépôts GitHub.

Gestion de projets

  • Projets et tableaux Kanban : outils de planification et de suivi pour organiser le développement.
  • Milestones : pour suivre les progrès et planifier des versions du logiciel.

Sécurité et gestion d'accès

  • Contrôle d'Accès : gestion fine des droits d'accès aux dépôts pour les équipes.
  • Sécurité : fonctionnalités comme la revue de dépendances et les alertes de sécurité.

Intégration avec d'autres services

  • Marketplace GitHub : large éventail d'intégrations et d'outils tiers pour étendre les fonctionnalités de GitHub.

Qu'est-ce que Github Actions ?

GitHub Actions est une plateforme CI/CD qui vous permet d'automatiser différentes tâches dans votre dépôt Github.

Vous pouvez exécuter des workflows suite à des événements spécifiques ou selon une planification.

Introduction aux composants de GitHub Actions

Les composants principaux sont :

  • Event : activité spécifique dans un dépôt qui déclenche l’exécution d’un workflow.
  • Workflow : un ensemble de jobs déclenché par un événement.
  • Job : un ensemble d'étapes (steps) exécutées sur un runner.
  • Step : une action ou un script exécuté dans un job.
  • Action : une tâche réutilisable.
  • Runner : l'environnement où s'exécutent les jobs.

Événements (events)

Un event est une activité spécifique dans un dépôt qui déclenche l'exécution d'un workflow.

L'activité peut provenir de GitHub quand quelqu'un crée une pull request, ouvre une issue, ou effectue un commit dans un dépôt.

On peut aussi déclencher un workflow manuellement, à l'aide d'une API REST ou selon un calendrier (cron jobs).

Flux de travail (workflows)

Un workflow est un processus automatisé configurable qui exécute un ou plusieurs jobs.

Les workflows sont définis par un fichier au format YAML dans votre dépôt et sont déclenchés par un événement dans ce dépôt.

Les workflows se trouvent dans le répertoire .github/workflows d'un dépôt.

Un dépôt peut avoir plusieurs workflows, chacun accomplissant un ensemble de tâches différentes. Par exemple : un pour construire et tester des pull requests, un autre pour déployer une application à chaque nouvelle version, et un autre encore pour ajouter une étiquette lorsqu'une nouvelle issue est ouverte.

Tâches (jobs) et étapes (steps)

Un job est un ensemble d'étapes dans un workflow qui sont exécutées sur le même runner.

Chaque étape est soit un script shell qui sera exécuté, soit une action qui sera lancée.

Les étapes sont exécutées dans l'ordre et sont dépendantes les unes des autres. Par exemple : une étape peut construire votre application et la suivante peut la tester.

On peut configurer les dépendances entre jobs.

Par défaut, les jobs n'ont pas de dépendances et s'exécutent en parallèle. Si un job dépend d'un autre, il attendra que ce dernier se termine avant de démarrer.

Actions (actions)

Une action est une application personnalisée pour la plateforme GitHub Actions qui effectue une tâche complexe mais fréquemment répétée.

Allez voir par exemple l'action setup-node. Naviguez dans le répertoire src et constatez tout le code pour installer Node.js sur n'importe quel environnement.

Et l'utilisation sera aussi simple que :

- uses: actions/setup-node@v3
  with:
    node-version: 18

Utiliser une action permet donc de réduire de beaucoup la quantité de code répétitif dans vos fichiers de workflow.

Par exemple : récupérer votre dépôt git de GitHub, configurer la chaîne d'outils pour votre environnement de construction ou mettre en place l'authentification pour votre fournisseur de cloud.

On peut créer ses propres actions ou en trouver dans le GitHub Marketplace. Il existe un grand nombre d'actions officielles maintenues par Github (Microsoft) et encore plus d'actions maintenues par la communauté. Il y en a plus de 20 000 sur la marketplace.

Pour les partager au sein de votre entreprise sans les publier publiquement, vous pouvez les stocker dans un dépôt interne.

Exécuteurs (runners)

Un runner est un serveur qui exécute vos workflows lorsqu'ils sont déclenchés. Chaque runner peut exécuter un seul job à la fois.

Vous pouvez utiliser les runners de Github ou les vôtres (comme avec Gitlab).

Commencez notre formation sur Github Actions dès aujourd'hui !