Continuous Delivery:
Entrega Contínua de Software de Valor
@samantacicilia
“I believe in the power of community”
Evento TEST DAY 2012 - SP
insideoutproject.com.br
O que raios significa
Entregar Software?
O que raios significa Entregar Software?
O que raios significa Entregar Software?
O que raios significa Entregar Software?
O que raios significa Entregar Software?
O mega deploy
da meia-noite
Falando do Desenvolvimento…
Codificar & Testar & Disponibilizar (Deploy)
Codificar …
• Linguagens;
• Frameworks;
• Técnicas;
• Ferramentas;
Testar…
Disponibilizar…
Como fazer tudo isso certo e rápido?
Exemplos
Exemplos
● Google: 8 minutos entre DEV e PRD
● Facebook: 2 vezes por dia
● Linkedin: 30 minutos entre DEV e PRD
● Etsy: 30 deploys por dia feitos por 200+ pessoas;
Pipeline de Implantação
Pipeline de Implantação
● Implementação automatizada do processo de compilar todas as partes de uma
aplicação, implantá-las em um ambiente qualquer – homologação ou produção
– testá-la e efetuar sua entrega final.
Pipeline de Implantação
● Implementação automatizada do processo de compilar todas as partes de uma
aplicação, implantá-las em um ambiente qualquer – homologação ou produção
– testá-la e efetuar sua entrega final.
Pipeline de Implantação
● Implementação automatizada do processo de compilar todas as partes de uma
aplicação, implantá-las em um ambiente qualquer – homologação ou produção
– testá-la e efetuar sua entrega final.
Princípios
Princípios
● Criar um processo de confiabilidade e repetitividade de entrega de versão
Princípios
● Criar um processo de confiabilidade e repetitividade de entrega de versão
● Automatize quase tudo
Princípios
● Criar um processo de confiabilidade e repetitividade de entrega de versão
● Automatize quase tudo
● Mantenha tudo sob controle de versão
Princípios
● Criar um processo de confiabilidade e repetitividade de entrega de versão
● Automatize quase tudo
● Mantenha tudo sob controle de versão
● Se é difícil, faça com mais frequência e amenize o sofrimento
Princípios
● Criar um processo de confiabilidade e repetitividade de entrega de versão
● Automatize quase tudo
● Mantenha tudo sob controle de versão
● Se é difícil, faça com mais frequência e amenize o sofrimento
● A qualidade DEVE estar presente desde o início
Princípios
● Criar um processo de confiabilidade e repetitividade de entrega de versão
● Automatize quase tudo
● Mantenha tudo sob controle de versão
● Se é difícil, faça com mais frequência e amenize o sofrimento
● A qualidade DEVE estar presente desde o início
● Pronto quer dizer versão entregue
Princípios
● Criar um processo de confiabilidade e repetitividade de entrega de versão
● Automatize quase tudo
● Mantenha tudo sob controle de versão
● Se é difícil, faça com mais frequência e amenize o sofrimento
● A qualidade DEVE estar presente desde o início
● Pronto quer dizer versão entregue
● Todos são responsáveis pelo processo de entrega
Princípios
● Criar um processo de confiabilidade e repetitividade de entrega de versão
● Automatize quase tudo
● Mantenha tudo sob controle de versão
● Se é difícil, faça com mais frequência e amenize o sofrimento
● A qualidade DEVE estar presente desde o início
● Pronto quer dizer versão entregue
● Todos são responsáveis pelo processo de entrega
● Melhoria Contínua
Práticas
Práticas
● Compile seus binários somente uma vez
Práticas
● Compile seus binários somente uma vez
● Faça a implementação da mesma maneira em cada ambiente
Práticas
● Compile seus binários somente uma vez
● Faça a implementação da mesma maneira em cada ambiente
● Use Smoke Tests
Práticas
● Compile seus binários somente uma vez
● Faça a implementação da mesma maneira em cada ambiente
● Use Smoke Tests
● Implante em uma cópia de Produção
Práticas
● Compile seus binários somente uma vez
● Faça a implementação da mesma maneira em cada ambiente
● Use Smoke Tests
● Implante em uma cópia de Produção
● Cada mudança deve ser propagada pelo pipeline instantaneamente
Práticas
● Compile seus binários somente uma vez
● Faça a implementação da mesma maneira em cada ambiente
● Use Smoke Tests
● Implante em uma cópia de Produção
● Cada mudança deve ser propagada pelo pipeline instantaneamente
● Se qualquer parte do pipeline falhar, pare o processo
Pipeline na Prática
Estágio de Commit
Estágio de Commit
Estágio de Commit
● Entrada: Código
○ compilar projeto;
○ executar testes unitários;
○ executar Sonar;
○ gerar binário;
○ armazenar no repositório (binário + propriedades).
Estágio de Commit
● Entrada: Código
○ compilar projeto;
○ executar testes unitários;
○ executar Sonar;
○ gerar binário;
○ armazenar no repositório (binário + propriedades).
● Saída: Binários e Relatórios
Deploy em INTEGRAÇÃO
Deploy em INTEGRAÇÃO
Deploy em INTEGRAÇÃO
● Entrada: Versão para Deploy
○ pegar binário no repositório;
○ verificar propriedades do binário (pode fazer deploy?);
○ executar deploy em Integração;
○ atualizar propriedades do binário.
Deploy em INTEGRAÇÃO
● Entrada: Versão para Deploy
○ pegar binário no repositório;
○ verificar propriedades do binário (pode fazer deploy?);
○ executar deploy em Integração;
○ atualizar propriedades do binário.
● Saída: Servidores e propriedades do binário atualizados
Promover para STAGING
Deploy STAGING
Deploy STAGING
Deploy em STAGING
Deploy em STAGING
Deploy em STAGING
● Entrada: Versão para Deploy
○ pegar binário no repositório;
○ verificar propriedades do binário (pode fazer deploy?);
○ executar deploy em Staging;
○ atualizar propriedades do binário.
Deploy em STAGING
● Entrada: Versão para Deploy
○ pegar binário no repositório;
○ verificar propriedades do binário (pode fazer deploy?);
○ executar deploy em Staging;
○ atualizar propriedades do binário.
● Saída: Servidores e propriedades do binário atualizados
Promover para PRODUÇÃO
Promover para PRODUÇÃO
Promover para PRODUÇÃO
Promover para PRODUÇÃO
Promover para PRODUÇÃO
Promover para PRODUÇÃO
Promover para PRODUÇÃO
Análise de Log Automatizada
Análise de Log Automatizada
● Logs da Aplicação;
Análise de Log Automatizada
● Logs da Aplicação;
● Sumarização do TOP 15 erros que mais ocorreram;
Análise de Log Automatizada
● Logs da Aplicação;
● Sumarização do TOP 15 erros que mais ocorreram;
● Verificação de erros 404 e 50X;
Análise de Log Automatizada
● Logs da Aplicação;
● Sumarização do TOP 15 erros que mais ocorreram;
● Verificação de erros 404 e 50X;
● Envio de e-mail para todos os responsáveis;
Análise de Log Automatizada
● Logs da Aplicação;
● Sumarização do TOP 15 erros que mais ocorreram;
● Verificação de erros 404 e 50X;
● Envio de e-mail para todos os responsáveis;
● Tomada de decisão se o processo vai até o final (Deploy em PRODUÇÃO);
Análise de Log Automatizada
● Logs da Aplicação;
● Sumarização do TOP 15 erros que mais ocorreram;
● Verificação de erros 404 e 50X;
● Envio de e-mail para todos os responsáveis;
● Tomada de decisão se o processo vai até o final (Deploy em PRODUÇÃO);
● Muito importante para os produtos mais antigos;
Análise de Log Automatizada
● Logs da Aplicação;
● Sumarização do TOP 15 erros que mais ocorreram;
● Verificação de erros 404 e 50X;
● Envio de e-mail para todos os responsáveis;
● Tomada de decisão se o processo vai até o final (Deploy em PRODUÇÃO);
● Muito importante para os produtos mais antigos;
● Preocupação de OPS.
Análise de Log Automatizada
Testes de Performance Automatizados
Testes de Performance Automatizados
● Scritps do Jmeter;
Testes de Performance Automatizados
● Scritps do Jmeter;
● Cenários pré-definidos;
Testes de Performance Automatizados
● Scritps do Jmeter;
● Cenários pré-definidos;
● Limite máximo aceitável de tempo.
Testes de Performance Automatizados
● Scritps do Jmeter;
● Cenários pré-definidos;
● Limite máximo aceitável de tempo.
Abrir Coordenação de Mudança Automática
Abrir Coordenação de Mudança Automática
Deploy em PRODUÇÃO
Deploy em PRODUÇÃO
Deploy em PRODUÇÃO
Deploy em PRODUÇÃO
Deploy em PRODUÇÃO
● Entrada: Versão para Deploy
○ pegar binário no repositório;
○ verificar propriedades do binário (pode fazer deploy?);
○ executar deploy em Produção;
○ atualizar propriedades do binário.
Deploy em PRODUÇÃO
● Entrada: Versão para Deploy
○ pegar binário no repositório;
○ verificar propriedades do binário (pode fazer deploy?);
○ executar deploy em Produção;
○ atualizar propriedades do binário.
● Saída: Servidores e propriedades do binário atualizados
Alguns Resultados
Alguns Resultados
• Deploys por camadas (Tomcat, Apache, Varnish, Solr, Serviços);
Alguns Resultados
• Deploys por camadas (Tomcat, Apache, Varnish, Solr, Serviços);
• Deploy em qualquer horário;
Alguns Resultados
• Deploys por camadas (Tomcat, Apache, Varnish, Solr, Serviços);
• Deploy em qualquer horário;
• 90 pipelines em 1 ano;
Alguns Resultados
• Deploys por camadas (Tomcat, Apache, Varnish, Solr, Serviços);
• Deploy em qualquer horário;
• 90 pipelines em 1 ano;
Alguns Resultados
• Deploys por camadas (Tomcat, Apache, Varnish, Solr, Serviços);
• Deploy em qualquer horário;
• 90 pipelines em 1 ano;
• Devs fazendo Deploy em PRODUÇÃO (pelo Jenkins, é claro) o/;
Alguns Resultados
• Deploys por camadas (Tomcat, Apache, Varnish, Solr, Serviços);
• Deploy em qualquer horário;
• 90 pipelines em 1 ano;
• Devs fazem Deploy em PRODUÇÃO o/;
• Tempo de entrega
Alguns Resultados
• Deploys por camadas (Tomcat, Apache, Varnish, Solr, Serviços);
• Deploy em qualquer horário;
• 90 pipelines em 1 ano;
• Devs fazem Deploy em PRODUÇÃO o/;
• Tempo de entrega (2 horas).
Referências
Referências
Contatos
➔ testedesoftware.com
➔ rtstreinamentos.com.br
➔ medium.com/@samantacicilia
➔ Linkedin: Samanta Cicilia
➔ Twitter: @samantacicilia
➔ Slideshare: pt.slideshare.net/samantacicilia/
➔ Email: samanta.souza@infoglobo.com.br
➔ Email: samycici@gmail.com

[Uff] Continuous Delivery: Entrega Contínua de Software de Valor

  • 1.
    Continuous Delivery: Entrega Contínuade Software de Valor @samantacicilia
  • 3.
    “I believe inthe power of community” Evento TEST DAY 2012 - SP
  • 4.
  • 5.
    O que raiossignifica Entregar Software?
  • 6.
    O que raiossignifica Entregar Software?
  • 7.
    O que raiossignifica Entregar Software?
  • 8.
    O que raiossignifica Entregar Software?
  • 9.
    O que raiossignifica Entregar Software?
  • 10.
    O mega deploy dameia-noite
  • 12.
  • 13.
    Codificar & Testar& Disponibilizar (Deploy)
  • 14.
    Codificar … • Linguagens; •Frameworks; • Técnicas; • Ferramentas;
  • 15.
  • 16.
  • 18.
    Como fazer tudoisso certo e rápido?
  • 20.
  • 21.
    Exemplos ● Google: 8minutos entre DEV e PRD ● Facebook: 2 vezes por dia ● Linkedin: 30 minutos entre DEV e PRD ● Etsy: 30 deploys por dia feitos por 200+ pessoas;
  • 22.
  • 23.
    Pipeline de Implantação ●Implementação automatizada do processo de compilar todas as partes de uma aplicação, implantá-las em um ambiente qualquer – homologação ou produção – testá-la e efetuar sua entrega final.
  • 24.
    Pipeline de Implantação ●Implementação automatizada do processo de compilar todas as partes de uma aplicação, implantá-las em um ambiente qualquer – homologação ou produção – testá-la e efetuar sua entrega final.
  • 25.
    Pipeline de Implantação ●Implementação automatizada do processo de compilar todas as partes de uma aplicação, implantá-las em um ambiente qualquer – homologação ou produção – testá-la e efetuar sua entrega final.
  • 27.
  • 28.
    Princípios ● Criar umprocesso de confiabilidade e repetitividade de entrega de versão
  • 29.
    Princípios ● Criar umprocesso de confiabilidade e repetitividade de entrega de versão ● Automatize quase tudo
  • 30.
    Princípios ● Criar umprocesso de confiabilidade e repetitividade de entrega de versão ● Automatize quase tudo ● Mantenha tudo sob controle de versão
  • 31.
    Princípios ● Criar umprocesso de confiabilidade e repetitividade de entrega de versão ● Automatize quase tudo ● Mantenha tudo sob controle de versão ● Se é difícil, faça com mais frequência e amenize o sofrimento
  • 32.
    Princípios ● Criar umprocesso de confiabilidade e repetitividade de entrega de versão ● Automatize quase tudo ● Mantenha tudo sob controle de versão ● Se é difícil, faça com mais frequência e amenize o sofrimento ● A qualidade DEVE estar presente desde o início
  • 33.
    Princípios ● Criar umprocesso de confiabilidade e repetitividade de entrega de versão ● Automatize quase tudo ● Mantenha tudo sob controle de versão ● Se é difícil, faça com mais frequência e amenize o sofrimento ● A qualidade DEVE estar presente desde o início ● Pronto quer dizer versão entregue
  • 34.
    Princípios ● Criar umprocesso de confiabilidade e repetitividade de entrega de versão ● Automatize quase tudo ● Mantenha tudo sob controle de versão ● Se é difícil, faça com mais frequência e amenize o sofrimento ● A qualidade DEVE estar presente desde o início ● Pronto quer dizer versão entregue ● Todos são responsáveis pelo processo de entrega
  • 35.
    Princípios ● Criar umprocesso de confiabilidade e repetitividade de entrega de versão ● Automatize quase tudo ● Mantenha tudo sob controle de versão ● Se é difícil, faça com mais frequência e amenize o sofrimento ● A qualidade DEVE estar presente desde o início ● Pronto quer dizer versão entregue ● Todos são responsáveis pelo processo de entrega ● Melhoria Contínua
  • 36.
  • 37.
    Práticas ● Compile seusbinários somente uma vez
  • 38.
    Práticas ● Compile seusbinários somente uma vez ● Faça a implementação da mesma maneira em cada ambiente
  • 39.
    Práticas ● Compile seusbinários somente uma vez ● Faça a implementação da mesma maneira em cada ambiente ● Use Smoke Tests
  • 40.
    Práticas ● Compile seusbinários somente uma vez ● Faça a implementação da mesma maneira em cada ambiente ● Use Smoke Tests ● Implante em uma cópia de Produção
  • 41.
    Práticas ● Compile seusbinários somente uma vez ● Faça a implementação da mesma maneira em cada ambiente ● Use Smoke Tests ● Implante em uma cópia de Produção ● Cada mudança deve ser propagada pelo pipeline instantaneamente
  • 42.
    Práticas ● Compile seusbinários somente uma vez ● Faça a implementação da mesma maneira em cada ambiente ● Use Smoke Tests ● Implante em uma cópia de Produção ● Cada mudança deve ser propagada pelo pipeline instantaneamente ● Se qualquer parte do pipeline falhar, pare o processo
  • 43.
  • 46.
  • 47.
  • 48.
    Estágio de Commit ●Entrada: Código ○ compilar projeto; ○ executar testes unitários; ○ executar Sonar; ○ gerar binário; ○ armazenar no repositório (binário + propriedades).
  • 49.
    Estágio de Commit ●Entrada: Código ○ compilar projeto; ○ executar testes unitários; ○ executar Sonar; ○ gerar binário; ○ armazenar no repositório (binário + propriedades). ● Saída: Binários e Relatórios
  • 53.
  • 54.
  • 55.
    Deploy em INTEGRAÇÃO ●Entrada: Versão para Deploy ○ pegar binário no repositório; ○ verificar propriedades do binário (pode fazer deploy?); ○ executar deploy em Integração; ○ atualizar propriedades do binário.
  • 56.
    Deploy em INTEGRAÇÃO ●Entrada: Versão para Deploy ○ pegar binário no repositório; ○ verificar propriedades do binário (pode fazer deploy?); ○ executar deploy em Integração; ○ atualizar propriedades do binário. ● Saída: Servidores e propriedades do binário atualizados
  • 60.
  • 63.
  • 64.
  • 65.
  • 66.
  • 67.
    Deploy em STAGING ●Entrada: Versão para Deploy ○ pegar binário no repositório; ○ verificar propriedades do binário (pode fazer deploy?); ○ executar deploy em Staging; ○ atualizar propriedades do binário.
  • 68.
    Deploy em STAGING ●Entrada: Versão para Deploy ○ pegar binário no repositório; ○ verificar propriedades do binário (pode fazer deploy?); ○ executar deploy em Staging; ○ atualizar propriedades do binário. ● Saída: Servidores e propriedades do binário atualizados
  • 72.
  • 73.
  • 74.
  • 75.
  • 76.
  • 77.
  • 78.
  • 79.
    Análise de LogAutomatizada
  • 80.
    Análise de LogAutomatizada ● Logs da Aplicação;
  • 81.
    Análise de LogAutomatizada ● Logs da Aplicação; ● Sumarização do TOP 15 erros que mais ocorreram;
  • 82.
    Análise de LogAutomatizada ● Logs da Aplicação; ● Sumarização do TOP 15 erros que mais ocorreram; ● Verificação de erros 404 e 50X;
  • 83.
    Análise de LogAutomatizada ● Logs da Aplicação; ● Sumarização do TOP 15 erros que mais ocorreram; ● Verificação de erros 404 e 50X; ● Envio de e-mail para todos os responsáveis;
  • 84.
    Análise de LogAutomatizada ● Logs da Aplicação; ● Sumarização do TOP 15 erros que mais ocorreram; ● Verificação de erros 404 e 50X; ● Envio de e-mail para todos os responsáveis; ● Tomada de decisão se o processo vai até o final (Deploy em PRODUÇÃO);
  • 85.
    Análise de LogAutomatizada ● Logs da Aplicação; ● Sumarização do TOP 15 erros que mais ocorreram; ● Verificação de erros 404 e 50X; ● Envio de e-mail para todos os responsáveis; ● Tomada de decisão se o processo vai até o final (Deploy em PRODUÇÃO); ● Muito importante para os produtos mais antigos;
  • 86.
    Análise de LogAutomatizada ● Logs da Aplicação; ● Sumarização do TOP 15 erros que mais ocorreram; ● Verificação de erros 404 e 50X; ● Envio de e-mail para todos os responsáveis; ● Tomada de decisão se o processo vai até o final (Deploy em PRODUÇÃO); ● Muito importante para os produtos mais antigos; ● Preocupação de OPS.
  • 87.
    Análise de LogAutomatizada
  • 88.
    Testes de PerformanceAutomatizados
  • 89.
    Testes de PerformanceAutomatizados ● Scritps do Jmeter;
  • 90.
    Testes de PerformanceAutomatizados ● Scritps do Jmeter; ● Cenários pré-definidos;
  • 91.
    Testes de PerformanceAutomatizados ● Scritps do Jmeter; ● Cenários pré-definidos; ● Limite máximo aceitável de tempo.
  • 92.
    Testes de PerformanceAutomatizados ● Scritps do Jmeter; ● Cenários pré-definidos; ● Limite máximo aceitável de tempo.
  • 93.
    Abrir Coordenação deMudança Automática
  • 94.
    Abrir Coordenação deMudança Automática
  • 98.
  • 99.
  • 100.
  • 101.
  • 102.
    Deploy em PRODUÇÃO ●Entrada: Versão para Deploy ○ pegar binário no repositório; ○ verificar propriedades do binário (pode fazer deploy?); ○ executar deploy em Produção; ○ atualizar propriedades do binário.
  • 103.
    Deploy em PRODUÇÃO ●Entrada: Versão para Deploy ○ pegar binário no repositório; ○ verificar propriedades do binário (pode fazer deploy?); ○ executar deploy em Produção; ○ atualizar propriedades do binário. ● Saída: Servidores e propriedades do binário atualizados
  • 106.
  • 107.
    Alguns Resultados • Deployspor camadas (Tomcat, Apache, Varnish, Solr, Serviços);
  • 108.
    Alguns Resultados • Deployspor camadas (Tomcat, Apache, Varnish, Solr, Serviços); • Deploy em qualquer horário;
  • 109.
    Alguns Resultados • Deployspor camadas (Tomcat, Apache, Varnish, Solr, Serviços); • Deploy em qualquer horário; • 90 pipelines em 1 ano;
  • 110.
    Alguns Resultados • Deployspor camadas (Tomcat, Apache, Varnish, Solr, Serviços); • Deploy em qualquer horário; • 90 pipelines em 1 ano;
  • 111.
    Alguns Resultados • Deployspor camadas (Tomcat, Apache, Varnish, Solr, Serviços); • Deploy em qualquer horário; • 90 pipelines em 1 ano; • Devs fazendo Deploy em PRODUÇÃO (pelo Jenkins, é claro) o/;
  • 112.
    Alguns Resultados • Deployspor camadas (Tomcat, Apache, Varnish, Solr, Serviços); • Deploy em qualquer horário; • 90 pipelines em 1 ano; • Devs fazem Deploy em PRODUÇÃO o/; • Tempo de entrega
  • 113.
    Alguns Resultados • Deployspor camadas (Tomcat, Apache, Varnish, Solr, Serviços); • Deploy em qualquer horário; • 90 pipelines em 1 ano; • Devs fazem Deploy em PRODUÇÃO o/; • Tempo de entrega (2 horas).
  • 114.
  • 115.
  • 117.
    Contatos ➔ testedesoftware.com ➔ rtstreinamentos.com.br ➔medium.com/@samantacicilia ➔ Linkedin: Samanta Cicilia ➔ Twitter: @samantacicilia ➔ Slideshare: pt.slideshare.net/samantacicilia/ ➔ Email: samanta.souza@infoglobo.com.br ➔ Email: samycici@gmail.com

Notas do Editor

  • #11 Faz sprint de 15 dias e coloca em PRD no fim Um grande pacote com muitas mudanças Deploy traumático e penoso, faz cada vez menos
  • #19 Falar do antes
  • #20 Falar do antes