Aller au contenu principal

CI/CD

Objectifs

  • Comprendre les concepts de CI/CD
  • Comprendre les concepts de GitLab CI/CD

Cours

CI/CD

DevOps

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

https://www.redhat.com/fr/topics/devops/what-is-ci-cd

CI/CD

https://www.atlassian.com/continuous-delivery/principles/continuous-integration-vs-delivery-vs-deployment

CI/CD

Outils

  • Jenkins

    • Open source & on-premise

    • Jobs lancés sur un serveur (maintenant aussi possible sur un container)

  • GitHub Actions

    • Intégré à GitHub

  • GitLab CI/CD

    • 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

  • 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

  • Job artifacts

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

  • DRY = Don't Repeat Yourself

  • Pour réutiliser des pipelines

  • extends pour réutiliser un job (de la même pipeline)

  • YAML anchors

  • include pour réutiliser un fichier externe

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

  • GitLab Runner

Référence

https://docs.gitlab.com/ee/ci/yaml/

F pour passer en plein écran ou O pour afficher la vue d'ensemble.
Versions sans animation, plein écran, imprimable.

Références