CI/CD/CD: Dev e Ops convivendo em harmonia
Dentre todas as etapas de desenvolvimento de software do círculo DevOps, a integração, a entrega e a implantação são centrais. Essas etapas são intermediárias entre o setor de desenvolvimento e o de operações, é nesse ponto em que ambos os times se conectam.
Trabalhar essas etapas na cosmovisão DevOps é buscar o meio-termo entre o lado de desenvolvimento, que quer suas alterações o mais rápido possível no ambiente, e o time de operações, que quer garantir a estabilidade do ambiente. Tendo isto dito, o engenheiro DevOps vai buscar automatizar e otimizar os processos de entrega e implantação, favorecendo o time de desenvolvimento, a fim de que as alterações dos devs sejam refletidas no ambiente com o mínimo de interferência e o máximo de agilidade; e vai automatizar o processo de integração e testes, a favor do time de operações, visando garantir que o código seja seguro, estável, escalável, revisado e aprovado nos mais altos padrões de estabilidade.
Matt Moor, CC BY-SA 2.0 <https://creativecommons.org/licenses/by-sa/4.0>, via Flickr |
Essa cultura implementa esses benefícios é por meio de 2 coisas principais: ferramentas e cultura. As ferramentas de automação, gerenciamento e orquestração são para o Engenheiro DevOps o que a linguagem de programação é para o desenvolvedor de software. Sem elas, ele não consegue alcançar os objetivos da sua função e, consequentemente, da sua empresa. Da mesma forma, sem o suporte da cultura, a prática do DevOps não se sustenta e muitos problemas surgem e oneram a cadeia produtiva tanto de desenvolvimento como de operação. Por isso, um forte alinhamento com o núcleo do negócio vai garantir que o objetivo de cada área da empresa diretamente ligada ao ciclo do software goze dos benefícios da cultura DevOps.
No âmbito ferramental, podemos habilitar elementos cruciais em cada etapa do desenvolvimento e de operação do software. Mas tratando exclusivamente da integração contínua (CI) de código, implementa-se uma esteira, conhecida como pipeline, que submete as novas alterações e/ou todo o código a testes automatizados, onde o objetivo é garantir que o software permaneça estável, seguro, escalável, robusto, coberto e, principalmente, funcionando. Quanto mais aspectos de um código forem testados, mais problemas são prevenidos. Dentre várias ferramentas de teste, podemos frizar as mais utilizadas, como: o SonarQube, para testes de qualidade de código; o Snyk, para testes de segurança de dependências; os testes unitários, cada linguagem tem as suas ferramentas específicas; o OWASP ZAP, para testes de penetração e outros; o APache JMeter, para testes de desempenho; o selenium, para testes de compatibilidade entre navegadores e plataformas; entre outros.
Tratando de ferramentas de entrega contínua (CD), é importante mencionar a necessidade de automação. É crucial que sejamos capazes de gerar um entregável de forma rápida e eficiente, sem depender de processos manuais que podem ser demorados e propensos a erros. Para isso, podemos estabelecer condições que disparem sua produção, como o fim de um sprint, a aprovação de um responsável ou o sucesso de testes específicos. Dessa forma, garantimos que o pacote seja criado sempre que necessário, sem a necessidade de intervenção manual. Com a implementação de uma esteira, garantimos que o artefato esteja sempre consoante as expectativas do usuário e seja entregue de forma rápida e eficiente.
Quero ainda destacar a relevância do Continuos Deployment (ou Implantação Contínua) na eficiência da operação. Esse processo é repetitivo e sofre pouquíssima modificação com o passar do tempo. A execução desse processo de forma manual e/ou fora de condições específicas certamente ocasionará um problema em médio/longo prazo, visto que torna provável a falha humana. É comum que a equipe de operações crie scripts que automatizem essa tarefa, mas um engenheiro DevOps bem alinhado com ambos os times vai garantir que mudanças importantes nessa etapa sejam consideradas quando necessário, como, por exemplo: alterações a nível de plataforma, parametrização do entregável, novos requisitos de arquitetura, documentação, tratativas de problemas, entre outros.
Kharnagy, CC BY-SA 4.0 <https://creativecommons.org/licenses/by-sa/4.0>, via Wikimedia Commons |
A prática do DevOps é amplamente reconhecida como benéfica para o desenvolvimento de software, uma vez que permite a integração e a colaboração efetiva entre as equipes de desenvolvimento e operações. No entanto, é importante ressaltar que o uso inadequado dessa cultura pode gerar malefícios que não são inerentes a ela, como a baixa qualidade do software, problemas de segurança, complexidade excessiva, falta de monitoramento e feedback, entre outros.
Um dos principais benefícios da cultura DevOps, além da integração das equipes, é a automação de processos, que aumenta a eficiência e a agilidade do desenvolvimento de software. No entanto, a dependência excessiva de ferramentas e automações pode ser um obstáculo, pois pode gerar complexidade adicional e dificuldades na manutenção dos processos.
Outro obstáculo que as equipes podem enfrentar é a resistência cultural, que pode ocorrer em ambos os lados da cultura DevOps. Os desenvolvedores podem se sentir desconfortáveis com a mudança de paradigma, enquanto os profissionais de operações podem ser relutantes em permitir que as alterações sejam feitas no ambiente de produção. Dessa forma, é importante haver um esforço conjunto para que a cultura DevOps seja adotada de forma efetiva.
Além disso, a curva de aprendizado e o esforço inicial para implementar a cultura DevOps também podem ser desafiadores. É necessário haver um investimento adequado em treinamento e capacitação, bem como na implementação de ferramentas e processos. No entanto, é importante lembrar que, a longo prazo, os benefícios da cultura DevOps superam os desafios iniciais.
Por fim, é importante ressaltar que a adoção da cultura DevOps deve ser acompanhada de um forte alinhamento com o núcleo do negócio, a fim de garantir que os objetivos de cada área da empresa diretamente ligada ao ciclo do software sejam alcançados. A colaboração, a automação, a medição e o compartilhamento são os pilares fundamentais da cultura DevOps, e devem ser incentivados para que a prática seja sustentável e efetiva a longo prazo.
Comentários
Postar um comentário