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
pourcontinuous integration
en anglais - le code est régulièrement fusionné et testé), - la livraison continue (
CD
pourcontinuous 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 uncluster
.Docker Hub
(ou tout autreContainer Registry
- il y en a plusieurs dizaines) : plateforme de servicecloud
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 decloud
.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 ressourcescloud
.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 dePrometheus
.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 infrastructurescloud
, 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
:
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.Continuous Delivery
(Livraison Continue) : ici, les changements de code validés sont automatiquement déployés dans un environnement de pré-production ou destaging
. 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 (ourepositories
) 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 deCI/CD
(Intégration et Déploiement Continus) directement dans vos dépôtsGitHub
.
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 deGitHub
.
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’unworkflow
.Workflow
: un ensemble dejobs
déclenché par un événement.Job
: un ensemble d'étapes (steps
) exécutées sur unrunner
.Step
: uneaction
ou un script exécuté dans unjob
.Action
: une tâche réutilisable.Runner
: l'environnement où s'exécutent lesjobs
.
É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 !