SlideShare uma empresa Scribd logo
1 de 30
Baixar para ler offline
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

Mais conteúdo relacionado

Mais procurados

Midi technique - présentation docker
Midi technique - présentation dockerMidi technique - présentation docker
Midi technique - présentation dockerOlivier Eeckhoutte
 
CI/CD Overview
CI/CD OverviewCI/CD Overview
CI/CD OverviewAn Nguyen
 
Présentation du DevOps
Présentation du DevOpsPrésentation du DevOps
Présentation du DevOpsCyrielle Orban
 
Intégration continue
Intégration continueIntégration continue
Intégration continueKlee Group
 
Organiser son CI/CD - présentation
Organiser son CI/CD - présentation Organiser son CI/CD - présentation
Organiser son CI/CD - présentation Julien Garderon
 
Livraison en continue avec l'outillage devops - Jenkins, Ansible, Docker et ...
Livraison en continue avec l'outillage devops - Jenkins, Ansible, Docker et  ...Livraison en continue avec l'outillage devops - Jenkins, Ansible, Docker et  ...
Livraison en continue avec l'outillage devops - Jenkins, Ansible, Docker et ...Jasmine Conseil
 
Introduction à la démarche Devops
Introduction à la démarche DevopsIntroduction à la démarche Devops
Introduction à la démarche DevopsRomain Chalumeau
 
Cours Devops Sparks.pptx.pdf
Cours Devops Sparks.pptx.pdfCours Devops Sparks.pptx.pdf
Cours Devops Sparks.pptx.pdfboulonvert
 
DevOps avec Ansible et Docker
DevOps avec Ansible et DockerDevOps avec Ansible et Docker
DevOps avec Ansible et DockerStephane Manciot
 
Journée DevOps : La boite à outil d'une équipe DevOps
Journée DevOps : La boite à outil d'une équipe DevOpsJournée DevOps : La boite à outil d'une équipe DevOps
Journée DevOps : La boite à outil d'une équipe DevOpsPublicis Sapient Engineering
 
Devops - vision et pratiques
Devops - vision et pratiquesDevops - vision et pratiques
Devops - vision et pratiquesJoseph Glorieux
 
GitLab for CI/CD process
GitLab for CI/CD processGitLab for CI/CD process
GitLab for CI/CD processHYS Enterprise
 
CI-Jenkins.pptx
CI-Jenkins.pptxCI-Jenkins.pptx
CI-Jenkins.pptxMEDOBEST1
 
Présentation docker et kubernetes
Présentation docker et kubernetesPrésentation docker et kubernetes
Présentation docker et kubernetesKiwi Backup
 
A la découverte de kubernetes
A la découverte de kubernetesA la découverte de kubernetes
A la découverte de kubernetesJulien Maitrehenry
 
Continuous Integration, Build Pipelines and Continuous Deployment
Continuous Integration, Build Pipelines and Continuous DeploymentContinuous Integration, Build Pipelines and Continuous Deployment
Continuous Integration, Build Pipelines and Continuous DeploymentChristopher Read
 

Mais procurados (20)

Midi technique - présentation docker
Midi technique - présentation dockerMidi technique - présentation docker
Midi technique - présentation docker
 
CI/CD Overview
CI/CD OverviewCI/CD Overview
CI/CD Overview
 
Présentation du DevOps
Présentation du DevOpsPrésentation du DevOps
Présentation du DevOps
 
Intégration continue
Intégration continueIntégration continue
Intégration continue
 
kubernetes, pourquoi et comment
kubernetes, pourquoi et commentkubernetes, pourquoi et comment
kubernetes, pourquoi et comment
 
DEVOPS
DEVOPSDEVOPS
DEVOPS
 
Organiser son CI/CD - présentation
Organiser son CI/CD - présentation Organiser son CI/CD - présentation
Organiser son CI/CD - présentation
 
Présentation Docker
Présentation DockerPrésentation Docker
Présentation Docker
 
Livraison en continue avec l'outillage devops - Jenkins, Ansible, Docker et ...
Livraison en continue avec l'outillage devops - Jenkins, Ansible, Docker et  ...Livraison en continue avec l'outillage devops - Jenkins, Ansible, Docker et  ...
Livraison en continue avec l'outillage devops - Jenkins, Ansible, Docker et ...
 
Introduction à la démarche Devops
Introduction à la démarche DevopsIntroduction à la démarche Devops
Introduction à la démarche Devops
 
Cours Devops Sparks.pptx.pdf
Cours Devops Sparks.pptx.pdfCours Devops Sparks.pptx.pdf
Cours Devops Sparks.pptx.pdf
 
DevOps avec Ansible et Docker
DevOps avec Ansible et DockerDevOps avec Ansible et Docker
DevOps avec Ansible et Docker
 
DevOps 3 - Docker.pdf
DevOps 3 - Docker.pdfDevOps 3 - Docker.pdf
DevOps 3 - Docker.pdf
 
Journée DevOps : La boite à outil d'une équipe DevOps
Journée DevOps : La boite à outil d'une équipe DevOpsJournée DevOps : La boite à outil d'une équipe DevOps
Journée DevOps : La boite à outil d'une équipe DevOps
 
Devops - vision et pratiques
Devops - vision et pratiquesDevops - vision et pratiques
Devops - vision et pratiques
 
GitLab for CI/CD process
GitLab for CI/CD processGitLab for CI/CD process
GitLab for CI/CD process
 
CI-Jenkins.pptx
CI-Jenkins.pptxCI-Jenkins.pptx
CI-Jenkins.pptx
 
Présentation docker et kubernetes
Présentation docker et kubernetesPrésentation docker et kubernetes
Présentation docker et kubernetes
 
A la découverte de kubernetes
A la découverte de kubernetesA la découverte de kubernetes
A la découverte de kubernetes
 
Continuous Integration, Build Pipelines and Continuous Deployment
Continuous Integration, Build Pipelines and Continuous DeploymentContinuous Integration, Build Pipelines and Continuous Deployment
Continuous Integration, Build Pipelines and Continuous Deployment
 

Destaque

Representation of People Amendment Bill 2016
Representation of People Amendment Bill 2016Representation of People Amendment Bill 2016
Representation of People Amendment Bill 2016Rohit Sachdeva
 
Corinium museum objects
Corinium museum objectsCorinium museum objects
Corinium museum objectsBibracte_Refit
 
cuento en nahuatl
cuento en nahuatlcuento en nahuatl
cuento en nahuatlpynguyna
 
Resumen de e comerce infografia
Resumen de e comerce infografiaResumen de e comerce infografia
Resumen de e comerce infografiaAngel Rene
 
Kaura on Suomen tärkein vientivilja, Ilkka Pekkala K-Maatalous
Kaura on Suomen tärkein vientivilja, Ilkka Pekkala K-MaatalousKaura on Suomen tärkein vientivilja, Ilkka Pekkala K-Maatalous
Kaura on Suomen tärkein vientivilja, Ilkka Pekkala K-MaatalousYara Suomi
 
Produzeni boravak drugog razreda 2016.
Produzeni boravak drugog razreda 2016.Produzeni boravak drugog razreda 2016.
Produzeni boravak drugog razreda 2016.dejanoviskolarci
 
Jenkins vs GitLab CI
Jenkins vs GitLab CIJenkins vs GitLab CI
Jenkins vs GitLab CICEE-SEC(R)
 
Diapositivas Presupuesto de capital, Riesgo y Rendimiento
Diapositivas Presupuesto de capital, Riesgo y RendimientoDiapositivas Presupuesto de capital, Riesgo y Rendimiento
Diapositivas Presupuesto de capital, Riesgo y Rendimientoanayra roman
 
Foxx slimme deursystemen
Foxx slimme deursystemenFoxx slimme deursystemen
Foxx slimme deursystemenMike de Graaf
 
آموزش Php
آموزش Phpآموزش Php
آموزش Phpaminifar
 

Destaque (12)

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

Semelhante a Gitlab CI : Integration et Déploiement Continue

Intégration continue des projets PHP avec Jenkins
Intégration continue des projets PHP avec JenkinsIntégration continue des projets PHP avec Jenkins
Intégration continue des projets PHP avec JenkinsHugo Hamon
 
Chaine de production pipeline
Chaine de production   pipelineChaine de production   pipeline
Chaine de production pipelineNicolas wallerand
 
WordCamp Lyon 2015 - WordPress, Git et l'intégration continue
 WordCamp Lyon 2015 - WordPress, Git et l'intégration continue WordCamp Lyon 2015 - WordPress, Git et l'intégration continue
WordCamp Lyon 2015 - WordPress, Git et l'intégration continueStéphane HULARD
 
Intégration Continue PHP avec Jenkins CI
Intégration Continue PHP avec Jenkins CIIntégration Continue PHP avec Jenkins CI
Intégration Continue PHP avec Jenkins CIHugo Hamon
 
Spring Boot & Containers - Do's & Don'ts
Spring Boot & Containers - Do's & Don'tsSpring Boot & Containers - Do's & Don'ts
Spring Boot & Containers - Do's & Don'tsJulien Wittouck
 
Usine logicielle à Orange Labs
Usine logicielle à Orange LabsUsine logicielle à Orange Labs
Usine logicielle à Orange LabsEmmanuel Hugonnet
 
Build automatique et distribution OTA avec Xcode 4.x et Jenkins
Build automatique et distribution OTA avec Xcode 4.x et JenkinsBuild automatique et distribution OTA avec Xcode 4.x et Jenkins
Build automatique et distribution OTA avec Xcode 4.x et JenkinsCocoaHeads France
 
Introduction à SBT
Introduction à SBTIntroduction à SBT
Introduction à SBTJean Detoeuf
 
Configurer GitHub Actions avec Docker et DotNET 8.pdf
Configurer GitHub Actions avec Docker et DotNET 8.pdfConfigurer GitHub Actions avec Docker et DotNET 8.pdf
Configurer GitHub Actions avec Docker et DotNET 8.pdfHamida Rebai Trabelsi
 
Les méthodes agiles dans TFS
Les méthodes agiles dans TFSLes méthodes agiles dans TFS
Les méthodes agiles dans TFSDenis Voituron
 
Industrialisation PHP - Canal+
Industrialisation PHP - Canal+Industrialisation PHP - Canal+
Industrialisation PHP - Canal+ekino
 
Python application packaging @ MeilleursAgents
Python application packaging @ MeilleursAgentsPython application packaging @ MeilleursAgents
Python application packaging @ MeilleursAgentsNicolas Mussat
 
Concept de l’Intégration Continue
Concept de l’Intégration ContinueConcept de l’Intégration Continue
Concept de l’Intégration ContinueFrédéric Sagez
 
Node, Grunt et leurs copains qui font de l’accessibilité tout seuls !
Node, Grunt et leurs copains qui font de l’accessibilité tout seuls !Node, Grunt et leurs copains qui font de l’accessibilité tout seuls !
Node, Grunt et leurs copains qui font de l’accessibilité tout seuls !vincent aniort
 
CodeBuilder_DevOpsCenter.pptx
CodeBuilder_DevOpsCenter.pptxCodeBuilder_DevOpsCenter.pptx
CodeBuilder_DevOpsCenter.pptxThomasParaiso1
 
20091020 - Normandy Jug - Builders Battle
20091020 - Normandy Jug - Builders Battle20091020 - Normandy Jug - Builders Battle
20091020 - Normandy Jug - Builders BattleArnaud Héritier
 
Être productif avec JHipster - Devoxx France 2017
Être productif avec JHipster - Devoxx France 2017Être productif avec JHipster - Devoxx France 2017
Être productif avec JHipster - Devoxx France 2017Julien Dubois
 
Apache flink - prise en main rapide
Apache flink - prise en main rapideApache flink - prise en main rapide
Apache flink - prise en main rapideBilal Baltagi
 
20081008 - Tours Jug - Apache Maven
20081008  - Tours Jug - Apache Maven20081008  - Tours Jug - Apache Maven
20081008 - Tours Jug - Apache MavenArnaud Héritier
 

Semelhante a Gitlab CI : Integration et Déploiement Continue (20)

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

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