0% acharam este documento útil (0 voto)
11 visualizações76 páginas

Modulo II - Tornando o Pipeline Possivel

O documento aborda práticas de DevOps, destacando a importância da integração contínua e entrega contínua no desenvolvimento de software. Ele explora conceitos como pipelines, automação de testes, e a utilização de ferramentas como Git, GitLab e Travis-CI para facilitar o fluxo de trabalho. Além disso, discute a criação de ambientes de desenvolvimento e a necessidade de garantir qualidade e segurança no código através de testes automatizados.

Enviado por

gabrielhpm
Direitos autorais
© © All Rights Reserved
Levamos muito a sério os direitos de conteúdo. Se você suspeita que este conteúdo é seu, reivindique-o aqui.
Formatos disponíveis
Baixe no formato PPTX, PDF, TXT ou leia on-line no Scribd
0% acharam este documento útil (0 voto)
11 visualizações76 páginas

Modulo II - Tornando o Pipeline Possivel

O documento aborda práticas de DevOps, destacando a importância da integração contínua e entrega contínua no desenvolvimento de software. Ele explora conceitos como pipelines, automação de testes, e a utilização de ferramentas como Git, GitLab e Travis-CI para facilitar o fluxo de trabalho. Além disso, discute a criação de ambientes de desenvolvimento e a necessidade de garantir qualidade e segurança no código através de testes automatizados.

Enviado por

gabrielhpm
Direitos autorais
© © All Rights Reserved
Levamos muito a sério os direitos de conteúdo. Se você suspeita que este conteúdo é seu, reivindique-o aqui.
Formatos disponíveis
Baixe no formato PPTX, PDF, TXT ou leia on-line no Scribd
Você está na página 1/ 76

Engenharia de DevOps

Fernando Augusto Medeiros Silva


Práticas da Primeira Maneira
O que é uma pipeline
Quando começa a Integração

• Planejamento: Desenvolvimento Ágil, Kanban, Scrum


• Codificação: TDD, BDD, Controle de Versão
• Construção: Integração Contínua
• Implantação: Entrega Contínua
• Operação: Gestão de infraestrutura, incidentes,
Configuração, acesso...
• Feedback: Telemetria
Entrega Contínua

• "Entrega Contínua é a capacidade de implementar


mudanças de todos os tipos — incluindo novas
funcionalidades, alterações de configuração, correções
de bugs e experimentos — em produção, ou nas mãos
dos usuários, de forma segura e rápida e sustentável.“

Fonte: FARLEY,Dave;HUMBLE,Jez. continousdelivery.com


Integração Contínua
“É uma prática de desenvolvimento de software na qual
cada membro de uma equipe mescla suas mudanças em
uma base de código junto com as mudanças de seus
colegas pelo menos diariamente. Cada uma dessas
integrações é verificada por uma construção
automatizada (incluindo teste) para detectar erros de
integração o mais rápido possível.”
Martin Fowler
Fonte: martinfowler.com
Do fluxo a pipeline

• Identificar valor
• Mapear o fluxo de valor
• Criar um fluxo de trabalho contínuo
• Estabelecer um sistema de produção puxada
• Facilitar a melhoria contínua.
Eficiência

“Quanto tempo você demora para implantar uma


mudança com somente uma linha de código?"
Mary Poppendieck
Fonte: aws.com
Glossário

• Bake (Assar): Preparação de imagens de ambiente de execução


que incluem configurações e softwares necessários para a
operação.
• Branch (Ramo): Representa uma cópia separada do código fonte,
permitindo desenvolvimento ou correções isoladas sem afetar o
código principal.
• Build (Construir): Processo de compilar e preparar o código fonte
para gerar artefatos executáveis do software.
Glossário
• Deploy (Implantar):Colocar um software ou uma aplicação em
funcionamento no ambiente de produção ou outros ambientes
operacionais.
• Integrate (Integrar): Ação de combinar e sincronizar código de
diferentes fontes para formar um sistema unificado.
• Prod (Produção): Ambiente onde o software é executado e usado
pelos usuários finais após completar todos os testes e validações.
Glossário
• Promotion (Promoção): Processo de avançar software através de
diferentes estágios ou ambientes de desenvolvimento até a
produção, baseado na estabilidade e qualidade
• Quality Gate (Portão de Qualidade): Ponto de controle onde o
software precisa satisfazer critérios pré-definidos de qualidade
antes de avançar para o próximo estágio do ciclo de vida.
• Shift Left (Deslocar para a Esquerda): Estratégia de trazer práticas
de teste e qualidade mais cedo no processo de desenvolvimento
para melhorar a qualidade e reduzir correções tardias.
Glossário
• Test (Testar): Processo de executar um programa ou aplicação
com o objetivo de identificar erros, falhas ou defeitos.
• UAT (Teste de Aceitação do Usuário): Fase final de testes antes do
lançamento do software, onde usuários finais verificam se o
sistema atende às suas necessidades e expectativas.
Tonando o Pipeline possível
Requisitos
• Possibilitar a criação sob demanda de ambiente de DEV,
UAT, PRD
• Criar nosso repositório único de verdade para o sistema
inteiro
• Tornar a reconstrução da infraestrutura mais fácil que o
reparo
• Modificar o DoD (Definition of Done) para incluir a
execução em ambientes do tipo produção
Criação de ambientes Automática
• A verdade saberemos somente em produção,
trabalhamos com proximidade
• Criação automática permite corrigir os erros de
forma iterativa
• Ambientes são caros. Desligue quando não usar
• Criação por código permite experimentar
• Sempre é possível reconstruir
Casos
• Zero-Hora: Login gastando 4 a 5 minutos
• Diferença de Banco de Dados Dev PRD
• Quase Perda de contrato
• Helthcare.org: Ambiente de testes não era
suficiente para um teste de larga escala. Fracasso
de lançamento
Infra Estrutura como código
Cloud x on Premises

Fonte: aws.com
google.com
Microsoft.com
Fonte Única da Verdade

• DevOps é sobre quebrar silos


• Disponibilidade como um supermercado
• Transparencia
SCM (Source Control Manager)
Git

• Criado por Linus Torvalds em 2005


• Arquitetura distribuída
• Foco em controle de Branchs
• Simples:
• git clone
• git checkout, merge, commit
• git push, pull
Fonte: screenshot/youtube
Fonte única da verdade

• Colaboração
• Visibilidade para todos
• Histórico
• Comentários
• Rollback
• Integração com ferramentas
O que vai no GIT? Tudo

• Código de aplicativo
• Scripts de build
• Código de Testes
• Scripts de empacotamento
O que vai no GIT? Tudo

• Código do IaC
• Scripts de Configuração de ambiente
• Estados de implantação
O que vai no GIT? Tudo

• Arquivos de configuração em geral


• DNS
• Firewall
• Permissionamento
• Rotas
• Documentação
Repositório de objetos

• Arquivos binários
• Bibliotecas
• Arquivos que precisam de acesso para integração
Repositório de objetos

• Web Object Storage


Pipeline Triggers

• Execução de código automática em ações no repositório


• Base do CICD moderno
• Possibilidade de Linters
• Operação por Merge Request
Reconstruir mais fácil que reparar

• Construção automática + Fonte da verdade


• Ambiente Descartável
• Maquinas Cattle
• Maquinas PET
Exemplos

• Pool de máquinas escaláveis


• Containers
• Where There's A Will, There's A Way
Possibilitando Testes Automatizados
Build Contínuo Integração contínua

• Testes são loops de feedback


• Manter a qualidade próxima da fonte
• Andon cord
• Manter o estado implementável
Pipeline CI
Plan Code Build Teste Release

Fonte: freeimages.com
Colaboração + Confiança + Experimentação

Domínios de responsabilidade
Aprovação + Operação

Fonte: freeimages.com
Testes Automatizados
Aprovação Automática
Análise Teste de
Teste Teste de
de Build Integração Performance
Unitário Aceitação
Código

Aprovação Manual

Implantação Implantação
Staging/Teste Produção
• TDD Test drive Development
• BDD Behaviour Drive Development

Fonte: freeimages.com
Teste Unitário

• Teste de dentro para fora


• Componentes de software

Fonte: cleancode.org
Teste Unitário

• Pytest
• JUnit
• golang test, testify
Teste Integração

• Componentes integrados
• Verifica se partes do software funcionam entre si

Fonte: freeimages.com
Teste Aceitação

• Pytest, Behave, unittest


• JUnit, spring test
• Testify, GoConvey, Ginkgo

Fonte: freeimages.com
Teste Exploratório (Manual)

• Smoke Test
• Procurando por erros específicos

Fonte: freeimages.com
Teste Regressivo

• Procura por involução


• Manual ou automático
• Selenium Webdriver

Fonte: freeimages.com
Teste Desempenho

• Disciplina específica
• Objetivo na pipeline é evitar regressão
• Requer trabalho anterior de medição correta
• Teste de performance é uma disciplina ligada
a estatística
Fonte: amazon.com
Pitfalls

• Falta de metas
• Metas enviesadas
• Abordagem não sistemática
• Análise sem compreensão do problema
• Métricas erradas
• Workload não representativo
• Técnica equivocada
• ...
Teste Desempenho

• Golden Signals
• Latência
• Vazão
• Saturação
• Taxa de erros
• Percentil 99,95, 99
• Média e Mediana
Teste Desempenho

• K6
• JMeter
• Locust

Fonte: freeimages.com
Testes de Qualidade de Código e Segurança

Quality Gate
Enforce de estilo
Coverage Test
Análise de segurança -SAST DAST (Shift Left)
Testes de Qualidade de Código e Segurança

• SonarQube
• Veracode
• SAST
• DAST

Fonte: freeimages.com
Fuzzy & Mutatinng

• Fuzzy Test
• Insere valores aleatóreos nas funções
• Busca por falhas de tratamento
• Mutating Test
• Modifica partes do código
• Verifica a qualidade dos Testes

Fonte: freeimages.com
Piramide de testes IDEAL vs NÃO IDEAL

Teste Teste Manual


Manual
GUI
automático
Gui Automático
API Automático

Integração Automático Integração


Componente automático automático
Teste
Unitário
Teste Unitário

Fonte: TestPyramid Martin Fowler


Performance de Testes
Aprovação Automática
Análise Teste de
Teste Teste de
de Build Integração Performance
Unitário Aceitação
Código
Performance de Testes
Aprovação Automática
Performance

Análise
Teste Teste de
de Build
Unitário Aceitação
Código

Teste de
Integração
Requisitos Não funcionais

• Testar configuração automática


• Linters
• Megalinter!
• Ambiente UAT e PRD diferem de tamanho não natureza

Fonte: freeimages.com
Praticando a integração contínua
Integração contínua

• Todos devem integrar seu código ao repositoório principal


pelo menos 1 vez ao dia
• Integração é passar por todos os passos até o último antes
dos testes manuais
• Software integrado está pronto para o ambiente tipo
produção
Andon Cord

• Quebra da pipeline para a linha de produção


• Ninguém integra se a pipeline está parada

Fonte: freeimages.com
Trunk Based Development

• Otimizado para desempenho individual


• Dificuldade de merge no futuro
• Otimizado para integração em grupo
• Software sempre pronto para a produção

Fonte: freeimages.com
Branches
Garantia de lotes pequenos
Minimizar o WIP
Menor tempo de Merge
Menor tempo de build
Menor risco de conflitos
Menor alteração na produção
Menor chance de falhas
Menos retrabalho

Fonte: freeimages.com
O que precisamos para Integrar?
• Codificar
• Testes Unitários
• Análise de qualidade
• Codificar • Compilar
• Compilar • Segurança SAST/DAST
• ReLease • Testes de integração
• Entregar • Testes de aceitação
• Testes não funcionais
• Release
Ambientes de CI

• GitLab

• GitHub

• CodeFresh

• Travis

Fonte: worldvectorlogo.com
Requisitos Para integração

• Ambiente de build
• Ambiente de testes
• Execução no estágio de commit
• Implantação de pipeline visual

Fonte: freeimages.com
GitLab

• Ambiente Integrado: Git, CICD, Gestão de issues, documentação


• Configuração via arquivo .gitlab-ci.yml no repositório Git.
• Ampla variedade de executores (runners) disponíveis, incluindo
Docker, Kubernetes e máquinas virtuais.
• Visualização direta de pipelines e resultados de testes dentro da
interface Única
• Suporte extensivo para Docker, incluindo a construção e o push
de imagens diretamente em repositório próprio
GitHub Actions

• Configuração através de arquivos YAML dentro do


diretório .github/workflows do repositório.
• Integração nativa com GitHub Issues e Pull Requests.
• Marketplace de ações que podem ser reutilizadas em múltiplos
workflows.
• Extrema facilidade de uso para projetos hospedados no GitHub.
• Grande comunidade e ecossistema de ações pré-construídas.
Travis-CI

• Integra-se aos repositórios GIT


• Configuração através de um arquivo .travis.yml no repositório.
• Suporte para múltiplos sistemas operacionais, incluindo Linux,
macOS e Windows.
• Muito popular entre projetos de código aberto devido ao seu
plano gratuito para esses projetos.
• Setup simplificado e excelente documentação.
CodeFresh

• Codefresh é uma plataforma CI/CD construída para containers e


Kubernetes.
• Interface gráfica para a criação de pipelines.
• Integração nativa com Docker e Kubernetes.
• Dashboard integrado para visualizar builds, deploys e status de
testes.
• Foco em microserviços e orquestração de containers.
• Suporte robusto para práticas DevOps modernas.

Você também pode gostar