Skip to content

Instantly share code, notes, and snippets.

@matheusdias0211

matheusdias0211/devops.md Secret

Created Dec 2, 2020
Embed
What would you like to do?

Concrete-Devops-Fundamentals

O que é DevOps

DevOps tem sido sinônimo para cargo e ferramentas, mas muito mais que isso o conceito DevOps surge com a necessidade de gerar valor, eliminando processos manuais e unindo os times em prol de um bem maior. Além disso precisamos garantir a qualidade,monitoramento, rastreabilidade, alta disponibilidade na hora de gerar as entregas e aí que entra a confusão com a caixinha de ferramentas que auto-rotulam o termo,e que apesar dessa definição incorreta, nos auxiliam no dia-à-dia e permitem que os processos que ocorrem sejam rastreados, monitorados, automatizados, entre outros gerando software entregável e funcional, mesmo que em partes à esteira de produção. Esses pedaços ou softwares completos irão então melhorar a experiência de quem utiliza e espera algo de um aplicativo, site, plataforma e etc.

É um tanto difícil definir algo abstrato não tão somente intangível, mas também cheio de significados. Pensando em uma analogia e que particularmente ilustra muito bem o termo, pensemos em um artesão que antigamente precisava produzir a matéria-prima, esperar seu processo de maturação para depois produzir algo que levava bastante tempo, sendp muitas vezes repetitivo e só assim gerar uma venda. Com o surgimento das indústrias esse tempo foi gasto com coisas que de fato importavam, pois a parte de produção já estava automatizada e as mais diversas pessoas se uniram em times para pensar em velocidade, redução de custos, qualidade, disponibilidade do produto entre uma série de outros fatores que geram não só uma venda, mas uma ótima experiência em escala. E é isso que é o DevOps, gerar experiências em escala unindo as pessoas em times coesos usando tecnologia como base.

A cultura

DevOps é cultura, mas o que isso quer dizer? Quer dizer que existem diferenças entre desenvolvedores e operação, mas não que isso de fato gere confusão. Também não é contratar um profissional faz tudo ao invés de contratar duas pessoas com bases de conhecimento diferentes.

Consultando a literatura temos a seguinte afirmativa - DevOps na prática: entrega de software automatizada

Inspirado no sucesso dos métodos ágeis, um novo movimento surgiu para levar a mesma linha de raciocínio para o próximo nível: O movimento DevOps. Seu objetivo é criar uma cultura de colaboração entre as equipes de desenvolvimento e operações que permite aumentar o fluxo de trabalho completado - maior frequência de deploys - ao mesmo tempo aumentando estabilidade e robustez do ambiente de produção.

Quando abordamos cultura pensamos em descentralização de conhecimento, harmonia nos fluxos de trabalho e prezar por qualidade usando o que existe de melhor tanto tecnológicamente quanto de forma a garantir melhores processos, respeitando as particularidades dos cenários, pensando em garantir uma esteira de desenvolvimento autossuficiente para que o trabalho flua da melhor maneira possível, eliminando processos manuais e repetitivos sem comprometer a entrega.

Agilidade e Automação

Como mencionado diversas vezes anteriormente no texto, DevOps trabalha de forma ativa em automatizar e agilizar processos para gerar cada vez mais software pronto para produção sem diminuir a qualidade, e aí entram alguns conceitos primordiais como:

  • Continuous Delivery(Entrega Contínua) : Tem como objetivo gerar artefatos prontos que necessitam de uma aprovação manual para ir para produção, gerando artefatos aptos para produção a partir de ciclos curtos. Garante que os artefatos, bem como seu ecossistema estejam prontos para serem consumidos e utilizados, garantindo que o resultado final já esteja minimamente testado, validado e funcionando com os outros componentes, permitindo assim que se entregue software com mais frequência a um clique de aprovação. A partir desse processo é possível garantir mais segurança, melhor trabalho em equipe, maior satisfação para o cliente que tem sua experiência melhorada com novas features, melhor rastreabilidade de código, entre outros benefícios.

  • Continuous Integration : Tem como premissa etapas customizáveis para garantir software confiável disponível no final da esteira. Melhor exemplificando, ao termos código desenvolvido o mesmo deve passar por uma esteira que garanta sua qualidade, bem como automatização de processos e testes, gerando através de múltiplos códigos desenvolvidos por múltiplas pessoas um entregável único, testado, qualificado e apto para produção através de um mesmo processo que permita confiar no software ou pedaço de software desenvolvido pelo time. Algumas ferramentas nos auxiliam nesse processo como Jenkins, GitlabCI, Drone, Bitbucket Pipeline, CircleCi, AWS Code Pipeline e etc.

  • Continuous Deployment: Tem como objetivo gerar artefatos prontos que são automaticamente mandados para produção.

Cada um desses itens se preocupa em garantir processos bem definidos para entrega de software produtivo, incluindo Testes, Tolerância à Falhas, Alta Disponibilidade, Confiabilidade e etc., bem como uma participação de todos os componentes do time de forma autocolaborativa, autosuficiente e autogerenciável.

C.A.L.M.S.

A sigla C.A.L.M.S refere-se a Culture, Automation, Lean, Measurement, e Sharing. O termo foi definido pelo Jez Humble, um dos autores do livro "The DevOps Handbook".

Cultura

A Cultura visa melhorar o relacionamento interpessoal do time, consequentemente melhorando a entrega, aceitar mudanças e fazer experimentação.

A Cultura está relacionada com a mudança de mentalidade dos membros do time para colaboração e entrega de valor. Para atingir os objetivos da Sprint, precisamos que, independente do papel exercido, todos os membros do time se envolvam e contribuam ativamente com a entrega, compartilhando a responsabilidade.

Automação

Automação elimina trabalhos manuais repetitivos e evita erros. Combinada com testes automatizados, a automação gera respostas rápidas identificando bugs e falhas de segurança antes da implantação (deploy) em produção. Infraestrutura como código e entrega contínua estão relacionadas com automação.

Lean (magro, enxuto)

O conceito de Lean está relacionado com evolução incremental e separar o trabalho em pequenas tarefas. Pequenas tarefas são mais fáceis de colocar em produção. Quando uma falha ocorre, o time deve focar em elaborar um modo de evitar que essa falha ocorra novamente no futuro. Desse modo a evolução do processo de geração de valor evolui, evitando desperdícios de tempo e esforço.

Measurement (medição)

Como podemos confirmar se as nossas ações geram melhoria contínua? Através de métricas, ganhamos a visibilidade das melhorias, comparando diversas grandezas tais como número de bugs resolvidos nos sprints, monitoramento da performance geral de um website, porcentagem do code coverage (cobertura de testes), crescimento do número de usuários, velocidade de resposta do banco após criação de índice. Amplo é a aplicação das métricas e seus benefícios.

Sharing (compartilhamento)

O compartilhamento de reponsabilidade e informação elimina a distância entre papéis tais como o de desenvolvedor e operação. Deste modo um membro do time não fica isolado tentando resolver um problema sozinho pois outros membros podem ajudar na resolução devido ao conhecimento compartilhado.

As três maneiras (Three Ways)

As três maneiras são um grupo de princípios de onde se derivam grande parte dos comportamentos e padrões dentro da cultura e práticas DevOps. São elas:

1ª Maneira - Fluxo

O fluxo de trabalho é descrito como sendo unidirecional, onde nenhum defeito do estágio atual (de desenvolvimento) deve ser passado para o próximo estágio (de operação. O fluxo deve também ser contínuo, com work-in-progress limitado e consequentemente com maior frequência de evolução. Entre as práticas resultantes deste princípio estão integração e builds contínuos, testes e processos de implementação.

2ª Maneira - Feedback

A segunda maneira complementa a primeira com um canal de feedback constante entre operação e desenvolvimento, com o intuito de previnir que as falhas conhecidas ocorram novamente e que eventuais problemas sejam rapidamente identificados e tratados. Feedbacks constantes também promovem o mapeamento de melhorias. Essas práticas maximizam as oportunidades de melhoria e aprendizado contínuos.

3ª Maneira - Aprendizado Contínuo

A terceira maneira adiciona ciclos, quase que diários, de experimentação onde evolução baseada em fatos é constante e acertos e erros são insumo para potencializar o aprendizado, e criar um ambiente onde não é saudável atribuir culpa (blameless). Busca transformar descobertas locais em melhorias globais a partir de toda a iteração realizada durante o trabalho, sempre mantendo o fluxo unilateral e os feedbacks constantes.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment