SlideShare a Scribd company logo
Continuous Delivery com
Docker, OpenShift e Jenkins
Bruno Padilha
DevOps Engineer
Gabriel Machado
Software and DevOps Engineer
gmsantos
gmsantos__
gmsantos
brunopadz
brunopadz
brunopadz
Agenda
● A Leroy Merlin
● Sobre o projeto
○ Overview
○ Arquitetura
○ Organização do Projeto
● Execução ambiente local
○ Processo de Deployment
○ Pipeline de CI/CD
● Jenkins
● Demo
A Leroy Merlin
A Leroy Merlin
● Rede Francesa multi especialista do lar
● No Brasil desde 1998
● 42 lojas distribuídas em 11 estados
● +10.000 colaboradores
● Presente em 12 países com +400 lojas
A Leroy Merlin
● Momento de Transformação digital
○ Renovação dos sistemas
○ Cloud Native e Mobile First
○ Multi Cloud
● Integração global com o Adeo
○ Innersourcing
○ Sistemas mantidos pelo grupo
Projeto
● Mobile com PWA (React Native e Webview)
● Baseado em microserviços
● Reaproveitamento de serviços entre projetos
Arquitetura
Arquitetura
Arquitetura
Preocupações Monorepo Multirepo
Acompanhamento de
mudanças consolidado
✅ ❌
Organização ✅ ✅
Ambiente de dev ✅ ❌
Tamanho do repositório ❌ ✅
Custo ✅ ❌
Monorepo ou multirepo?
📁 project
|-- Jenkinsfile
|-- docker-compose.yml
|-- docker-compose.build.yml
📁service-A/
|--- docker-compose.yml
|--- Dockerfile.app
|--- Dockerfile.web
📁--- docker/
📁---- app/
📁---- web/
📁service-B/
|--- docker-compose.yml
|--- Dockerfile.app
|----Dockerfile.web
📁--- docker/
📁---- app/
📁---- web/
Estrutura do repositório
📁 project
|-- Jenkinsfile
|-- docker-compose.yml
|-- docker-compose.build.yml
📁service-A/
|--- docker-compose.yml
|--- Dockerfile.app
|--- Dockerfile.web
📁--- docker/
📁---- app/
📁---- web/
📁service-B/
|--- docker-compose.yml
|--- Dockerfile.app
|----Dockerfile.web
📁--- docker/
📁---- app/
📁---- web/
Estrutura do repositório
📁 project
|-- Jenkinsfile
|-- docker-compose.yml
|-- docker-compose.build.yml
📁service-A/
|--- docker-compose.yml
|--- Dockerfile.app
|--- Dockerfile.web
📁--- docker/
📁---- app/
📁---- web/
📁service-B/
|--- docker-compose.yml
|--- Dockerfile.app
|----Dockerfile.web
📁--- docker/
📁---- app/
📁---- web/
Estrutura do repositório
📁 project
|-- Jenkinsfile
|-- docker-compose.yml
|-- docker-compose.build.yml
📁service-A/
|--- docker-compose.yml
|--- Dockerfile.app
|--- Dockerfile.web
📁--- docker/
📁---- app/
📁---- web/
📁service-B/
|--- docker-compose.yml
|--- Dockerfile.app
|----Dockerfile.web
📁--- docker/
📁---- app/
📁---- web/
Estrutura do repositório
📁 project
|-- Jenkinsfile
|-- docker-compose.yml
|-- docker-compose.build.yml
📁service-A/
|--- docker-compose.yml
|--- Dockerfile.app
|--- Dockerfile.web
📁--- docker/
📁---- app/
📁---- web/
📁service-B/
|--- docker-compose.yml
|--- Dockerfile.app
|----Dockerfile.web
📁--- docker/
📁---- app/
📁---- web/
Estrutura do repositório
📁 project
|-- Jenkinsfile
|-- docker-compose.yml
|-- docker-compose.build.yml
📁service-A/
|--- docker-compose.yml
|--- Dockerfile.app
|--- Dockerfile.web
📁--- docker/
📁---- app/
📁---- web/
📁service-B/
|--- docker-compose.yml
|--- Dockerfile.app
|----Dockerfile.web
📁--- docker/
📁---- app/
📁---- web/
Estrutura do repositório
📁 project
|-- Jenkinsfile
|-- docker-compose.yml
|-- docker-compose.build.yml
📁service-A/
|--- docker-compose.yml
|--- Dockerfile.app
|--- Dockerfile.web
📁--- docker/
📁---- app/
📁---- web/
📁service-B/
|--- docker-compose.yml
|--- Dockerfile.app
|----Dockerfile.web
📁--- docker/
📁---- app/
📁---- web/
Estrutura do repositório
Dockerfile
FROM composer:1.6 as build
ARG composer_args=""
WORKDIR /var/www/html
RUN mkdir -p database/seeds database/factories
COPY composer.json composer.lock ./
RUN composer install ${composer_args} --no-progress --no-scripts --ignore-platform-reqs 
&& composer clear-cache
COPY . ./
RUN composer dump-autoload ${composer_args} --classmap-authoritative
FROM leroymerlinbr/base-image:0.2
COPY --chown=www-data:root --from=build /var/www/html ./
Dockerfile
FROM composer:1.6 as build
ARG composer_args=""
WORKDIR /var/www/html
RUN mkdir -p database/seeds database/factories
COPY composer.json composer.lock ./
RUN composer install ${composer_args} --no-progress --no-scripts --ignore-platform-reqs 
&& composer clear-cache
COPY . ./
RUN composer dump-autoload ${composer_args} --classmap-authoritative
FROM leroymerlinbr/base-image:0.2
COPY --chown=www-data:root --from=build /var/www/html ./
Cache dependências
Dockerfile
FROM composer:1.6 as build
ARG composer_args=""
WORKDIR /var/www/html
RUN mkdir -p database/seeds database/factories
COPY composer.json composer.lock ./
RUN composer install ${composer_args} --no-progress --no-scripts --ignore-platform-reqs 
&& composer clear-cache
COPY . ./
RUN composer dump-autoload ${composer_args} --classmap-authoritative
FROM leroymerlinbr/base-image:0.2
COPY --chown=www-data:root --from=build /var/www/html ./
Cache dependências
Build restante
aplicação
Dockerfile
FROM composer:1.6 as build
ARG composer_args=""
WORKDIR /var/www/html
RUN mkdir -p database/seeds database/factories
COPY composer.json composer.lock ./
RUN composer install ${composer_args} --no-progress --no-scripts --ignore-platform-reqs 
&& composer clear-cache
COPY . ./
RUN composer dump-autoload ${composer_args} --classmap-authoritative
FROM leroymerlinbr/base-image:0.2
COPY --chown=www-data:root --from=build /var/www/html ./
Cache dependências
Build restante
aplicação
Args para build dev/prod
Dockerfile
FROM composer:1.6 as build
ARG composer_args=""
WORKDIR /var/www/html
RUN mkdir -p database/seeds database/factories
COPY composer.json composer.lock ./
RUN composer install ${composer_args} --no-progress --no-scripts --ignore-platform-reqs 
&& composer clear-cache
COPY . ./
RUN composer dump-autoload ${composer_args} --classmap-authoritative
FROM leroymerlinbr/base-image:0.2
COPY --chown=www-data:root --from=build /var/www/html ./
Cache dependências
Build restante
aplicação
Args para build dev/prod
Execução do projeto
$ docker-compose up --build -d
Creating network "baleinedev_content" with driver "bridge"
Creating network "baleinedev_cluster" with driver "bridge"
Creating network "baleinedev_auth" with driver "bridge"
Creating volume "baleinedev_mongodb-data" with local driver
Building auth-web
Step 1/6 : FROM nginx:1.13-alpine
...
Successfully built 48319c1ae833
Successfully tagged leroymerlinbr/baleine-auth-web:latest
...
...
Creating baleienedev_mongodb_1 ... done
Creating baleinedev_auth-web_1 ... done
Creating baleienedev_content-app_1 ... done
Creating baleinedev_content-web_1 ... done
Creating baleinedev_es_1 ... done
Creating baleienedev_kibana_1 ... done
Creating baleienedev_logstash_1 ... done
Processo de Deployment
Processo de Deployment
Processo de Deployment
Processo de Deployment
Jenkinsfile
Jenkins Pipeline
Jenkins Pipeline
Demo
Obrigado!
Continuous Delivery com
Docker, OpenShift e Jenkins
gmsantos
gmsantos__
gmsantos
brunopadz
brunopadz
brunopadz
Slides disponíveis em: http://bit.ly/doj-churrops

More Related Content

PDF
Gitlab - Creating C++ applications with Gitlab CI
PDF
How to integrate front end tool via gruntjs
PDF
Workshop - Golang language
PDF
Taming AEM deployments
PDF
Git, CMake, Conan - How to ship and reuse our C++ projects?
PDF
Drone 1.0 Feature
PDF
TDC2018SP | Trilha Containers - CI/CD com Docker e Drone
PDF
Golang Project Layout and Practice
Gitlab - Creating C++ applications with Gitlab CI
How to integrate front end tool via gruntjs
Workshop - Golang language
Taming AEM deployments
Git, CMake, Conan - How to ship and reuse our C++ projects?
Drone 1.0 Feature
TDC2018SP | Trilha Containers - CI/CD com Docker e Drone
Golang Project Layout and Practice

What's hot (20)

PDF
Webinar - Unbox GitLab CI/CD
PDF
Google App Engine: Basic
PDF
Docker in Production: Reality, Not Hype
PDF
Coscup x ruby conf tw 2021 google cloud buildpacks 剖析與實踐
PDF
Docker in Production: Reality, Not Hype - DevOps Chicago
PDF
Drone CI/CD Platform
PDF
Docker 導入:障礙與對策
PDF
Gitlab ci e kubernetes, build test and deploy your projects like a pro
PDF
Docker as development environment
PDF
Ruby microservices with Docker - Sergii Koba
PDF
如何透過 Go-kit 快速搭建微服務架構應用程式實戰
PPTX
Toolbox of a Ruby Team
PDF
Statyczna analiza kodu PHP
PPTX
PPTX
drone continuous Integration
PPTX
Lando - AddWeb Solution
PDF
Ninja Build: Simple Guide for Beginners
PDF
Docker in everyday development
PDF
Super powered Drupal development with docker
PDF
Golang workshop
Webinar - Unbox GitLab CI/CD
Google App Engine: Basic
Docker in Production: Reality, Not Hype
Coscup x ruby conf tw 2021 google cloud buildpacks 剖析與實踐
Docker in Production: Reality, Not Hype - DevOps Chicago
Drone CI/CD Platform
Docker 導入:障礙與對策
Gitlab ci e kubernetes, build test and deploy your projects like a pro
Docker as development environment
Ruby microservices with Docker - Sergii Koba
如何透過 Go-kit 快速搭建微服務架構應用程式實戰
Toolbox of a Ruby Team
Statyczna analiza kodu PHP
drone continuous Integration
Lando - AddWeb Solution
Ninja Build: Simple Guide for Beginners
Docker in everyday development
Super powered Drupal development with docker
Golang workshop
Ad

Similar to Continuous Delivery com Docker, OpenShift e Jenkins (20)

PDF
Docker for mac & local developer environment optimization
PDF
Making kubernetes simple for developers
PPTX
CI-CD WITH GITLAB WORKFLOW
PDF
Learned lessons in a real world project
PPTX
Deploying Windows Containers on Windows Server 2016
PDF
DCEU 18: Developing with Docker Containers
PDF
Drone CI/CD 自動化測試及部署
PPTX
Running Docker in Development & Production (#ndcoslo 2015)
PPTX
Real World Experience of Running Docker in Development and Production
PDF
[EXTENDED] Ceph, Docker, Heroku Slugs, CoreOS and Deis Overview
PPTX
Docker for Web Developers: A Sneak Peek
PPTX
PPTX
Fandogh Cloud workshop slides
PDF
Clustering with Docker Swarm - Dockerops 2016 @ Cento (FE) Italy
PDF
Paris container day june17
PDF
Using Composer with Drupal and Drush
PDF
Learned lessons in a real world project
PDF
JDD2014: Docker.io - versioned linux containers for JVM devops - Dominik Dorn
PDF
Using Docker For Development
PDF
Clustering Docker with Docker Swarm on openSUSE
Docker for mac & local developer environment optimization
Making kubernetes simple for developers
CI-CD WITH GITLAB WORKFLOW
Learned lessons in a real world project
Deploying Windows Containers on Windows Server 2016
DCEU 18: Developing with Docker Containers
Drone CI/CD 自動化測試及部署
Running Docker in Development & Production (#ndcoslo 2015)
Real World Experience of Running Docker in Development and Production
[EXTENDED] Ceph, Docker, Heroku Slugs, CoreOS and Deis Overview
Docker for Web Developers: A Sneak Peek
Fandogh Cloud workshop slides
Clustering with Docker Swarm - Dockerops 2016 @ Cento (FE) Italy
Paris container day june17
Using Composer with Drupal and Drush
Learned lessons in a real world project
JDD2014: Docker.io - versioned linux containers for JVM devops - Dominik Dorn
Using Docker For Development
Clustering Docker with Docker Swarm on openSUSE
Ad

Recently uploaded (20)

PDF
NewMind AI Weekly Chronicles - August'25 Week I
PDF
Peak of Data & AI Encore- AI for Metadata and Smarter Workflows
PDF
Spectral efficient network and resource selection model in 5G networks
PDF
Reach Out and Touch Someone: Haptics and Empathic Computing
PDF
Agricultural_Statistics_at_a_Glance_2022_0.pdf
PPTX
20250228 LYD VKU AI Blended-Learning.pptx
PDF
Chapter 3 Spatial Domain Image Processing.pdf
PDF
Blue Purple Modern Animated Computer Science Presentation.pdf.pdf
PPTX
Understanding_Digital_Forensics_Presentation.pptx
PDF
Mobile App Security Testing_ A Comprehensive Guide.pdf
PDF
Electronic commerce courselecture one. Pdf
PDF
Review of recent advances in non-invasive hemoglobin estimation
PPTX
A Presentation on Artificial Intelligence
PPTX
Big Data Technologies - Introduction.pptx
PDF
Machine learning based COVID-19 study performance prediction
PPTX
KOM of Painting work and Equipment Insulation REV00 update 25-dec.pptx
PDF
Build a system with the filesystem maintained by OSTree @ COSCUP 2025
PDF
Network Security Unit 5.pdf for BCA BBA.
PDF
Diabetes mellitus diagnosis method based random forest with bat algorithm
PDF
Per capita expenditure prediction using model stacking based on satellite ima...
NewMind AI Weekly Chronicles - August'25 Week I
Peak of Data & AI Encore- AI for Metadata and Smarter Workflows
Spectral efficient network and resource selection model in 5G networks
Reach Out and Touch Someone: Haptics and Empathic Computing
Agricultural_Statistics_at_a_Glance_2022_0.pdf
20250228 LYD VKU AI Blended-Learning.pptx
Chapter 3 Spatial Domain Image Processing.pdf
Blue Purple Modern Animated Computer Science Presentation.pdf.pdf
Understanding_Digital_Forensics_Presentation.pptx
Mobile App Security Testing_ A Comprehensive Guide.pdf
Electronic commerce courselecture one. Pdf
Review of recent advances in non-invasive hemoglobin estimation
A Presentation on Artificial Intelligence
Big Data Technologies - Introduction.pptx
Machine learning based COVID-19 study performance prediction
KOM of Painting work and Equipment Insulation REV00 update 25-dec.pptx
Build a system with the filesystem maintained by OSTree @ COSCUP 2025
Network Security Unit 5.pdf for BCA BBA.
Diabetes mellitus diagnosis method based random forest with bat algorithm
Per capita expenditure prediction using model stacking based on satellite ima...

Continuous Delivery com Docker, OpenShift e Jenkins

  • 1. Continuous Delivery com Docker, OpenShift e Jenkins
  • 2. Bruno Padilha DevOps Engineer Gabriel Machado Software and DevOps Engineer gmsantos gmsantos__ gmsantos brunopadz brunopadz brunopadz
  • 3. Agenda ● A Leroy Merlin ● Sobre o projeto ○ Overview ○ Arquitetura ○ Organização do Projeto ● Execução ambiente local ○ Processo de Deployment ○ Pipeline de CI/CD ● Jenkins ● Demo
  • 5. A Leroy Merlin ● Rede Francesa multi especialista do lar ● No Brasil desde 1998 ● 42 lojas distribuídas em 11 estados ● +10.000 colaboradores ● Presente em 12 países com +400 lojas
  • 6. A Leroy Merlin ● Momento de Transformação digital ○ Renovação dos sistemas ○ Cloud Native e Mobile First ○ Multi Cloud ● Integração global com o Adeo ○ Innersourcing ○ Sistemas mantidos pelo grupo
  • 7. Projeto ● Mobile com PWA (React Native e Webview) ● Baseado em microserviços ● Reaproveitamento de serviços entre projetos
  • 11. Preocupações Monorepo Multirepo Acompanhamento de mudanças consolidado ✅ ❌ Organização ✅ ✅ Ambiente de dev ✅ ❌ Tamanho do repositório ❌ ✅ Custo ✅ ❌ Monorepo ou multirepo?
  • 12. 📁 project |-- Jenkinsfile |-- docker-compose.yml |-- docker-compose.build.yml 📁service-A/ |--- docker-compose.yml |--- Dockerfile.app |--- Dockerfile.web 📁--- docker/ 📁---- app/ 📁---- web/ 📁service-B/ |--- docker-compose.yml |--- Dockerfile.app |----Dockerfile.web 📁--- docker/ 📁---- app/ 📁---- web/ Estrutura do repositório
  • 13. 📁 project |-- Jenkinsfile |-- docker-compose.yml |-- docker-compose.build.yml 📁service-A/ |--- docker-compose.yml |--- Dockerfile.app |--- Dockerfile.web 📁--- docker/ 📁---- app/ 📁---- web/ 📁service-B/ |--- docker-compose.yml |--- Dockerfile.app |----Dockerfile.web 📁--- docker/ 📁---- app/ 📁---- web/ Estrutura do repositório
  • 14. 📁 project |-- Jenkinsfile |-- docker-compose.yml |-- docker-compose.build.yml 📁service-A/ |--- docker-compose.yml |--- Dockerfile.app |--- Dockerfile.web 📁--- docker/ 📁---- app/ 📁---- web/ 📁service-B/ |--- docker-compose.yml |--- Dockerfile.app |----Dockerfile.web 📁--- docker/ 📁---- app/ 📁---- web/ Estrutura do repositório
  • 15. 📁 project |-- Jenkinsfile |-- docker-compose.yml |-- docker-compose.build.yml 📁service-A/ |--- docker-compose.yml |--- Dockerfile.app |--- Dockerfile.web 📁--- docker/ 📁---- app/ 📁---- web/ 📁service-B/ |--- docker-compose.yml |--- Dockerfile.app |----Dockerfile.web 📁--- docker/ 📁---- app/ 📁---- web/ Estrutura do repositório
  • 16. 📁 project |-- Jenkinsfile |-- docker-compose.yml |-- docker-compose.build.yml 📁service-A/ |--- docker-compose.yml |--- Dockerfile.app |--- Dockerfile.web 📁--- docker/ 📁---- app/ 📁---- web/ 📁service-B/ |--- docker-compose.yml |--- Dockerfile.app |----Dockerfile.web 📁--- docker/ 📁---- app/ 📁---- web/ Estrutura do repositório
  • 17. 📁 project |-- Jenkinsfile |-- docker-compose.yml |-- docker-compose.build.yml 📁service-A/ |--- docker-compose.yml |--- Dockerfile.app |--- Dockerfile.web 📁--- docker/ 📁---- app/ 📁---- web/ 📁service-B/ |--- docker-compose.yml |--- Dockerfile.app |----Dockerfile.web 📁--- docker/ 📁---- app/ 📁---- web/ Estrutura do repositório
  • 18. 📁 project |-- Jenkinsfile |-- docker-compose.yml |-- docker-compose.build.yml 📁service-A/ |--- docker-compose.yml |--- Dockerfile.app |--- Dockerfile.web 📁--- docker/ 📁---- app/ 📁---- web/ 📁service-B/ |--- docker-compose.yml |--- Dockerfile.app |----Dockerfile.web 📁--- docker/ 📁---- app/ 📁---- web/ Estrutura do repositório
  • 19. Dockerfile FROM composer:1.6 as build ARG composer_args="" WORKDIR /var/www/html RUN mkdir -p database/seeds database/factories COPY composer.json composer.lock ./ RUN composer install ${composer_args} --no-progress --no-scripts --ignore-platform-reqs && composer clear-cache COPY . ./ RUN composer dump-autoload ${composer_args} --classmap-authoritative FROM leroymerlinbr/base-image:0.2 COPY --chown=www-data:root --from=build /var/www/html ./
  • 20. Dockerfile FROM composer:1.6 as build ARG composer_args="" WORKDIR /var/www/html RUN mkdir -p database/seeds database/factories COPY composer.json composer.lock ./ RUN composer install ${composer_args} --no-progress --no-scripts --ignore-platform-reqs && composer clear-cache COPY . ./ RUN composer dump-autoload ${composer_args} --classmap-authoritative FROM leroymerlinbr/base-image:0.2 COPY --chown=www-data:root --from=build /var/www/html ./ Cache dependências
  • 21. Dockerfile FROM composer:1.6 as build ARG composer_args="" WORKDIR /var/www/html RUN mkdir -p database/seeds database/factories COPY composer.json composer.lock ./ RUN composer install ${composer_args} --no-progress --no-scripts --ignore-platform-reqs && composer clear-cache COPY . ./ RUN composer dump-autoload ${composer_args} --classmap-authoritative FROM leroymerlinbr/base-image:0.2 COPY --chown=www-data:root --from=build /var/www/html ./ Cache dependências Build restante aplicação
  • 22. Dockerfile FROM composer:1.6 as build ARG composer_args="" WORKDIR /var/www/html RUN mkdir -p database/seeds database/factories COPY composer.json composer.lock ./ RUN composer install ${composer_args} --no-progress --no-scripts --ignore-platform-reqs && composer clear-cache COPY . ./ RUN composer dump-autoload ${composer_args} --classmap-authoritative FROM leroymerlinbr/base-image:0.2 COPY --chown=www-data:root --from=build /var/www/html ./ Cache dependências Build restante aplicação Args para build dev/prod
  • 23. Dockerfile FROM composer:1.6 as build ARG composer_args="" WORKDIR /var/www/html RUN mkdir -p database/seeds database/factories COPY composer.json composer.lock ./ RUN composer install ${composer_args} --no-progress --no-scripts --ignore-platform-reqs && composer clear-cache COPY . ./ RUN composer dump-autoload ${composer_args} --classmap-authoritative FROM leroymerlinbr/base-image:0.2 COPY --chown=www-data:root --from=build /var/www/html ./ Cache dependências Build restante aplicação Args para build dev/prod
  • 24. Execução do projeto $ docker-compose up --build -d Creating network "baleinedev_content" with driver "bridge" Creating network "baleinedev_cluster" with driver "bridge" Creating network "baleinedev_auth" with driver "bridge" Creating volume "baleinedev_mongodb-data" with local driver Building auth-web Step 1/6 : FROM nginx:1.13-alpine ... Successfully built 48319c1ae833 Successfully tagged leroymerlinbr/baleine-auth-web:latest ... ... Creating baleienedev_mongodb_1 ... done Creating baleinedev_auth-web_1 ... done Creating baleienedev_content-app_1 ... done Creating baleinedev_content-web_1 ... done Creating baleinedev_es_1 ... done Creating baleienedev_kibana_1 ... done Creating baleienedev_logstash_1 ... done
  • 32. Demo
  • 33. Obrigado! Continuous Delivery com Docker, OpenShift e Jenkins gmsantos gmsantos__ gmsantos brunopadz brunopadz brunopadz Slides disponíveis em: http://bit.ly/doj-churrops