DevOps - melhores práticas e integração contínua
-
Upload
amazon-web-services-latin-america -
Category
Software
-
view
348 -
download
5
Transcript of DevOps - melhores práticas e integração contínua
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, prestarcontas e responsabilidade
Qual ferramenta utilizada na Amazon?
• Deployment service
• Zero downtime
• Health checking
• Artefatos
versionados &
rollbacks
• Continuous delivery
• Do check-in paraprodução
• Continuous Integration + Continuous Delivery
• Automação do release
• >90% dos times
Pipelines
= 50 milhões de deployments porano
Milhares de times +
Arquitetura de Microserviços +
Múltiplos Ambientes +
Entreg Contínua
DevOps
Pipeline
Source
Desenvolvimento
commit
BuildBuilt 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çãoProvisiona
mentoDeployTesteBuildCodificaçã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
DemoDeploy 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 pullReceber 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