CI/CD
Objectifs
- Comprendre les concepts de CI/CD
- Comprendre les concepts de GitLab CI/CD
Cours
CI/CDDevOps
CI/CD ?
CI: Continuous Integration (Intégration continue)
CD: Continuous Delivery (Distribution/Livraison continue)
CD: Continuous Deployment (Déploiement continu)
Continuous Integration
Problèmes
Plusieurs développeurs sur le même projet
Intégration des modifications dans un code commun
Intégration des services
Solution
Automatiser l'intégration
La construction/compilation (build)
Les tests
Continuous Delivery
Automatiser la distribution du logiciel
Création de l'artefact (jar, Docker image, etc.)
Publication de l'artefact (npm, pip, Docker Hub, etc.)
Continuous Deployment
Automatiser le déploiement du logiciel
Installation de l'artéfact sur l'environnement de production
Mise à jour du logiciel
CI/CD
CI/CD
CI/CD
Outils
Open source & on-premise
Jobs lancés sur un serveur (maintenant aussi possible sur un container)
Intégré à GitHub
Intégré à GitLab
GitLab CI/CD
https://docs.gitlab.com/ci/quick_start/
Pipeline
Stage (build, test, deploy, etc.)
Job contient un script exécuté par un runner dans un container
.gitlab-ci.yml
build-job:
stage: build
script:
- echo "Hello, $GITLAB_USER_LOGIN!"
test-job1:
stage: test
script:
- echo "This job tests something"
test-job2:
stage: test
script:
- echo "This job tests something, but takes more time than test-job1."
- echo "After the echo commands complete, it runs the sleep command for 20 seconds"
- echo "which simulates a test that runs 20 seconds longer than test-job1"
- sleep 20
deploy-prod:
stage: deploy
script:
- echo "This job deploys something from the $CI_COMMIT_BRANCH branch."
environment: production
Job et stage
Job définit quoi exécuter (script)
Condition avec
rules
Dépendance avec
needs
Stage définit quand exécuter un job
Ordre des stages (par défaut)
.pre
>build
>test
>deploy
>.post
Variables
Variables d'environnement injectées dans les jobs
CI_COMMIT_BRANCH
,CI_COMMIT_REF_NAME
,CI_PIPELINE_SOURCE
, etc.
Définition de ses propres variables
Trigger une pipeline
Sur un push sur une branche
Sur une merge request
Régulièrement (cron)
Webhook sur l'API
Manuellement depuis l'interface
Depuis une autre pipeline
Artefacts
Fichiers ou dossiers
À la fin de chaque job, possibilité de sauvegarder des artefacts
Possibilité de récupérer les artéfacts d'un job dans un autre
Possibilité de télécharger les artéfacts depuis l'interface
Cache
Possibilité de cacher des fichiers ou dossiers entre les exécutions d'un même job
Accélère les exécutions des jobs
Utilisé pour les dépendances (node_modules, .m2, etc.)
DRY
Runner
Un agent qui exécute les jobs sur un serveur
SaaS runners sur GitLab.com
Limité puis payant
Self-managed runners
Illimité mais à gérer
Référence
Versions sans animation, plein écran, imprimable.