São Paulo
Integração Contínua e Melhores
Práticas de Deployment
Marcelo Couto, Diretor de Produtos da VTEX
Alex Coqueiro, Arquiteto de Soluções para o Setor Público
Agenda
• Como a Amazon faz ?
• Como a VTEX faz ?
• Como eu posso fazer ?
Como a Amazon faz ?
©2015, Amazon Web Services, Inc. or its affiliates. All rights reserved
• Service-Oriented
Architecture (SOA)
• Tudo como
interface de
serviço
• “Microservices”
• “DevOps”
• Decentralizado
• Two-pizza teams
• Agilidade,
autonomia, prestar
contas e
responsabilidade
Qual ferramenta utilizada na Amazon?
• Deployment service
• Zero downtime
• Health checking
• Artefatos
versionados &
rollbacks
• Continuous delivery
• Do check-in para
produção
• Continuous Integration
+ Continuous Delivery
• Automação do release
• >90% dos times
Pipelines
= 50 milhões de deployments por
ano
Milhares de times +
Arquitetura de Microserviços +
Múltiplos Ambientes +
Entreg Contínua
DevOps
Pipeline
Source
Desenvolvimento
commit
Build
Built e
testes unitários
Staging
Deploy do
código em
homologação e
teste (load/UI)
Produção
Deploy de
código em
produção
Mudanças,
Atualizações, e
Correções
Idéias,
Solicitações, e
Bugs
Developers Customers
Como a VTEX faz ?
©2015, Amazon Web Services, Inc. or its affiliates. All rights reserved
Vamos subir mais uma versão!
• Plataforma de comércio eletrônico
SaaS, líder na América Latina
• Atendemos clientes de médio e
grande porte.
• Mais de 700 lojas
• Estamos em 9 países
• Mais de 7 milhões de pedidos em
2014.
“Vamos focar no
objetivo da nossa
empresa, nós
desenvolvemos software.
Infraestrutura não pode
gastar nosso tempo.”
- Marcelo Couto
O Desafio
• Ter um sistema com uma infra-
estrutura para atender a todos os
clientes. SaaS.
• Transformar um sistema grande em
microserviços
• Conseguir lançar versões sem
downtime
• Fazer o lançamento de versões ser
frequente.
Solução
• Mais de 40 serviços, cada um
com a sua infraestrutura e
repositórios de dados.
• Todos os ambientes
monitorados e com alarmes
criados.
• 8385 versões lançadas em 2014
Como você pode fazer ?
©2015, Amazon Web Services, Inc. or its affiliates. All rights reserved
Task tracker
Continuous integration /
Automated testing /
Release management
Artifact repository
Source code
management
Deployment service
AWS OpsWorks
AWS Elastic
Beanstalk
AWS
CloudFormation
AWS
CodeDeploy
Local
development
Gerenciamento do Ciclo de Vida da Aplicação (ALM)
Ferramentas no Ciclo de Vida
Monitoração
Provisiona
mento
DeployTesteBuildCodificação
Elastic Beanstalk
OpsWorks
Cloud
Watch
Cloud
Formation
Code
Deploy
Code
Commit
Code
Pipeline
AWS CodeDeploy
©2015, Amazon Web Services, Inc. or its affiliates. All rights reserved
Porque usar um serviço de deployment?
Automatização
de deployments
Gerenciar
Complexidade
Evitar
downtime
CodeDeploy
• Escalar de 1 instância para milhares
• Deploy sem downtime
• Controle de deployment centralizado e monitorado
Staging
CodeDeployv1, v2, v3
Production
Dev
Coordenar deployment de forma automatizada, como na Amazon
Application
revisions
Deployment groups
Componentes do CodeDeploy
Workflow do CodeDeploy
Passo 1: Empacotar a aplicação (AppSpec)
version: 0.0
os: linux
files:
- source: chef/
destination: /etc/chef/codedeploy
- source: target/hello.war
destination: /var/lib/tomcat6/webapps
hooks:
ApplicationStop:
- location: deploy_hooks/stop-tomcat.sh
BeforeInstall:
- location: deploy_hooks/install-chef.sh
AfterInstall:
- location: deploy_hooks/librarian-install.sh
ApplicationStart:
- location: deploy_hooks/chef-solo.sh
ValidateService:
- location: deploy_hooks/verify_service.sh
Passo 1: Empacotar a aplicação (AppSpec)
version: 0.0
os: linux
files:
- source: chef/
destination: /etc/chef/codedeploy
- source: target/hello.war
destination: /var/lib/tomcat6/webapps
hooks:
ApplicationStop:
- location: deploy_hooks/stop-tomcat.sh
BeforeInstall:
- location: deploy_hooks/install-chef.sh
AfterInstall:
- location: deploy_hooks/librarian-install.sh
ApplicationStart:
- location: deploy_hooks/chef-solo.sh
ValidateService:
- location: deploy_hooks/verify_service.sh
Passo 1: Empacotar a aplicação (AppSpec)
version: 0.0
os: linux
files:
- source: chef/
destination: /etc/chef/codedeploy
- source: target/hello.war
destination: /var/lib/tomcat6/webapps
hooks:
ApplicationStop:
- location: deploy_hooks/stop-tomcat.sh
BeforeInstall:
- location: deploy_hooks/install-chef.sh
AfterInstall:
- location: deploy_hooks/librarian-install.sh
ApplicationStart:
- location: deploy_hooks/chef-solo.sh
ValidateService:
- location: deploy_hooks/verify_service.sh
Passo 2: Configurar o ambiente destino
Agent Agent Agent
Staging
Agent Agent
Agent Agent
Agent
Agent
Production
Deployment groupDeployment group
Agrupar instâncias por:
• Grupos de Auto Scaling
• Tags no Amazon EC2
• On-premises
Passo 3: Deploy
aws deploy create-deployment 
--application-name MyApp 
--deployment-group-name TargetGroup 
--s3-location bucket=MyBucket,key=MyApp.zip
AWS CLI & SDKs
AWS Console
CI / CD Partners
GitHub
Deployment Config – Escolha a Estratégia
v2 v1 v1 v1 v1 v1 v1 v1
v2 v2 v2 v2 v1 v1 v1 v1
v2 v2 v2 v2 v2 v2 v2 v2
One-at-a-time
Half-at-a-time
All-at-once
Rolling Update – Deploy sem downtime
v1v1 v1
Load Balancer
Rolling Update – Deploy sem downtime
v1v2 v1
Load Balancer
Rolling Update – Deploy sem downtime
v2v2 v1
Load Balancer
Rolling Update – Deploy sem downtime
v2v2v2
Load Balancer
Rolling Update – Deploy sem downtime
v2v2 v2
Load Balancer
Health Tracking – Problemas no deployment
v2v2 v2
Load Balancer
Health Tracking – Problemas no deployment
v3 v2 v2Stop
Load Balancer
Health Tracking – Problemas no deployment
v2v2 v2
Load Balancer
Rollback
Health Tracking – Problemas no deployment
v2v2 v2
Load Balancer
Demo
Deploy de uma aplicação
Web no EC2 Linux
Integrações
AWS CodeCommit
©2015, Amazon Web Services, Inc. or its affiliates. All rights reserved
O que é requerido em um gerenciador de versão ?
Gerenciamento
Completo
High
availability
Segurança Armazenar
Qualquer
Coisa
CodeCommit
• Redundância de dados em AZ’s
• Encriptação dos dados armazenados
• Integrado com AWS Identity and Access Management
• Não há limite para o repo
git push CodeCommit
Objetos Git
no Amazon S3
Index do Git
no Amazon
DynamoDB
Encriptação de
Chaves no
AWS KMS
SSH or HTTPS
Seguro, escalável, e gerenciado como no Git
Workflow no CodeCommit
git clone
create repository Criar Repositório
Receber clone
Sync repos (local / remote)
modify local files
git add / commit / push
Receber push
Atualizar repo remoto
git pull
Receber push
Atualizar repo remoto
List repos, list branches
Display response
Receber requisições
Enviar respostas
Same Git experience
$ git clone https://git-codecommit.us-east-1.amazonaws.com/v1/repos/aws-cli
Cloning into 'aws-cli'...
Receiving objects: 100% (16032/16032), 5.55 MiB | 1.25 MiB/s, done.
Resolving deltas: 100% (9900/9900), done.
Checking connectivity... done.
$ nano README.rst
$ git commit -am 'updated README'
[master 4fa0318] updated README
1 file changed, 1 insertion(+)
$ git push
Counting objects: 3, done.
Delta compression using up to 4 threads.
Compressing objects: 100% (3/3), done.
Writing objects: 100% (3/3), 297 bytes | 0 bytes/s, done.
Total 3 (delta 2), reused 0 (delta 0)
remote:
To https://git-codecommit.us-east-1.amazonaws.com/v1/repos/aws-cli
4dacd6d..4fa0318 master -> master
AWS CodePipeline
©2015, Amazon Web Services, Inc. or its affiliates. All rights reserved
Porque utilizar um serviço para Release?
Workflow
Automatizado
Release
Rápido
Garantir
Qualidade
CodePipeline
• Motor de workflow customizável
• Integração com ferramentas de parceiros e/ou customizações
• Editor Visual e status
Continuous delivery e automação do release, como na Amazon
Build
1) Build
2) Unit test
1) Deploy
2) UI test
Source Beta Production
1) Deploy
2) Load test
Gamma
1) Deploy region1
2) Deploy region2
3) Deploy region3
CodePipeline – Visão Preliminar na Console
Links
Produtos:
• http://aws.amazon.com/codedeploy/
• http://aws.amazon.com/codepipeline/
• http://aws.amazon.com/codecommit/
Artigos:
• http://blogs.aws.amazon.com/application-management
São Paulo

DevOps - melhores práticas e integração contínua

  • 1.
  • 2.
    Integração Contínua eMelhores Práticas de Deployment Marcelo Couto, Diretor de Produtos da VTEX Alex Coqueiro, Arquiteto de Soluções para o Setor Público
  • 3.
    Agenda • Como aAmazon faz ? • Como a VTEX faz ? • Como eu posso fazer ?
  • 4.
    Como a Amazonfaz ? ©2015, Amazon Web Services, Inc. or its affiliates. All rights reserved
  • 6.
    • Service-Oriented Architecture (SOA) •Tudo como interface de serviço • “Microservices”
  • 7.
    • “DevOps” • Decentralizado •Two-pizza teams • Agilidade, autonomia, prestar contas e responsabilidade
  • 9.
  • 10.
    • Deployment service •Zero downtime • Health checking • Artefatos versionados & rollbacks
  • 11.
    • Continuous delivery •Do check-in para produção • Continuous Integration + Continuous Delivery • Automação do release • >90% dos times Pipelines
  • 12.
    = 50 milhõesde deployments por ano Milhares de times + Arquitetura de Microserviços + Múltiplos Ambientes + Entreg Contínua
  • 13.
    DevOps Pipeline Source Desenvolvimento commit Build Built e testes unitários Staging Deploydo código em homologação e teste (load/UI) Produção Deploy de código em produção Mudanças, Atualizações, e Correções Idéias, Solicitações, e Bugs Developers Customers
  • 14.
    Como a VTEXfaz ? ©2015, Amazon Web Services, Inc. or its affiliates. All rights reserved
  • 15.
    Vamos subir maisuma versão! • Plataforma de comércio eletrônico SaaS, líder na América Latina • Atendemos clientes de médio e grande porte. • Mais de 700 lojas • Estamos em 9 países • Mais de 7 milhões de pedidos em 2014. “Vamos focar no objetivo da nossa empresa, nós desenvolvemos software. Infraestrutura não pode gastar nosso tempo.” - Marcelo Couto
  • 16.
    O Desafio • Terum sistema com uma infra- estrutura para atender a todos os clientes. SaaS. • Transformar um sistema grande em microserviços • Conseguir lançar versões sem downtime • Fazer o lançamento de versões ser frequente.
  • 17.
    Solução • Mais de40 serviços, cada um com a sua infraestrutura e repositórios de dados. • Todos os ambientes monitorados e com alarmes criados. • 8385 versões lançadas em 2014
  • 20.
    Como você podefazer ? ©2015, Amazon Web Services, Inc. or its affiliates. All rights reserved
  • 21.
    Task tracker Continuous integration/ Automated testing / Release management Artifact repository Source code management Deployment service AWS OpsWorks AWS Elastic Beanstalk AWS CloudFormation AWS CodeDeploy Local development Gerenciamento do Ciclo de Vida da Aplicação (ALM)
  • 22.
    Ferramentas no Ciclode Vida Monitoração Provisiona mento DeployTesteBuildCodificação Elastic Beanstalk OpsWorks Cloud Watch Cloud Formation Code Deploy Code Commit Code Pipeline
  • 23.
    AWS CodeDeploy ©2015, AmazonWeb Services, Inc. or its affiliates. All rights reserved
  • 24.
    Porque usar umserviço de deployment? Automatização de deployments Gerenciar Complexidade Evitar downtime
  • 25.
    CodeDeploy • Escalar de1 instância para milhares • Deploy sem downtime • Controle de deployment centralizado e monitorado Staging CodeDeployv1, v2, v3 Production Dev Coordenar deployment de forma automatizada, como na Amazon Application revisions Deployment groups
  • 26.
  • 27.
  • 28.
    Passo 1: Empacotara aplicação (AppSpec) version: 0.0 os: linux files: - source: chef/ destination: /etc/chef/codedeploy - source: target/hello.war destination: /var/lib/tomcat6/webapps hooks: ApplicationStop: - location: deploy_hooks/stop-tomcat.sh BeforeInstall: - location: deploy_hooks/install-chef.sh AfterInstall: - location: deploy_hooks/librarian-install.sh ApplicationStart: - location: deploy_hooks/chef-solo.sh ValidateService: - location: deploy_hooks/verify_service.sh
  • 29.
    Passo 1: Empacotara aplicação (AppSpec) version: 0.0 os: linux files: - source: chef/ destination: /etc/chef/codedeploy - source: target/hello.war destination: /var/lib/tomcat6/webapps hooks: ApplicationStop: - location: deploy_hooks/stop-tomcat.sh BeforeInstall: - location: deploy_hooks/install-chef.sh AfterInstall: - location: deploy_hooks/librarian-install.sh ApplicationStart: - location: deploy_hooks/chef-solo.sh ValidateService: - location: deploy_hooks/verify_service.sh
  • 30.
    Passo 1: Empacotara aplicação (AppSpec) version: 0.0 os: linux files: - source: chef/ destination: /etc/chef/codedeploy - source: target/hello.war destination: /var/lib/tomcat6/webapps hooks: ApplicationStop: - location: deploy_hooks/stop-tomcat.sh BeforeInstall: - location: deploy_hooks/install-chef.sh AfterInstall: - location: deploy_hooks/librarian-install.sh ApplicationStart: - location: deploy_hooks/chef-solo.sh ValidateService: - location: deploy_hooks/verify_service.sh
  • 31.
    Passo 2: Configuraro ambiente destino Agent Agent Agent Staging Agent Agent Agent Agent Agent Agent Production Deployment groupDeployment group Agrupar instâncias por: • Grupos de Auto Scaling • Tags no Amazon EC2 • On-premises
  • 32.
    Passo 3: Deploy awsdeploy create-deployment --application-name MyApp --deployment-group-name TargetGroup --s3-location bucket=MyBucket,key=MyApp.zip AWS CLI & SDKs AWS Console CI / CD Partners GitHub
  • 33.
    Deployment Config –Escolha a Estratégia v2 v1 v1 v1 v1 v1 v1 v1 v2 v2 v2 v2 v1 v1 v1 v1 v2 v2 v2 v2 v2 v2 v2 v2 One-at-a-time Half-at-a-time All-at-once
  • 34.
    Rolling Update –Deploy sem downtime v1v1 v1 Load Balancer
  • 35.
    Rolling Update –Deploy sem downtime v1v2 v1 Load Balancer
  • 36.
    Rolling Update –Deploy sem downtime v2v2 v1 Load Balancer
  • 37.
    Rolling Update –Deploy sem downtime v2v2v2 Load Balancer
  • 38.
    Rolling Update –Deploy sem downtime v2v2 v2 Load Balancer
  • 39.
    Health Tracking –Problemas no deployment v2v2 v2 Load Balancer
  • 40.
    Health Tracking –Problemas no deployment v3 v2 v2Stop Load Balancer
  • 41.
    Health Tracking –Problemas no deployment v2v2 v2 Load Balancer Rollback
  • 42.
    Health Tracking –Problemas no deployment v2v2 v2 Load Balancer
  • 43.
    Demo Deploy de umaaplicação Web no EC2 Linux
  • 44.
  • 45.
    AWS CodeCommit ©2015, AmazonWeb Services, Inc. or its affiliates. All rights reserved
  • 46.
    O que érequerido em um gerenciador de versão ? Gerenciamento Completo High availability Segurança Armazenar Qualquer Coisa
  • 48.
    CodeCommit • Redundância dedados em AZ’s • Encriptação dos dados armazenados • Integrado com AWS Identity and Access Management • Não há limite para o repo git push CodeCommit Objetos Git no Amazon S3 Index do Git no Amazon DynamoDB Encriptação de Chaves no AWS KMS SSH or HTTPS Seguro, escalável, e gerenciado como no Git
  • 49.
    Workflow no CodeCommit gitclone create repository Criar Repositório Receber clone Sync repos (local / remote) modify local files git add / commit / push Receber push Atualizar repo remoto git pull Receber push Atualizar repo remoto List repos, list branches Display response Receber requisições Enviar respostas
  • 50.
    Same Git experience $git clone https://git-codecommit.us-east-1.amazonaws.com/v1/repos/aws-cli Cloning into 'aws-cli'... Receiving objects: 100% (16032/16032), 5.55 MiB | 1.25 MiB/s, done. Resolving deltas: 100% (9900/9900), done. Checking connectivity... done. $ nano README.rst $ git commit -am 'updated README' [master 4fa0318] updated README 1 file changed, 1 insertion(+) $ git push Counting objects: 3, done. Delta compression using up to 4 threads. Compressing objects: 100% (3/3), done. Writing objects: 100% (3/3), 297 bytes | 0 bytes/s, done. Total 3 (delta 2), reused 0 (delta 0) remote: To https://git-codecommit.us-east-1.amazonaws.com/v1/repos/aws-cli 4dacd6d..4fa0318 master -> master
  • 51.
    AWS CodePipeline ©2015, AmazonWeb Services, Inc. or its affiliates. All rights reserved
  • 52.
    Porque utilizar umserviço para Release? Workflow Automatizado Release Rápido Garantir Qualidade
  • 54.
    CodePipeline • Motor deworkflow customizável • Integração com ferramentas de parceiros e/ou customizações • Editor Visual e status Continuous delivery e automação do release, como na Amazon Build 1) Build 2) Unit test 1) Deploy 2) UI test Source Beta Production 1) Deploy 2) Load test Gamma 1) Deploy region1 2) Deploy region2 3) Deploy region3
  • 55.
    CodePipeline – VisãoPreliminar na Console
  • 56.
    Links Produtos: • http://aws.amazon.com/codedeploy/ • http://aws.amazon.com/codepipeline/ •http://aws.amazon.com/codecommit/ Artigos: • http://blogs.aws.amazon.com/application-management
  • 58.