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

58
São Paulo

Upload: amazon-web-services-latin-america

Post on 25-Jul-2015

347 views

Category:

Software


5 download

TRANSCRIPT

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

São Paulo

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

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

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

Agenda

• Como a Amazon faz ?

• Como a VTEX faz ?

• Como eu posso fazer ?

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

Como a Amazon faz ?

©2015, Amazon Web Services, Inc. or its affiliates. All rights reserved

Page 5: DevOps - melhores práticas e integração contínua
Page 6: DevOps - melhores práticas e integração contínua

• Service-Oriented

Architecture (SOA)

• Tudo como

interface de

serviço

• “Microservices”

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

• “DevOps”

• Decentralizado

• Two-pizza teams

• Agilidade, autonomia, prestarcontas e responsabilidade

Page 8: DevOps - melhores práticas e integração contínua
Page 9: DevOps - melhores práticas e integração contínua

Qual ferramenta utilizada na Amazon?

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

• Deployment service

• Zero downtime

• Health checking

• Artefatos

versionados &

rollbacks

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

• Continuous delivery

• Do check-in paraprodução

• Continuous Integration + Continuous Delivery

• Automação do release

• >90% dos times

Pipelines

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

= 50 milhões de deployments porano

Milhares de times +

Arquitetura de Microserviços +

Múltiplos Ambientes +

Entreg Contínua

Page 13: DevOps - melhores práticas e integração 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

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

Como a VTEX faz ?

©2015, Amazon Web Services, Inc. or its affiliates. All rights reserved

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

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

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

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.

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

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

Page 18: DevOps - melhores práticas e integração contínua
Page 19: DevOps - melhores práticas e integração contínua
Page 20: DevOps - melhores práticas e integração contínua

Como você pode fazer ?

©2015, Amazon Web Services, Inc. or its affiliates. All rights reserved

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

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)

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

Ferramentas no Ciclo de Vida

MonitoraçãoProvisiona

mentoDeployTesteBuildCodificação

Elastic Beanstalk

OpsWorks

Cloud

Watch

Cloud

Formation

Code

Deploy

Code

Commit

Code

Pipeline

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

AWS CodeDeploy

©2015, Amazon Web Services, Inc. or its affiliates. All rights reserved

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

Porque usar um serviço de deployment?

Automatização

de deployments

Gerenciar

Complexidade

Evitar

downtime

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

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

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

Componentes do CodeDeploy

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

Workflow do CodeDeploy

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

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

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

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

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

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

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

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

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

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

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

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

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

Rolling Update – Deploy sem downtime

v1v1 v1

Load Balancer

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

Rolling Update – Deploy sem downtime

v1v2 v1

Load Balancer

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

Rolling Update – Deploy sem downtime

v2v2 v1

Load Balancer

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

Rolling Update – Deploy sem downtime

v2v2v2

Load Balancer

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

Rolling Update – Deploy sem downtime

v2v2 v2

Load Balancer

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

Health Tracking – Problemas no deployment

v2v2 v2

Load Balancer

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

Health Tracking – Problemas no deployment

v3 v2 v2Stop

Load Balancer

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

Health Tracking – Problemas no deployment

v2v2 v2

Load Balancer

Rollback

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

Health Tracking – Problemas no deployment

v2v2 v2

Load Balancer

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

DemoDeploy de uma aplicação

Web no EC2 Linux

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

Integrações

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

AWS CodeCommit

©2015, Amazon Web Services, Inc. or its affiliates. All rights reserved

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

O que é requerido em um gerenciador de versão ?

Gerenciamento

Completo

High

availability

Segurança Armazenar

Qualquer

Coisa

Page 47: DevOps - melhores práticas e integração contínua
Page 48: DevOps - melhores práticas e integração contínua

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

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

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

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

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

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

AWS CodePipeline

©2015, Amazon Web Services, Inc. or its affiliates. All rights reserved

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

Porque utilizar um serviço para Release?

Workflow

Automatizado

Release

Rápido

Garantir

Qualidade

Page 53: DevOps - melhores práticas e integração contínua
Page 54: DevOps - melhores práticas e integração contínua

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

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

CodePipeline – Visão Preliminar na Console

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

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

Page 57: DevOps - melhores práticas e integração contínua
Page 58: DevOps - melhores práticas e integração contínua

São Paulo