Ambientes Descartáveisutilizando Docker
🍻
$ whoami
Carlos Ribeiro
Carlos Ribeiro
https://opensanca.com.br
ProduçãoQA / Staging / UAT
Repositório
Repositório
master
entregável
Repositório
master
time A
entregável
Repositório
master
time A
entregável
Repositório
master
time A
entregável
Repositório
master
time A
entregável
Repositório
master
time B
time A
entregável
Repositório
master
time B
time A
entregável
Repositório
master
time B
time A
entregável
Repositório
master
time B
time A
entregável
Repositório
master
time B
time A
entregável
Repositório
master
time B
time A
PR PR
entregável
“Alguém usando o servidor de Staging??”
“Staging é meu! # Ninguém faz deploy…”
PR
Repositório
master
time B
time A
PR
entregável
PR
Repositório
master
time B
time A
entregável
Repositório
master
time B
time A
entregável
Repositório
master
time B
time A
entregável
ProduçãoQA / Staging / UAT
Produção
QA / Staging / UAT
Produção
QA / Staging / UAT
PR
Produção
QA / Staging / UAT
PR
Produção
QA / Staging / UAT
PR PR
Produção
QA / Staging / UAT
PR PR
Produção
QA / Staging / UAT
PR PR
master
master
master
Construir a imagem Docker da aplicação
master
Construir a imagem Docker da aplicação
master
Construir a imagem Docker da aplicação
Rodar os Testes
master
Construir a imagem Docker da aplicação
Rodar os Testes
Criar containers paraStaging
master
feature_branch
feature_branch
feature_branch
Construir a imagem Docker da aplicação
feature_branch
Construir a imagem Docker da aplicação
feature_branch
Construir a imagem Docker da aplicação
Rodar os Testes
feature_branch
Construir a imagem Docker da aplicação
Rodar os TestesCriar containers
para essa branch
feature_branch
meu_pr_1.minhapp.net
meu_pr_2.minhapp.net
staging.minhapp.net
meu_pr_1.minhapp.net
meu_pr_2.minhapp.net
PR
PR
meu_pr_1.minhapp.net
meu_pr_2.minhapp.net
PR
PR
meu_pr_1.minhapp.net
meu_pr_2.minhapp.net
PR
PR
meu_pr_1.minhapp.net
meu_pr_2.minhapp.net
PR
PR
meu_pr_1.minhapp.net
meu_pr_2.minhapp.net
PR
PR
meu_pr_1.minhapp.net
meu_pr_2.minhapp.net
PR
PR
Docker Swarm
stage('Deploy to Staging') { when { expression { env.BRANCH_NAME == 'master' } } steps { } }
master
stage('Deploy to Staging') { when { expression { env.BRANCH_NAME == 'master' } } steps { - Criar o serviço no Docker Swarm com o banco } }
master
stage('Deploy to Staging') { when { expression { env.BRANCH_NAME == 'master' } } steps { - Criar o serviço no Docker Swarm com o Postgres - Criar o serviço no Docker Swarm com o Redis } }
master
stage('Deploy to Staging') { when { expression { env.BRANCH_NAME == 'master' } } steps { - Criar o serviço no Docker Swarm com o Postgres - Criar o serviço no Docker Swarm com o Redis - Criar o serviço no Docker Swarm com a aplicação usando a imagem da etapa de Build } }
master
stage(‘Create Environment’) { when { expression { env.BRANCH_NAME != 'master' } } steps { } }
feature_branch
stage('Create Environment') { when { expression { env.BRANCH_NAME != 'master' } } steps { - Criar o serviço no Docker Swarm com o Postgres } }
feature_branch
stage('Create Environment') { when { expression { env.BRANCH_NAME != 'master' } } steps { - Criar o serviço no Docker Swarm com o Postgres - Criar o serviço no Docker Swarm com o Redis } }
feature_branch
stage('Create Environment') { when { expression { env.BRANCH_NAME != 'master' } } steps { - Criar o serviço no Docker Swarm com o Postgres - Criar o serviço no Docker Swarm com o Redis - Criar o serviço no Docker Swarm com a aplicação usando a imagem da etapa de Build } }
feature_branch
DEMO
https://bit.ly/post-ambientes-docker
kind: DeploymentapiVersion: extensions/v1beta1 metadata: name: nginx-deploymentspec: # A deployment's specification really only # has a few useful options # 1. How many copies of each pod do we want? replicas: 3 # 2. How do want to update the pods? strategy: Recreate # 3. Which pods are managed by this deployment? selector: # This must match the labels we set on the pod! matchLabels: deploy: example # This template field is a regular pod configuration # nested inside the deployment spec template: metadata: # Set labels on the pod. # This is used in the deployment selector. labels: deploy: example spec: containers: - name: nginx image: nginx:1.7.9
http://bit.ly/ambientes-docker
🍻
bora beber!!!!