www.eleven-labs.com
Intégration continue avec Gitlab CI
Factory
Vincent Composieux
Twitter : @vcomposieux
Qu’est-ce que l’intégration continue ?
« L'intégration continue est un ensemble de
pratiques utilisées en génie logiciel consistant à
vérifier à chaque modification de code source que le
résultat des modifications ne produit
pas de régression dans l'application développée. »
Source : https://fr.wikipedia.org/wiki/Int%C3%A9gration_continue
Qu’est-ce que le déploiement continu ?
Le déploiement continu est une approche de génie
logiciel dans lequel les équipes produisent des
logiciels dans des cycles courts et veille à ce que le
logiciel soit fiable à tout moment.
Il vise à la construction, les essais et la diffusion des
logiciels plus rapidement et plus fréquemment.
Source : https://en.wikipedia.org/wiki/Continuous_delivery
Orchestrateur de tâches
Intégration continue via plugins
Intégration continue
Déploiement continu
Gestion du code source
Intégration continue
Déploiement continu
Collaboration entre les dev
Dashboard pour les issues
{
$129 / mois
CONTEXTE
UN PEU DE
Architecture
RECETTE
GITLAB
PRODUCTION
DEPLOIEMENT
MANUEL
DEPLOIEMENT
AUTO
(Work|Git)flow de travail
MASTER
DEVELOP
FEATURE 1
FEATURE 2
Merge request
{
Nouvelles
fonctionnalités
Production
Recette
Flux d’échanges
UTILISATEUR GITLAB RUNNER RECETTE
Création merge
request
Exécution pipeline
Résultat
Merge
Exécution pipeline Déploiement
GITLAB CI
TO INFINITY AND
Infrastructure Gitlab CI
SERVEUR 1
GITLAB
SERVEUR 1
SERVEUR 3
CI
TOKEN
OU
php:5.6
php:7.0
redis:latest
…
Ajouter des runners Gitlab CI
Disponible sous Linux, Mac OS, Windows ou Docker
$ sudo gitlab-ci-multi-runner register 
--url "https://gitlab.com/" 
--registration-token "PROJECT_REGISTRATION_TOKEN" 
--description "docker-php-7.0" 
--executor docker 
--docker-image php:7.0
… much more
Pipeline CI de merge request valide✅
composer install
npm install
…
phpunit
jasmine
…
SKIPPED
Pipeline CI de merge request invalide❌
composer install
npm install
…
phpunit
jasmine
…
SKIPPED
image: php:7.0
stages:
- build
- test
- notify
- deploy
Récupère l’image php:7.0 sur Docker hub
Exécutés dans l’ordre défini
Exécuté lors du merge (develop) ou
manuellement (production)
{ Exécutés lors d’une merge request
gitlab-ci.yml
build:
stage: build
before_script:
- bash ci/build-install.sh >
/dev/null
script:
- make build
artifacts:
paths:
- bin/
- vendor/
Build
Nom de la tâche
Nom du stage
Script d’installation du container
Tâche du Makefile ( ) exécutée
{ Ces répertoires seront récupérés
dans les stages suivantes
test:
stage: test
before_script:
- bash ci/test-install.sh > /dev/null
script:
- make test
except:
- master
- develop
when: on_success
artifacts:
paths:
- ./
Installation de xdebug pour les
rapports PHPUnit, …
{
Cette tâche ne se déclenchera pas
sur les branches master et develop
(mais se déclenchera sur les
branches des merge requests)
Les tests sont exécutés uniquement
si le build du projet n’a pas échoué
Test
notify:test:success:
stage: notify
before_script:
- bash ci/notify-install.sh > /dev/null
script:
- make notify-merge-request-success
when: on_success
notify:test:failure:
stage: notify
before_script:
- bash ci/notify-install.sh > /dev/null
script:
- make notify-merge-request-failure
when: on_failure
Notification en cas de succès des tests
Notification en cas d’échec des tests
Notify
Notification sur merge request
SUCCESS
FAIL
Instance web d’une merge request
SERVEUR
NGINX
hook.php
Requête HTTP
(job Notify)
Récupération artifact
server {
server_name ~^(?<subdomain>.+).test-ci.composieux.fr$;
root /var/www/test-ci/$subdomain;
…
deploy:recette:
stage: deploy
script:
- make deploy-recette
environment: recette
only:
- develop
when: on_success
Déploiement automatique sur la recette
lors du merge d’une nouvelle
fonctionnalité
Déploiement si build réussi uniquement
Deploy
deploy:production:
stage: deploy
before_script:
- bash ci/deploy-install.sh > /dev/
null
script:
- make merge-master
- make deploy-production
environment: production
only:
- develop
when: manual
Merge sur la branche master
puis
déploiement en production
Déploiement manuel
seulement
{
Deploy
ASTUCES
#PROTIPS
composer config cache-files-dir .composercache
cache:
paths:
- .composercache/
Composer
Cache les dépendances composer
entre les builds
À exécuter dans le container
deploy:recette:
before_script:
- 'which ssh-agent || ( apt-get update -y && apt-get install openssh-client -y )'
- eval $(ssh-agent -s)
- ssh-add <(echo "$SSH_PRIVATE_KEY")
- mkdir -p ~/.ssh
- '[[ -f /.dockerenv ]] && echo -e "Host *ntStrictHostKeyChecking nonn" >
~/.ssh/config’
script:
- ssh eleven-labs.com
Partager sa clé SSH avec les runners
À ajouter dans les variables du projet
Idéalement, mettre tout ceci dans le Makefile
Obtenir l’identifiant de la MR en cours …
curl -s -H "PRIVATE-TOKEN: $CI_API_TOKEN"
https://gitlab.com/api/v3/projects/$$CI_PROJECT_ID/merge_requests?state=opened
| jq '.[] | select(.source_branch|contains("$(shell echo $CI_BUILD_REF_NAME)")) | .id'
Token du compte @wilson-ci
Nom de la branche source de la merge request
Déclencher des builds CI via les « Triggers »
Disponible pour chaque projet dans « Triggers »
curl -X POST 
-F token=TOKEN 
-F ref=REF_NAME 
https://gitlab.com/api/v3/projects/PROJECT_ID/trigger/builds
Nom de la branche à builder
job:
variables:
CI_DEBUG_TRACE: "true"
Nouveautés Gitlab CI 8.13
Pour débuguer les commandes shell, lister les variables, …
job:
variables:
GIT_STRATEGY:
none
Pour désactiver les opérations Git lorsque non nécessaire
(par exemple : déploiements via artifacts)
Conclusion
• Le module CI de Gitlab est un outil très complet
• « Pipeline simple » facile à mettre en place
• « Pipeline complexe » demande du code supplémentaire et
d’implémenter des webhooks / triggers
• CI sur merge requests demande d’être amélioré
DEMO
RENDEZ-VOUS AU WORKSHOP
MERCI

Contenu connexe

PDF
Métriques de qualité logicielle
PDF
Rapport de projet_de_fin_d__tudes__pfe__safwen (8)
PPTX
Intégration de SonarQube dans GitLab ci
PDF
Pipeline Devops - Intégration continue : ansible, jenkins, docker, jmeter...
PDF
DevOps avec Ansible et Docker
PDF
PDF
Rapport Projet Fin d'Études PFE
PDF
Introduction à DevOps
Métriques de qualité logicielle
Rapport de projet_de_fin_d__tudes__pfe__safwen (8)
Intégration de SonarQube dans GitLab ci
Pipeline Devops - Intégration continue : ansible, jenkins, docker, jmeter...
DevOps avec Ansible et Docker
Rapport Projet Fin d'Études PFE
Introduction à DevOps

Tendances (20)

PDF
Intégration continue et déploiement continue avec Jenkins
PPTX
PDF
Midi technique - présentation docker
PDF
Support POO Java première partie
PPTX
Présentation DEVOPS.pptx
PDF
Architecture microservices avec docker
PPTX
Presentation DevOps : enjeux , objectifs, consequences
PPTX
[FR] Présentatation d'Ansible
PDF
Cours Devops Sparks.pptx.pdf
PPTX
PrésentationCI_CD.pptx
PDF
TFE - Sécurité des architectures en conteneurs Docker orchestrés par Kubernetes
PDF
Tadx - Présentation Conteneurisation
PPTX
Présentation Git & GitHub
PDF
Support JEE Servlet Jsp MVC M.Youssfi
PPTX
Gitlab CI/CD
PDF
Introduction to Docker storage, volume and image
PPTX
Architectures n-tiers
PDF
DevOps 3 - Docker.pdf
PDF
Jenkins Pipelines
Intégration continue et déploiement continue avec Jenkins
Midi technique - présentation docker
Support POO Java première partie
Présentation DEVOPS.pptx
Architecture microservices avec docker
Presentation DevOps : enjeux , objectifs, consequences
[FR] Présentatation d'Ansible
Cours Devops Sparks.pptx.pdf
PrésentationCI_CD.pptx
TFE - Sécurité des architectures en conteneurs Docker orchestrés par Kubernetes
Tadx - Présentation Conteneurisation
Présentation Git & GitHub
Support JEE Servlet Jsp MVC M.Youssfi
Gitlab CI/CD
Introduction to Docker storage, volume and image
Architectures n-tiers
DevOps 3 - Docker.pdf
Jenkins Pipelines
Publicité

En vedette (12)

PPTX
PDF
Representation of People Amendment Bill 2016
PDF
Corinium museum objects
DOCX
cuento en nahuatl
DOCX
Resumen de e comerce infografia
PDF
Kaura on Suomen tärkein vientivilja, Ilkka Pekkala K-Maatalous
PPT
Produzeni boravak drugog razreda 2016.
PDF
Jenkins vs GitLab CI
PPT
Пісня живе серед нас
PPTX
Diapositivas Presupuesto de capital, Riesgo y Rendimiento
PDF
Foxx slimme deursystemen
PPTX
آموزش Php
Representation of People Amendment Bill 2016
Corinium museum objects
cuento en nahuatl
Resumen de e comerce infografia
Kaura on Suomen tärkein vientivilja, Ilkka Pekkala K-Maatalous
Produzeni boravak drugog razreda 2016.
Jenkins vs GitLab CI
Пісня живе серед нас
Diapositivas Presupuesto de capital, Riesgo y Rendimiento
Foxx slimme deursystemen
آموزش Php
Publicité

Similaire à Gitlab CI : Integration et Déploiement Continue (20)

PDF
Intégration continue des projets PHP avec Jenkins
PDF
Chaine de production pipeline
PDF
WordCamp Lyon 2015 - WordPress, Git et l'intégration continue
PDF
Jenkins Workflow
PDF
Intégration Continue PHP avec Jenkins CI
PDF
Spring Boot & Containers - Do's & Don'ts
PPT
Usine logicielle à Orange Labs
KEY
Build automatique et distribution OTA avec Xcode 4.x et Jenkins
PDF
Jenkins DevOps 1-Introduction DevOps 1-Introduction
PDF
Introduction à SBT
PDF
Configurer GitHub Actions avec Docker et DotNET 8.pdf
PPTX
Les méthodes agiles dans TFS
PDF
Industrialisation PHP - Canal+
PPTX
Python application packaging @ MeilleursAgents
PPT
Concept de l’Intégration Continue
PPT
Node, Grunt et leurs copains qui font de l’accessibilité tout seuls !
PPTX
CodeBuilder_DevOpsCenter.pptx
PPT
20091020 - Normandy Jug - Builders Battle
PDF
Être productif avec JHipster - Devoxx France 2017
PPTX
Apache flink - prise en main rapide
Intégration continue des projets PHP avec Jenkins
Chaine de production pipeline
WordCamp Lyon 2015 - WordPress, Git et l'intégration continue
Jenkins Workflow
Intégration Continue PHP avec Jenkins CI
Spring Boot & Containers - Do's & Don'ts
Usine logicielle à Orange Labs
Build automatique et distribution OTA avec Xcode 4.x et Jenkins
Jenkins DevOps 1-Introduction DevOps 1-Introduction
Introduction à SBT
Configurer GitHub Actions avec Docker et DotNET 8.pdf
Les méthodes agiles dans TFS
Industrialisation PHP - Canal+
Python application packaging @ MeilleursAgents
Concept de l’Intégration Continue
Node, Grunt et leurs copains qui font de l’accessibilité tout seuls !
CodeBuilder_DevOpsCenter.pptx
20091020 - Normandy Jug - Builders Battle
Être productif avec JHipster - Devoxx France 2017
Apache flink - prise en main rapide

Dernier (8)

PPT
Pratiques des systèmes d'information ppt
PDF
Démystification des QR codes - histoire - utilisations - techniques
PPTX
Projet de Fin d’Études – Plateforme FMS pour la Gestion des FCPR
PDF
1.3.4-Handling-and-Safety-Instructions-FR-2024.pdf
PDF
SHAKA 2025 - Création d'Images en IA : Mode Expert Activé
PPTX
843555943-Introduction-a-l-Intelligence-Artificielle.pptx
PDF
Utilisation de la gestion des ressources dans SAP Extended Warehouse Manageme...
PDF
Gestion de la main-d’œuvre dans SAP Extended Warehouse Management, EWM125 Col26
Pratiques des systèmes d'information ppt
Démystification des QR codes - histoire - utilisations - techniques
Projet de Fin d’Études – Plateforme FMS pour la Gestion des FCPR
1.3.4-Handling-and-Safety-Instructions-FR-2024.pdf
SHAKA 2025 - Création d'Images en IA : Mode Expert Activé
843555943-Introduction-a-l-Intelligence-Artificielle.pptx
Utilisation de la gestion des ressources dans SAP Extended Warehouse Manageme...
Gestion de la main-d’œuvre dans SAP Extended Warehouse Management, EWM125 Col26

Gitlab CI : Integration et Déploiement Continue

  • 1. www.eleven-labs.com Intégration continue avec Gitlab CI Factory Vincent Composieux Twitter : @vcomposieux
  • 2. Qu’est-ce que l’intégration continue ? « L'intégration continue est un ensemble de pratiques utilisées en génie logiciel consistant à vérifier à chaque modification de code source que le résultat des modifications ne produit pas de régression dans l'application développée. » Source : https://fr.wikipedia.org/wiki/Int%C3%A9gration_continue
  • 3. Qu’est-ce que le déploiement continu ? Le déploiement continu est une approche de génie logiciel dans lequel les équipes produisent des logiciels dans des cycles courts et veille à ce que le logiciel soit fiable à tout moment. Il vise à la construction, les essais et la diffusion des logiciels plus rapidement et plus fréquemment. Source : https://en.wikipedia.org/wiki/Continuous_delivery
  • 4. Orchestrateur de tâches Intégration continue via plugins Intégration continue Déploiement continu Gestion du code source Intégration continue Déploiement continu Collaboration entre les dev Dashboard pour les issues { $129 / mois
  • 7. (Work|Git)flow de travail MASTER DEVELOP FEATURE 1 FEATURE 2 Merge request { Nouvelles fonctionnalités Production Recette
  • 8. Flux d’échanges UTILISATEUR GITLAB RUNNER RECETTE Création merge request Exécution pipeline Résultat Merge Exécution pipeline Déploiement
  • 10. Infrastructure Gitlab CI SERVEUR 1 GITLAB SERVEUR 1 SERVEUR 3 CI TOKEN OU php:5.6 php:7.0 redis:latest …
  • 11. Ajouter des runners Gitlab CI Disponible sous Linux, Mac OS, Windows ou Docker $ sudo gitlab-ci-multi-runner register --url "https://gitlab.com/" --registration-token "PROJECT_REGISTRATION_TOKEN" --description "docker-php-7.0" --executor docker --docker-image php:7.0 … much more
  • 12. Pipeline CI de merge request valide✅ composer install npm install … phpunit jasmine … SKIPPED
  • 13. Pipeline CI de merge request invalide❌ composer install npm install … phpunit jasmine … SKIPPED
  • 14. image: php:7.0 stages: - build - test - notify - deploy Récupère l’image php:7.0 sur Docker hub Exécutés dans l’ordre défini Exécuté lors du merge (develop) ou manuellement (production) { Exécutés lors d’une merge request gitlab-ci.yml
  • 15. build: stage: build before_script: - bash ci/build-install.sh > /dev/null script: - make build artifacts: paths: - bin/ - vendor/ Build Nom de la tâche Nom du stage Script d’installation du container Tâche du Makefile ( ) exécutée { Ces répertoires seront récupérés dans les stages suivantes
  • 16. test: stage: test before_script: - bash ci/test-install.sh > /dev/null script: - make test except: - master - develop when: on_success artifacts: paths: - ./ Installation de xdebug pour les rapports PHPUnit, … { Cette tâche ne se déclenchera pas sur les branches master et develop (mais se déclenchera sur les branches des merge requests) Les tests sont exécutés uniquement si le build du projet n’a pas échoué Test
  • 17. notify:test:success: stage: notify before_script: - bash ci/notify-install.sh > /dev/null script: - make notify-merge-request-success when: on_success notify:test:failure: stage: notify before_script: - bash ci/notify-install.sh > /dev/null script: - make notify-merge-request-failure when: on_failure Notification en cas de succès des tests Notification en cas d’échec des tests Notify
  • 18. Notification sur merge request SUCCESS FAIL
  • 19. Instance web d’une merge request SERVEUR NGINX hook.php Requête HTTP (job Notify) Récupération artifact server { server_name ~^(?<subdomain>.+).test-ci.composieux.fr$; root /var/www/test-ci/$subdomain; …
  • 20. deploy:recette: stage: deploy script: - make deploy-recette environment: recette only: - develop when: on_success Déploiement automatique sur la recette lors du merge d’une nouvelle fonctionnalité Déploiement si build réussi uniquement Deploy
  • 21. deploy:production: stage: deploy before_script: - bash ci/deploy-install.sh > /dev/ null script: - make merge-master - make deploy-production environment: production only: - develop when: manual Merge sur la branche master puis déploiement en production Déploiement manuel seulement { Deploy
  • 23. composer config cache-files-dir .composercache cache: paths: - .composercache/ Composer Cache les dépendances composer entre les builds À exécuter dans le container
  • 24. deploy:recette: before_script: - 'which ssh-agent || ( apt-get update -y && apt-get install openssh-client -y )' - eval $(ssh-agent -s) - ssh-add <(echo "$SSH_PRIVATE_KEY") - mkdir -p ~/.ssh - '[[ -f /.dockerenv ]] && echo -e "Host *ntStrictHostKeyChecking nonn" > ~/.ssh/config’ script: - ssh eleven-labs.com Partager sa clé SSH avec les runners À ajouter dans les variables du projet Idéalement, mettre tout ceci dans le Makefile
  • 25. Obtenir l’identifiant de la MR en cours … curl -s -H "PRIVATE-TOKEN: $CI_API_TOKEN" https://gitlab.com/api/v3/projects/$$CI_PROJECT_ID/merge_requests?state=opened | jq '.[] | select(.source_branch|contains("$(shell echo $CI_BUILD_REF_NAME)")) | .id' Token du compte @wilson-ci Nom de la branche source de la merge request
  • 26. Déclencher des builds CI via les « Triggers » Disponible pour chaque projet dans « Triggers » curl -X POST -F token=TOKEN -F ref=REF_NAME https://gitlab.com/api/v3/projects/PROJECT_ID/trigger/builds Nom de la branche à builder
  • 27. job: variables: CI_DEBUG_TRACE: "true" Nouveautés Gitlab CI 8.13 Pour débuguer les commandes shell, lister les variables, … job: variables: GIT_STRATEGY: none Pour désactiver les opérations Git lorsque non nécessaire (par exemple : déploiements via artifacts)
  • 28. Conclusion • Le module CI de Gitlab est un outil très complet • « Pipeline simple » facile à mettre en place • « Pipeline complexe » demande du code supplémentaire et d’implémenter des webhooks / triggers • CI sur merge requests demande d’être amélioré
  • 29. DEMO