Escolar Documentos
Profissional Documentos
Cultura Documentos
'
Apresentação
A Academia DevOps
1
A sigla SRE vem de Site Reliability Engineering, com a tradução livre de Engenharia
de Confiabilidade do Site.
DevOps e a Revolução no Desenvolvimento de Software 2
O Autor
O Ebook
Espero que gostem de tudo que está sendo preparado aqui e que
aproveitem ao máximo esse compilado de informações sobre
DevOps. Estamos trabalhando para produzir muitos outros materiais
didáticos para a Academia DevOps. Para sugestões de melhorias e
correções (sempre bem vindas), utilize o e-mail
suporte@academiadevops.dev.br.
DevOps e a Revolução no Desenvolvimento de Software 8
Introdução
A Engenharia de Software
O que é DevOps?
Por outro lado, havia também empresas que enxergavam que esses
softwares não eram a razão de ser das empresas que os inventaram
e para elas era interessante disponibilizá-los na forma de software
livre. Isso seria uma forma de alavancar o desenvolvimento do
software de apoio com colaboradores externos ajudando
diretamente no desenvolvimento e aumentando rapidamente a base
de usuários que experimentam e comprovam o funcionamento.
Assim, o Docker foi inventado para suportar um negócio de
computação em nuvem e o Kubernetes foi inventado para suportar
as operações do Google.
DevOps e a Revolução no Desenvolvimento de Software 13
2
Git é um sistema de controle de versões, usado principalmente no desenvolvimento de
software para versionamento de código, mas que pode ser usado para registrar o histórico de
edições de qualquer tipo de arquivo.
DevOps e a Revolução no Desenvolvimento de Software 20
Com as mudanças que vimos até agora, já dá para ter uma ideia de
que algumas tarefas ficam bem no meio das atividades de
desenvolvimento e operação. O pipeline3, por exemplo, começa
com um push no código (tarefa de desenvolvedor) e termina com a
implantação de uma aplicação em um servidor (tarefa de operador).
Mas o pipeline, muitas vezes, é um elemento único que executa
todas essas etapas. Fica muito claro que essa tarefa não vai ser
bem executada sem uma colaboração de ambas as partes.
3
Um pipeline de DevOps é um conjunto de processos e ferramentas automatizados que
permitem que desenvolvedores e profissionais de operações trabalhem de maneira coesa na
criação e implementação de código em um ambiente de produção.
4
Uso sempre o termo Engenheiro DevOps ou Analista DevOps para identificar o profissional.
DevOps, pura e simplesmente, é um termo que pode ser associado a muitas outras atividades.
Mas o pior é que os desenvolvedores acreditam muitas vezes que não precisam entender
sobre DevOps já que existe o profissional DevOps para isso. Desenvolvedores só devem ser
incluídos em um ambiente DevOps se entenderem que também são Desenvolvedores DevOps.
DevOps e a Revolução no Desenvolvimento de Software 22
5
Código declarativo é um código na forma de uma lista de itens, como declarações de
variáveis, classes e atributos. Um código imperativo tem a forma de uma lista de ações ou
comandos. Ambos têm o mesmo efeito prático, mas declarar um servidor como se fosse uma
classe e suas características como atributos parece interessante. Bem mais que todos os
comandos para instalar uma aplicação ou serviço rodando scripts.
DevOps e a Revolução no Desenvolvimento de Software 24
Resumo do Capítulo
6
O símbolo do infinito tem um nome “oficial”, mas pouco conhecido: “lemniscata”; que, em
grego, significa algo como “guirlanda” (uma espécie de coroa de flores que pode ser usada
como objeto decorativo em portas, por exemplo).
DevOps e a Revolução no Desenvolvimento de Software 28
2.1. Plan
Tudo começa com um planejamento inicial. É o que conhecemos
como Sprint Refinement e Sprint Planning no Scrum ou
Replenishment Meeting na adaptação de David J. Anderson para o
Kanban. O objetivo é especificar as tarefas a serem executadas
pelo time, definir como são avaliadas, mapear riscos e dificuldades.
O foco é sempre ficar atento ao menor conjunto de tarefas que,
devidamente executadas, entregam valor ao cliente. Também é
importante postergar a análise daquelas tarefas que são
importantes, mas que não têm os requisitos necessários para serem
iniciadas.
O plano também deve ser adaptável. A ideia, mais uma vez, é não
ser prescritivo e dar a autonomia para que cada um possa entregar
a tarefa da forma que julgar melhor. É necessário garantir aos
membros que a ajuda virá quando necessário. Desenvolvedores
precisam ter a ajuda dos operadores se sua tarefa mostrar essa
DevOps e a Revolução no Desenvolvimento de Software 29
2.2. Code
Uma vez estabelecidas as tarefas e o modelo de colaboração, cada
um começa a executar as tarefas de desenvolvimento. Muitos
interpretam essa etapa do ciclo como atividades exclusiva de
desenvolvedores. Outros interpretam que operadores vão
desenvolver seus artefatos de IaC, de operação (como os usados
no Ansible apenas para citar um exemplo), pipelines, etc. O fato é
que seja nessa etapa ou nas etapas de release, deploy e operação,
essas atividades de codificação também serão executadas pelos
operadores.
2.3. Build
O build é a etapa de construção do artefato de software no formato
em que vai ser utilizado no ambiente de runtime. Porém, muitas
checagens podem acontecer antes dessa construção,
especialmente checagens de estilo de código e testes estáticos. É
comum ter uma checagem de segurança também.
2.4. Test
Um bom estudo de testes aqui pode ser interessante para avaliar
quais os tipos de testes incluir no pipeline e quais testes serão
feitos após o build, manualmente. Testes unitários, de integração,
funcionais, end-to-end, de carga e performance podem ser
incluídos para executar nos diversos ambientes automaticamente.
Às vezes, é bom ter a avaliação de um QA7 experiente. Mais uma
vez a Engenharia de Software já tem muito a oferecer e vou me ater
ao que o modelo DevOps inclui como inovação. De maneira geral, o
7
A sigla significa Quality Assurance (QA), que pode ser traduzido como “Garantia de
Qualidade”, faz referência a um profissional ou uma equipe cuja função é garantir a qualidade
no desenvolvimento de um produto ou serviço, no caso específico um produto de sofware.
DevOps e a Revolução no Desenvolvimento de Software 32
2.5. Release
Agora estamos iniciando a abordagem das etapas que ficam do
lado direito do Ciclo DevOps (a parte de Operações, na figura do
início desta seção representada pelo lado verde). Release é a etapa
na qual todos vão trabalhar para que o que foi produzido e testado
nas etapas anteriores chegue ao ambiente de produção e esteja
acessível aos usuários. Muitas tarefas da equipe de operações vão
garantir que todas as configurações necessárias ao novo código
produzido sejam efetivadas e conferidas.
2.6. Deploy
O deploy é o conjunto de atividades necessárias para colocar a
aplicação para rodar. Como já vimos, é comum essas atividades
estarem na sequência dos testes e serem executadas de forma
automatizada, especialmente no ambiente de desenvolvimento.
2.7. Operate
Uma vez que a equipe esteja confiante que a release e o deploy
foram bem sucedidos, entramos em um momento mais tranquilo de
operação do ambiente no qual a aplicação roda. Esse é o momento
em que os operadores, geralmente os SRE em um time maior, vão
verificar problemas e fazer as modificações necessárias para a
continuidade da operação.
2.8. Monitor
Outra atividade importante é o monitoramento. Coletar métricas é
essencial para entender: (1) o que acontece em “tempo real”; (2)
para entender as condições antes do acontecimento de um
problema; (3) prever a necessidade de recursos num futuro
próximo; (4) gerar insumos para atividade de otimização da solução
DevOps e a Revolução no Desenvolvimento de Software 36
Resumo do Capítulo
3. Mudança de Cultura
9
Eu acredito que essa não é uma atividade do Engenheiro DevOps. É a minha opinião, mas eu
mesmo já trabalhei em lugares em que assumi essa responsabilidade em algum grau. O fato é
que uma pessoa não muda a cultura sozinho e fazer “aliados” que ajudem a convencer os
demais é uma boa estratégia. Além disso, é importante dividir essa carga.
DevOps e a Revolução no Desenvolvimento de Software 43
mais calma e sem a correria que uma falha geralmente exige. Então,
basta voltar à situação antes do problema.
Veja, nenhum item da lista foca em quem. Mais que isso, temos de
promover um ambiente no qual podemos confiar nas pessoas,
especialmente em sua capacidade técnica. Se uma pessoa não é
capaz de executar uma tarefa como esperado o erro é a atribuição
da tarefa, não a execução. E se atribuímos uma tarefa confiamos
que o envolvido é capaz e o melhor profissional disponível para
executá-la. Confiamos nisso com a certeza de que o melhor
profissional do mundo também pode cometer falhas e que se elas
acontecerem vamos todos ajudar a resolver como um time. E se o
nosso companheiro de time ainda não é o melhor nisso temos de
ter a confiança de que ele está fazendo o necessário para chegar
lá. Ele vai se tornar o especialista que precisamos para alcançar os
objetivos necessários e pode contar com o resto do time para
ajudá-lo.
Resumo do Capítulo
10
CI (Continuous Integration ou Integração Contínua) é uma prática em desenvolvimento
utilizando DevOps em que DEVs frequentemente integram suas alterações de código em um
repositório central.
11
CD (Continuous Delivery – Entrega Contínua e/ou Implantação Contínua) é uma prática em
desenvolvimento utilizando DevOps em que os times de desenvolvimento lançam novas
funcionalidades de forma constante e automatizada.
DevOps e a Revolução no Desenvolvimento de Software 51
Redes e Conectividade
12
O troubleshooting envolve a execução de técnicas para a resolução de ocorrências que
afetam a infraestrutura de computadores e sistemas, produtos e serviços de redes de
computadores.
DevOps e a Revolução no Desenvolvimento de Software 52
13
VPN significa “Virtual Private Network” (Rede Privada Virtual) e descreve a oportunidade de
estabelecer uma conexão de rede protegida ao usar redes públicas (comumente a Internet).
VPNs criptografam seu tráfego de Internet e disfarçam sua identidade online, o que torna mais
difícil para terceiros rastrear suas atividades online e roubar seus dados.
14
O Modelo OSI é um modelo de referência de rede de computador definido pela organização
de padronização ISO. O modelo é dividido em camadas de funções e estabelece padrões para
protocolos de comunicação entre os mais diversos sistemas em uma rede local.
DevOps e a Revolução no Desenvolvimento de Software 53
Computação em Nuvem
Scrum ou Equivalente
4.2. Plan
Um conjunto de ferramentas no qual há um envolvimento maior dos
gerentes de projetos e product owners é usado nessa fase. O leitor
não deve investir muito tempo nelas já que a maioria é muito
intuitiva. O objetivo é muito mais saber que existe que realmente
estudar e dominar. Por isso mesmo, vou quebrar o protocolo e vou
dividir as ferramentas pelo seu uso.
Dashboard de Tasks
Ferramenta de Comunicação
4.3. Code
Essa é uma parte difícil de prever porque geralmente as
ferramentas mudam de acordo com a linguagem, o framework e
outras peculiaridades. De qualquer forma, tudo começa com um
bom editor de código.
VisualStudio Code
Nano, VI e VIM
melhor. Dedique até algum tempo para editar arquivos sem usar
editor se quiser fazer uso avançado. Evite estudar editores que
você não vai encontrar com frequência, por mais que seja tentador.
4.4. Build
Quanto ao CI temos duas vertentes: plataformas e ferramentas
agregadas a repositórios. Quando usamos uma plataforma,
geralmente há um evento que sinaliza uma ocorrência como um
push ou pull request. Geralmente é um webhook ou algo parecido
que dispara uma ação em uma plataforma independente.
Ferramentas agregadas quase sempre monitoram o evento e, elas
mesmas executam parte ou todo o processo de CI. Como opinião
pessoal, acho as ferramentas agregadas mais modernas e
eficientes, mas a gente nem sempre decide o que usar. Portanto, é
interessante conhecer ambos.
Jenkins
GitHub Actions
Por ser tão versátil, muitos usam essas ferramentas tanto para CI
quanto para CD. Você pode, por exemplo, cadastrar as credenciais
de acesso do seu cluster em um secret e rodar comandos kubectl
diretamente do seu pipeline para rodar aplicações no seu cluster de
containers. E como usa massivamente shell script qualquer coisa é
virtualmente possível, basta ter criatividade suficiente. Cada
plataforma tem seu próprio modelo muito parecido como o
GitLab-CI e o BitBucket-Pipelines.
4.5. Test
Essa é mais uma etapa que depende muito do projeto, da
linguagem adotada ou de frameworks utilizados. Apenas para
DevOps e a Revolução no Desenvolvimento de Software 58
ArgoCD
Terraform
4.7. Operate
Docker
K3S
Kubernetes
Ansible
4.8. Monitor
Prometheus
Grafana
Loki
Istio
Resumo do Capítulo
5. Conclusão