SlideShare une entreprise Scribd logo
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

Tendances

Jenkins presentation
Jenkins presentationJenkins presentation
Jenkins presentation
Valentin Buryakov
 
Intégration continue et déploiement continue avec Jenkins
Intégration continue et déploiement continue avec JenkinsIntégration continue et déploiement continue avec Jenkins
Intégration continue et déploiement continue avec Jenkins
Kokou Gaglo
 
Introduction à l’intégration continue avec Jenkins
Introduction à l’intégration continue avec JenkinsIntroduction à l’intégration continue avec Jenkins
Introduction à l’intégration continue avec Jenkins
Eric Hogue
 
Jenkins CI presentation
Jenkins CI presentationJenkins CI presentation
Jenkins CI presentation
Jonathan Holloway
 
"DevOps > CI+CD "
"DevOps > CI+CD ""DevOps > CI+CD "
"DevOps > CI+CD "
Innovation Roots
 
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
Julien Wittouck
 
Appalications JEE avec Servlet/JSP
Appalications JEE avec Servlet/JSPAppalications JEE avec Servlet/JSP
Appalications JEE avec Servlet/JSP
Youness Boukouchi
 
Docker, mais qu’est-ce que c’est ?
Docker, mais qu’est-ce que c’est ?Docker, mais qu’est-ce que c’est ?
Docker, mais qu’est-ce que c’est ?
Julien Maitrehenry
 
Présentation Docker
Présentation DockerPrésentation Docker
Présentation Docker
Colin LEVERGER
 
Jenkins
JenkinsJenkins
What is Jenkins | Jenkins Tutorial for Beginners | Edureka
What is Jenkins | Jenkins Tutorial for Beginners | EdurekaWhat is Jenkins | Jenkins Tutorial for Beginners | Edureka
What is Jenkins | Jenkins Tutorial for Beginners | Edureka
Edureka!
 
DEVOPS
DEVOPSDEVOPS
DEVOPS
TayssirLimem
 
Using GitLab CI
Using GitLab CIUsing GitLab CI
Using GitLab CI
ColCh
 
CICD with Jenkins
CICD with JenkinsCICD with Jenkins
Ansible presentation
Ansible presentationAnsible presentation
Ansible presentation
Suresh Kumar
 
Automated Deployments with Ansible
Automated Deployments with AnsibleAutomated Deployments with Ansible
Automated Deployments with Ansible
Martin Etmajer
 
Formation jpa-hibernate-spring-data
Formation jpa-hibernate-spring-dataFormation jpa-hibernate-spring-data
Formation jpa-hibernate-spring-data
Lhouceine OUHAMZA
 
Jenkins Tutorial.pdf
Jenkins Tutorial.pdfJenkins Tutorial.pdf
Jenkins Tutorial.pdf
devtestervicky
 
Jenkins CI
Jenkins CIJenkins CI
Jenkins CI
Viyaan Jhiingade
 
Automatisation des tests
Automatisation des testsAutomatisation des tests
Automatisation des tests
Zhu Wei QI
 

Tendances (20)

Jenkins presentation
Jenkins presentationJenkins presentation
Jenkins presentation
 
Intégration continue et déploiement continue avec Jenkins
Intégration continue et déploiement continue avec JenkinsIntégration continue et déploiement continue avec Jenkins
Intégration continue et déploiement continue avec Jenkins
 
Introduction à l’intégration continue avec Jenkins
Introduction à l’intégration continue avec JenkinsIntroduction à l’intégration continue avec Jenkins
Introduction à l’intégration continue avec Jenkins
 
Jenkins CI presentation
Jenkins CI presentationJenkins CI presentation
Jenkins CI presentation
 
"DevOps > CI+CD "
"DevOps > CI+CD ""DevOps > CI+CD "
"DevOps > CI+CD "
 
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
 
Appalications JEE avec Servlet/JSP
Appalications JEE avec Servlet/JSPAppalications JEE avec Servlet/JSP
Appalications JEE avec Servlet/JSP
 
Docker, mais qu’est-ce que c’est ?
Docker, mais qu’est-ce que c’est ?Docker, mais qu’est-ce que c’est ?
Docker, mais qu’est-ce que c’est ?
 
Présentation Docker
Présentation DockerPrésentation Docker
Présentation Docker
 
Jenkins
JenkinsJenkins
Jenkins
 
What is Jenkins | Jenkins Tutorial for Beginners | Edureka
What is Jenkins | Jenkins Tutorial for Beginners | EdurekaWhat is Jenkins | Jenkins Tutorial for Beginners | Edureka
What is Jenkins | Jenkins Tutorial for Beginners | Edureka
 
DEVOPS
DEVOPSDEVOPS
DEVOPS
 
Using GitLab CI
Using GitLab CIUsing GitLab CI
Using GitLab CI
 
CICD with Jenkins
CICD with JenkinsCICD with Jenkins
CICD with Jenkins
 
Ansible presentation
Ansible presentationAnsible presentation
Ansible presentation
 
Automated Deployments with Ansible
Automated Deployments with AnsibleAutomated Deployments with Ansible
Automated Deployments with Ansible
 
Formation jpa-hibernate-spring-data
Formation jpa-hibernate-spring-dataFormation jpa-hibernate-spring-data
Formation jpa-hibernate-spring-data
 
Jenkins Tutorial.pdf
Jenkins Tutorial.pdfJenkins Tutorial.pdf
Jenkins Tutorial.pdf
 
Jenkins CI
Jenkins CIJenkins CI
Jenkins CI
 
Automatisation des tests
Automatisation des testsAutomatisation des tests
Automatisation des tests
 

En vedette

La temperatura
La temperaturaLa temperatura
Representation of People Amendment Bill 2016
Representation of People Amendment Bill 2016Representation of People Amendment Bill 2016
Representation of People Amendment Bill 2016
Rohit Sachdeva
 
Corinium museum objects
Corinium museum objectsCorinium museum objects
Corinium museum objects
Bibracte_Refit
 
cuento en nahuatl
cuento en nahuatlcuento en nahuatl
cuento en nahuatl
pynguyna
 
Resumen de e comerce infografia
Resumen de e comerce infografiaResumen de e comerce infografia
Resumen de e comerce infografia
Angel 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-Maatalous
Yara 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 CI
CEE-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 Rendimiento
anayra roman
 
Foxx slimme deursystemen
Foxx slimme deursystemenFoxx slimme deursystemen
Foxx slimme deursystemen
Mike de Graaf
 
آموزش Php
آموزش Phpآموزش Php
آموزش Php
aminifar
 

En vedette (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
 

Similaire à 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 pipeline
Nicolas 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 continue
Stéphane HULARD
 
Jenkins Workflow
Jenkins WorkflowJenkins Workflow
Jenkins Workflow
Jean Detoeuf
 
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
Hugo Hamon
 
Usine logicielle à Orange Labs
Usine logicielle à Orange LabsUsine logicielle à Orange Labs
Usine logicielle à Orange Labs
Emmanuel 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 Jenkins
CocoaHeads France
 
Introduction à SBT
Introduction à SBTIntroduction à SBT
Introduction à SBT
Jean 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.pdf
Hamida Rebai Trabelsi
 
Les méthodes agiles dans TFS
Les méthodes agiles dans TFSLes méthodes agiles dans TFS
Les méthodes agiles dans TFS
Denis 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 @ MeilleursAgents
Nicolas Mussat
 
Concept de l’Intégration Continue
Concept de l’Intégration ContinueConcept de l’Intégration Continue
Concept de l’Intégration Continue
Fré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.pptx
ThomasParaiso1
 
20091020 - Normandy Jug - Builders Battle
20091020 - Normandy Jug - Builders Battle20091020 - Normandy Jug - Builders Battle
20091020 - Normandy Jug - Builders Battle
Arnaud 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 2017
Julien Dubois
 
Apache flink - prise en main rapide
Apache flink - prise en main rapideApache flink - prise en main rapide
Apache flink - prise en main rapide
Bilal Baltagi
 
20081008 - Tours Jug - Apache Maven
20081008  - Tours Jug - Apache Maven20081008  - Tours Jug - Apache Maven
20081008 - Tours Jug - Apache Maven
Arnaud Héritier
 
Soiree Maven 2
Soiree Maven 2Soiree Maven 2
Soiree Maven 2
Laurent RUAUD
 

Similaire à 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
 
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
 
Soiree Maven 2
Soiree Maven 2Soiree Maven 2
Soiree Maven 2
 

Dernier

MongoDB in a scale-up: how to get away from a monolithic hell — MongoDB Paris...
MongoDB in a scale-up: how to get away from a monolithic hell — MongoDB Paris...MongoDB in a scale-up: how to get away from a monolithic hell — MongoDB Paris...
MongoDB in a scale-up: how to get away from a monolithic hell — MongoDB Paris...
Horgix
 
PRESENTATION DE L'ACTIVE DIRECTORY SOUS WINDOWS SERVEUR.pptx
PRESENTATION DE L'ACTIVE DIRECTORY SOUS WINDOWS SERVEUR.pptxPRESENTATION DE L'ACTIVE DIRECTORY SOUS WINDOWS SERVEUR.pptx
PRESENTATION DE L'ACTIVE DIRECTORY SOUS WINDOWS SERVEUR.pptx
AlbertSmithTambwe
 
Le support de présentation des Signaux 2024
Le support de présentation des Signaux 2024Le support de présentation des Signaux 2024
Le support de présentation des Signaux 2024
UNITECBordeaux
 
Les écrans informatiques au fil du temps.pptx
Les écrans informatiques au fil du temps.pptxLes écrans informatiques au fil du temps.pptx
Les écrans informatiques au fil du temps.pptx
abderrahimbourimi
 
Ouvrez la porte ou prenez un mur (Agile Tour Genève 2024)
Ouvrez la porte ou prenez un mur (Agile Tour Genève 2024)Ouvrez la porte ou prenez un mur (Agile Tour Genève 2024)
Ouvrez la porte ou prenez un mur (Agile Tour Genève 2024)
Laurent Speyser
 
De l'IA comme plagiat à la rédaction d'une « charte IA » à l'université
De l'IA comme plagiat à la rédaction d'une « charte IA » à l'universitéDe l'IA comme plagiat à la rédaction d'une « charte IA » à l'université
De l'IA comme plagiat à la rédaction d'une « charte IA » à l'université
Université de Franche-Comté
 
Le Comptoir OCTO - Qu’apporte l’analyse de cycle de vie lors d’un audit d’éco...
Le Comptoir OCTO - Qu’apporte l’analyse de cycle de vie lors d’un audit d’éco...Le Comptoir OCTO - Qu’apporte l’analyse de cycle de vie lors d’un audit d’éco...
Le Comptoir OCTO - Qu’apporte l’analyse de cycle de vie lors d’un audit d’éco...
OCTO Technology
 

Dernier (7)

MongoDB in a scale-up: how to get away from a monolithic hell — MongoDB Paris...
MongoDB in a scale-up: how to get away from a monolithic hell — MongoDB Paris...MongoDB in a scale-up: how to get away from a monolithic hell — MongoDB Paris...
MongoDB in a scale-up: how to get away from a monolithic hell — MongoDB Paris...
 
PRESENTATION DE L'ACTIVE DIRECTORY SOUS WINDOWS SERVEUR.pptx
PRESENTATION DE L'ACTIVE DIRECTORY SOUS WINDOWS SERVEUR.pptxPRESENTATION DE L'ACTIVE DIRECTORY SOUS WINDOWS SERVEUR.pptx
PRESENTATION DE L'ACTIVE DIRECTORY SOUS WINDOWS SERVEUR.pptx
 
Le support de présentation des Signaux 2024
Le support de présentation des Signaux 2024Le support de présentation des Signaux 2024
Le support de présentation des Signaux 2024
 
Les écrans informatiques au fil du temps.pptx
Les écrans informatiques au fil du temps.pptxLes écrans informatiques au fil du temps.pptx
Les écrans informatiques au fil du temps.pptx
 
Ouvrez la porte ou prenez un mur (Agile Tour Genève 2024)
Ouvrez la porte ou prenez un mur (Agile Tour Genève 2024)Ouvrez la porte ou prenez un mur (Agile Tour Genève 2024)
Ouvrez la porte ou prenez un mur (Agile Tour Genève 2024)
 
De l'IA comme plagiat à la rédaction d'une « charte IA » à l'université
De l'IA comme plagiat à la rédaction d'une « charte IA » à l'universitéDe l'IA comme plagiat à la rédaction d'une « charte IA » à l'université
De l'IA comme plagiat à la rédaction d'une « charte IA » à l'université
 
Le Comptoir OCTO - Qu’apporte l’analyse de cycle de vie lors d’un audit d’éco...
Le Comptoir OCTO - Qu’apporte l’analyse de cycle de vie lors d’un audit d’éco...Le Comptoir OCTO - Qu’apporte l’analyse de cycle de vie lors d’un audit d’éco...
Le Comptoir OCTO - Qu’apporte l’analyse de cycle de vie lors d’un audit d’éco...
 

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