Fundamentos do DevOps: definição dos princípios de DevOps
23 de maio de 2022 // 14 min read
Desde manchetes até descrições de cargos, o DevOps surgiu como uma palavra da moda na última década, e por um bom motivo. As organizações que adotam o DevOps com sucesso costumam obter grandes ganhos em termos de velocidade de desenvolvimento de software, maior confiabilidade e iterações mais rápidas de produtos, além de terem mais facilidade em escalar seus serviços.
Desde manchetes até descrições de cargos, o DevOps surgiu como uma palavra da moda na última década, e por um bom motivo. As organizações que adotam o DevOps com sucesso costumam obter grandes ganhos em termos de velocidade de desenvolvimento de software, maior confiabilidade e iterações mais rápidas de produtos, além de terem mais facilidade em escalar seus serviços.
Porém, apesar de suas raízes no desenvolvimento de software, o DevOps é uma prática comercial holística que combina pessoas, processos, práticas culturais e tecnologias para reunir equipes anteriormente em pontos de isolamento com o objetivo de oferecer velocidade, valor e qualidade em todo o ciclo de vida do desenvolvimento de software.
Isso significa que muitas vezes não existe uma abordagem única para todos. Mas há um conjunto comum de práticas e princípios em qualquer implementação bem-sucedida de DevOps.
No guia a seguir, exploraremos essas práticas e princípios e responderemos às seguintes perguntas:
- Qual é o objetivo principal do DevOps?
- Quais são os princípios centrais do DevOps?
- Quais são os principais estágios de um fluxo de trabalho de DevOps?
- Qual o papel de todos no DevOps?
- Como é a segurança no DevOps?
- Quais são as melhores práticas de DevOps?
- Como o DevOps é diferente da metodologia Agile?
Qual é o objetivo principal do DevOps?
O principal objetivo do DevOps é agregar valor a fim de produzir um software melhor com mais rapidez, que as pessoas podem usar imediatamente sem problemas e fazer isso de uma maneira que vincule a infraestrutura subjacente, a arquitetura do software e as versões do código de engenharia com o mínimo de atrito.
No setor de software, existe a crença de que as organizações podem ou avançar rapidamente, ou criar produtos confiáveis. O DevOps torna possível fazer ambas as coisas, destas principais maneiras: reunindo as equipes de desenvolvimento e operações tradicionalmente em pontos de isolamento e integrando a automação em cada estágio do ciclo de vida de desenvolvimento de software (SDLC).
Quais são os princípios centrais do DevOps?
Inicialmente cunhado por Patrick Debois em 2009, o termo DevOps é uma combinação de “desenvolvimento” e “operações”, o que explica a ideia inicial por detrás do termo: aproximar as equipes de desenvolvimento e operações em uma relação de trabalho mais próxima. Historicamente, essas duas equipes trabalhavam em pontos de isolamento. Os desenvolvedores codificavam e criavam o software, enquanto as a equipe de operações executava testes de garantia de qualidade e trabalhava na infraestrutura subjacente para garantir implantações de código bem-sucedidas. Isso frequentemente gerava dificuldades na implantação do código, pois as equipes de desenvolvimento e operações entravam em conflito.
Enquanto Debois e outros líderes iniciais do DevOps, como Gene Kim e John Willis, geralmente caracterizavam o DevOps como a integração de desenvolvimento e operações para agilizar os processos de desenvolvimento e lançamento de software, o DevOps hoje evoluiu para uma prática comercial holística que vai além das equipes individuais.
No GitHub, abordamos o DevOps como uma filosofia e um conjunto de práticas que reúnem equipes de desenvolvimento, operações de TI e segurança para criar, testar, iterar e fornecer feedback regular durante todo o SDLC.
A implementação do DevOps será diferente em cada organização. Porém, todo ambiente de DevOps bem-sucedido segue os seguintes princípios fundamentais:
Colaboração
Para ter sucesso, o DevOps exige uma relação de trabalho estreita entre operações e desenvolvimento, duas equipes que historicamente eram isoladas uma da outra. Ao fazer com que as três equipes colaborem estreitamente sob um modelo de DevOps, você procura incentivar a comunicação e a parceria entre as três equipes para melhorar sua capacidade de desenvolver, testar, operar, implantar, monitorar e iterar sua pilha de aplicativos e softwares.
Controle de versão
O controle de versão é parte integrante do DevOps, e também da maior parte do desenvolvimento de software atualmente. O objetivo de um sistema de controle de versão é registrar alterações em arquivos automaticamente e preservar registros de versões anteriores desses arquivos.
Automação
A automação no DevOps geralmente significa aproveitar a tecnologia e os scripts para criar ciclos de feedback entre os responsáveis pela manutenção e escalabilidade da infraestrutura subjacente e os responsáveis pela criação do software principal. Desde ajudar a escalar ambientes até criar compilações de software e orquestrar testes, a automação no DevOps pode assumir várias formas diferentes.
A mentalidade que temos em nossa equipe é que sempre queremos nos automatizar para fazer um trabalho melhor.
Andrew Mulholland, diretor de engenharia da Buzzfeed
Lançamentos incrementais
Lançamentos incrementais são a base das práticas bem-sucedidas de DevOps e são definidos pelo envio rápido de pequenas alterações e atualizações com base na funcionalidade anterior. Em vez de atualizar um aplicativo inteiro, as versões incrementais significam que as equipes de desenvolvimento podem integrar rapidamente pequenas alterações na branch principal, testá-las quanto à qualidade e à segurança e, em seguida, enviá-las aos usuários finais.
Orquestração
Orquestração refere-se a um conjunto de tarefas automatizadas que são incorporadas em um único fluxo de trabalho para resolver um grupo de funções, como gerenciar contêineres, lançar um novo servidor Web, alterar uma entrada de banco de dados e integrar um aplicativo Web. De forma mais simples, a orquestração ajuda a configurar, gerenciar e coordenar os requisitos de infraestrutura necessários para um aplicativo ser executado com eficiência.
Pipeline
Em qualquer conversa sobre DevOps, é provável que você ouça o termo pipeline usado com bastante frequência. Em um sentido mais simples, um pipeline de DevOps é um processo que aproveita a automação e várias ferramentas para permitir que os desenvolvedores enviem seu código rapidamente para um ambiente de teste. Em seguida, as equipes de operações e desenvolvimento testarão esse código para detectar problemas de segurança, bugs ou outras preocupações antes de implantá-lo no ambiente de produção.
Integração contínua
A integração contínua, ou CI na sigla em inglês, é uma prática em que uma equipe de desenvolvedores fazer commit do código frequentemente para um repositório central compartilhado por meio de um processo automatizado de compilação e teste. Com o commit contínuo de pequenas alterações de código na base de código principal, os desenvolvedores são capazes de detectar bugs e erros com mais rapidez. Essa prática também facilita a união de mudanças de diferentes membros de uma equipe de desenvolvimento de software.
Entrega contínua
A entrega contínua é a prática de usar a automação para lançar atualizações de software aos usuários finais. A entrega contínua sempre segue a CI, o que permite que o software seja compilado e testado automaticamente antes de ser lançado para uso geral. Juntos, a CI e a entrega contínua compreendem dois terços de um pipeline típico de DevOps. Fundamentalmente, um modelo de entrega contínua automatiza tudo até a fase de implantação. Nesse ponto, é necessária intervenção humana para enviar o software aos usuários finais.
Implantação contínua
A implantação contínua, ou CD na sigla em inglês, é a parte final de um pipeline completo de DevOps e automatiza a implantação das versões do código. Isso significa que, se o código passar em todos os testes automatizados do pipeline de produção, ele será imediatamente liberado para os usuários finais. A CD elimina criticamente a necessidade de intervenção humana para orquestrar um lançamento de software, o que resulta em prazos de lançamento mais rápidos. Isso também dá aos desenvolvedores um feedback do mundo real mais imediato.
Monitoramento contínuo
O monitoramento contínuo é um conjunto de processos e ferramentas automatizados usados para solucionar problemas e que as equipes de desenvolvimento podem usar para embasar futuros ciclos de desenvolvimento, corrigir bugs e aplicar patch em problemas.
Um sistema de monitoramento contínuo bem estabelecido normalmente contém quatro componentes:
O registro em log oferece um fluxo contínuo de dados brutos sobre componentes essenciais para os negócios.
O monitoramento fornece inteligência sobre os dados brutos fornecidos em logs e métricas.
Alertas fornecem informações críticas de depuração e notificações proativas quando algo está errado.
O rastreamento leva o registro em log um passo adiante, fornecendo um nível mais profundo de desempenho do aplicativo e insights comportamentais que podem afetar consideravelmente a estabilidade e a escalabilidade dos aplicativos em ambientes de produção.
Compartilhamento de feedback (ou loops de feedback)
Compartilhamento de feedback (ou loops de feedback) é um termo comum de DevOps definido pela primeira vez no livro O Projeto Fênix, de Gene Kim. Kim explica da seguinte forma: "O objetivo de quase todas as iniciativas de melhoria de processos é encurtar e ampliar os loops de feedback, para que as correções necessárias possam ser feitas continuamente." Em termos simples, um ciclo de feedback é um processo para monitorar o desempenho do aplicativo e da infraestrutura em busca de possíveis problemas ou bugs e rastrear a atividade dos usuários finais dentro do próprio aplicativo.
Quais são os principais estágios de um fluxo de trabalho de DevOps?
O ciclo de vida de DevOps está baseado em encontrar formas colaborativas de planejar com antecedência, definir requisitos de aplicativos e infraestrutura, identificar áreas no SDLC que possam ser automatizadas e garantir que todos estejam na mesma página. Tudo isso se resume à meta do DevOps: agregar valor e produzir software de qualidade que alcance os usuários finais o mais rápido possível.
Os oito estágios de um fluxo de trabalho de DevOps de sucesso
1. Planejamento
Normalmente, um gerente de produto e um líder de engenharia trabalham em conjunto para planejar roadmaps e sprints. As equipes aproveitam ferramentas de gerenciamento de projetos, como painéis Kanban, para criar cronogramas de desenvolvimento.
Aprenda a usar o GitHub para planejar projetos com o GitHub Issues >>
2. Codificação
Após a conclusão do planejamento, os desenvolvedores começarão a criar o código e se envolverão em tarefas subsequentes, como revisão de código, code merges e gerenciamento de código em um repositório compartilhado.
Descubra como os desenvolvedores codificam no GitHub >>
3. Compilação
À medida que o código é desenvolvido e revisado, os engenheiros se empenham em fazer o merge (ou integração contínua) desse código no código-fonte em um repositório de código compartilhado e centralizado. Isso geralmente é feito com integração contínua para testar alterações de código e ferramentas de controle de versão para rastrear novos commits de código.
Veja como o GitHub habilita a CI/CD para integração de código e compilação de aplicativos >>
4. Testes
Durante o processo de compilação, testes contínuos ajudam a garantir que novas adições de código não introduzam bugs, quedas de desempenho ou falhas de segurança no código-fonte. Isso é feito por meio de uma série de testes automatizados que são aplicados a cada novo commit de código.
Aprenda a usar o GitHub para criar um pipeline de testes contínuos >>
5. Empacotamento
Antes de lançar uma nova iteração de um aplicativo, uma equipe empacotará seu código em uma estrutura que pode ser implantada. Às vezes, isso pode incluir o compartilhamento de componentes reutilizáveis para compartilhamento por meio de ecossistemas de pacotes, como npm, Maven ou Nuget. Isso também pode envolver o empacotamento do código em artefatos, que são criados durante todo o ciclo de vida do desenvolvimento do software, e a implantação destes em um ambiente de preparo para fazer as verificações finais e armazenar quaisquer artefatos.
Explore a solução de empacotamento integrado do GitHub >>
6. Lançamento
A equipe lançará uma nova versão iterativa de um aplicativo aos usuários finais. Isso normalmente inclui ferramentas ou scripts de automação de lançamento e ferramentas de gerenciamento de alterações que podem ser usadas caso uma alteração não funcione na implantação e precise ser revertida.
Veja como as empresas lançam softwares no GitHub >>
7. Operação
Em todos os estágios do SDLC, os profissionais de DevOps garantem o funcionamento da infraestrutura principal de que o aplicativo precisa para ser executado. Isso inclui a configuração de ambientes de teste, ambientes de preparo ou pré-implantação e ambientes de implantação.
Quando um aplicativo estiver sendo usado pelos usuários finais, também será necessário garantir que a infraestrutura subjacente, como contêineres e servidores baseados na nuvem, possa ser dimensionada para atender à demanda.
Os profissionais normalmente utilizam ferramentas de infraestrutura como código para garantir que os sistemas subjacentes atendam à demanda em tempo real à medida que aumentam e diminuem a escala. Eles também se envolverão em verificações contínuas de segurança, backups de dados e gerenciamento de banco de dados, entre outras coisas.
Saiba como o GitHub possibilita operações de software >>
8. Monitoramento
Os profissionais de DevOps implementam uma combinação de ferramentas e automação para realizar o monitoramento contínuo em todo o ciclo de vida do desenvolvimento de software, especialmente depois que o software é enviado aos usuários finais. Isso inclui monitoramento do desempenho dos serviços, monitoramento da segurança, monitoramento da experiência dos usuários finais e gerenciamento de incidentes.
Descubra como o GitHub oferece recursos avançados de monitoramento para as organizações >>
Uma das partes essenciais de um fluxo de trabalho de DevOps bem-sucedido é garantir que ele seja "contínuo", ou sempre ativo. Isso significa configurar um processo para garantir que o fluxo de trabalho tenha uma frequência recorrente contínua ou, mais simplesmente, garantir que você esteja colocando em prática seu fluxo de trabalho de DevOps.
Como uma equipe de DevOps é estruturada?
As organizações de maior sucesso com DevOps não se concentram na criação de "equipes de DevOps", mas sim na prática de DevOps. Ao fazer isso, essas organizações priorizam a criação de ambientes de DevOps colaborativos com uma abordagem completa que se estende por todas as equipes e se concentra em um produto de ponta a ponta, em vez de em projetos incrementais em pontos de isolamento.
Todas as equipes, desde operações e TI até engenharia, gerenciamento de produtos, experiência do usuário e design, desempenham um papel importante em um ambiente de DevOps bem-sucedido.
As melhores práticas de DevOps se concentram no papel que cada pessoa desempenha na missão organizacional maior, em vez de dividirem as equipes com base em responsabilidades individuais.
As funções de DevOps geralmente se enquadram em quatro áreas principais:
Planejamento: o planejamento é essencial para qualquer equipe de DevOps eficiente. Os membros da equipe que normalmente desempenham essa função incluem gerentes de projeto, líderes de SCRUM, gerentes de produto, líderes de operação e líderes de engenharia. As pessoas nessas funções ajudam a coordenar recursos, incentivar a comunicação, definir cronogramas de desenvolvimento e garantir que todos estejam trabalhando em prol de um objetivo comum.
Desenvolvimento: qualquer equipe de DevOps também sempre terá uma sólida função central de desenvolvimento, que inclui cargos que variam desde desenvolvedores juniores até desenvolvedores seniores, engenheiros de equipe, diretores de engenharia e muito mais. O objetivo aqui é desenvolver, fazer commit, examinar, fazer o merge e enviar o código.
Entrega: outro componente de uma equipe de DevOps bem-sucedida é fornecer iterações de aplicativos por meio de um pipeline de CI/CD funcional, no qual o código é integrado, testado, preparado e implantado. Isso é feito normalmente por uma equipe ou um líder de engenharia, que é responsável por tarefas de compilação, manutenção, monitoramento e aprimoramento do pipeline central de CI/CD. Normalmente, eles também garantem que as equipes de desenvolvimento e operações estejam cientes dos próximos lançamentos, dos problemas existentes e dos gargalos na implantação.
Operações: talvez a função mais importante de qualquer equipe de DevOps fora da divisão de desenvolvimento seja as operações. Esses profissionais são responsáveis por orquestrar o espaço do servidor, gerenciar contêineres, monitorar o desempenho dos aplicativos, lidar com incidentes e muito mais. Os cargos comuns incluem administradores de sistema, líder de operações, arquiteto de sistemas e engenheiro de sistemas, entre outros.
A principal lição
DevOps é uma transformação organizacional enraizada na quebra de pontos de isolamento, e isso exige a adesão de todos. Embora existam funções específicas em qualquer prática bem-sucedida de DevOps, as empresas mais bem-sucedidas evitam criar uma "equipe de DevOps" separada do restante da organização em um novo ponto de isolamento.
Qual é o papel da segurança no DevOps?
A segurança é importante em todo o ciclo de vida de DevOps, em termos do código que os desenvolvedores escrevem, da infraestrutura central que a equipe de operações cria, orquestra, escala e monitora, dos testes de segurança automatizados e muito mais. Os profissionais de DevOps geralmente utilizam ferramentas ou criam vários scripts e automações de fluxo de trabalho para testar continuamente seus aplicativos e infraestruturas em busca de vulnerabilidades de segurança. Essa prática é comumente chamada de DevSecOps, uma função derivada do DevOps na qual a segurança é priorizada com a mesma intensidade que o desenvolvimento e as operações.
Quais são as melhores práticas de DevOps?
TL;DR: as melhores práticas padrão de DevOps incluem mudanças culturais para quebrar pontos de isolamento entre equipes, bem como investimentos em tecnologia nas áreas de automação, integração contínua, implantação contínua, monitoramento contínuo e feedback contínuo.
De acordo com o Relatório de DevOps corporativo da Microsoft, as organizações que fazem a transição com sucesso para um modelo de DevOps enviam código com mais rapidez e superam outras empresas em 4 a 5 vezes. O número de organizações que atendem a esse padrão também está aumentando rapidamente. Entre 2018 e 2019, houve um aumento de 185% no número de organizações de DevOps de elite, de acordo com o relatório de 2019 sobre a situação do DevOps pela DORA. Porém, tornar-se uma organização de DevOps de elite exige uma mudança cultural sísmica e as ferramentas e tecnologias certas. Como as organizações podem obter sucesso ao se adaptarem e adotarem uma prática de DevOps?
No GitHub, identificamos oito melhores práticas comuns:
Esteja preparado para mudar a cultura: o DevOps envolve ferramentas, processos e pessoas, mas também implica uma mudança cultural para incentivar equipes de engenharia, TI e operações tradicionalmente em pontos de isolamento a se unirem e trabalharem de maneira colaborativa. Essa é uma mudança sísmica em relação a práticas de tecnologias tradicionais, nas quais especialistas como desenvolvedores, administradores de sistemas e engenheiros de confiabilidade trabalhavam em pontos de isolamento independentes. Ao reunir essas equipes antes em pontos de isolamento, o DevOps ajuda as organizações a levar ideias ao mercado com mais rapidez, ao mesmo tempo em que melhora a confiabilidade e a segurança do sistema de produção.
Incentive um ambiente colaborativo: essa mudança cultural deve ter como objetivo criar um ambiente colaborativo que remova a mentabilidade "nós versus eles" entre diferentes funções em uma prática de DevOps. Desde o planejamento até o desenvolvimento, a criação e a implantação, cada etapa do ciclo de vida de DevOps deve ser colaborativa e multifuncional, tanto em termos de comunicação quanto de execução. As organizações também devem se esforçar para se orientar em torno do produto em vez de projetos, assumindo o foco na missão para criar soluções de negócios de ponta a ponta.
Shift left para adotar a integração contínua e a implantação contínua (CI/CD): a CI/CD é uma prática fundamental de DevOps, e os melhores pipelines de CI/CD incorporam uma variedade de testes automatizados durante o ciclo de vida de desenvolvimento de software para melhorar a qualidade do código, identificar bugs, implantar código e otimizar e gerenciar a infraestrutura subjacente do aplicativo. Eles também incorporam, ou "shift left" (no jargão do setor), a segurança diretamente em cada etapa do SDLC. Isso envolve a automação de testes que verificam código (e a infraestrutura subjacente) em todas as etapas, desde o momento em que ele recebe commit pela primeira vez até o momento em que é compilado e distribuído.
Monitore o pipeline e os aplicativos de DevOps com as métricas certas: os melhores profissionais de DevOps monitoram continuamente seus pipelines e aplicativos e identificam as principais métricas de desempenho e segurança a serem monitoradas. Isso pode incluir tempo de execução, velocidade, taxas de falha, experiência do usuário e falhas de segurança no código e na infraestrutura subjacentes (como proteção do banco de dados). Os profissionais geralmente utilizam uma combinação de ferramentas, testes automatizados, logs sempre ativos e sistemas de alerta para monitorar a frequência de implantação, a estabilidade do aplicativo, a segurança do sistema e o tempo de detecção, entre outras coisas.
Uso das ferramentas certas para o trabalho: seja para controle de versão, CI/CD, infraestrutura como código ou gerenciamento de contêineres, entre muitos outros, o uso de ferramentas é essencial no DevOps. As ferramentas certas para o trabalho dependem das necessidades e preferências específicas da organização. Elas também dependem da capacidade das principais plataformas de hospedagem de software de se integrarem a um ecossistema de ferramentas.
Mude da arquitetura monolítica para a arquitetura de microsserviços: nos últimos 15 anos, houve uma mudança em direção a microsserviços para dar suporte a aplicativos cada vez mais complexos com base na Web e na nuvem.
Isso contrasta com a arquitetura monolítica de aplicativos, na qual a infraestrutura subjacente é organizada em um único serviço. Ou seja, se a demanda em uma parte do aplicativo aumentasse, toda a infraestrutura precisaria ser escalada para atender a essa demanda. Arquiteturas monolíticas também são mais difíceis de iterar porque, quando uma parte do aplicativo é atualizada, é necessária uma reimplantação total da base de código completa.
As arquiteturas de microsserviços resolvem esses problemas, aproveitando componentes individuais de infraestrutura que executam processos de aplicativos individuais. Isso facilita a iteração em componentes individuais de um aplicativo sem reimplantar toda a base de código, além de facilitar a escalabilidade de partes individuais de um aplicativo para atender à demanda em tempo real.Colete feedback contínuo: o feedback contínuo fornece aos profissionais de DevOps as principais informações de que eles precisam para criar, fazer o merge, testar, iterar e entregar softwares confiáveis. Diferentes funções em uma determinada prática de DevOps se beneficiarão com o recebimento de informações diferentes. Embora os desenvolvedores devam receber alertas em tempo real sobre relatórios de testes de código, falhas de produção e vulnerabilidades de segurança, a equipe de operações deve obter informações sobre estabilidade do sistema, demandas de serviços e pontos de falha, entre outras. O objetivo é identificar as principais métricas importantes para a organização e as equipes e rastrear essas métricas para melhorar o SDLC.
Como o DevOps é diferente da metodologia Agile?
Uma curiosidade: no início de 2010, o DevOps foi considerado a segunda década do desenvolvimento Agile, e muitos o viam como um sucessor natural da metodologia Agile.
Apesar disso, DevOps e desenvolvimento Agile não são a mesma coisa. Porém, como o DevOps se baseia na metodologia Agile e a otimiza, isso geralmente leva as pessoas a confundirem as duas práticas.
Em sua forma mais simples, a metodologia de desenvolvimento Agile busca dividir projetos de desenvolvimento de software grandes em partes menores de trabalho que as equipes podem criar, testar, obter feedback e criar rapidamente a próxima iteração.
Por outro lado, a metodologia DevOps busca fundamentalmente reunir equipes grandes e historicamente em pontos de isolamento (desenvolvedores e operações) para possibilitar cadências mais rápidas de desenvolvimento e lançamento de softwares.
Porém, a maior diferença é que o DevOps é uma estratégia para toda a empresa, focada na criação rápida de soluções de software de ponta a ponta. Por outro lado, a metodologia Agile se concentra exclusivamente em lançamentos de software funcionais.
Crie sua prática de DevOps no GitHub
O GitHub é uma plataforma integrada que leva as empresas da ideia ao planejamento e à produção, combinando uma experiência de desenvolvedor focada com uma infraestrutura poderosa e totalmente gerenciada de desenvolvimento, automação e teste.
Compare as Soluções de DevOps >
O GitHub ajuda nos esforços de longa data da empresa para acelerar o desenvolvimento, derrubando barreiras de comunicação, encurtando os ciclos de feedback e automatizando tarefas sempre que possível.
Mike Artis, diretor de engenharia de sistemas da ViacomCBS
Tags