Neste post, trataremos dos conceitos de ChatOps, GitOps e GitFlow, indispensáveis para que as equipes DevOps possam desenvolver cada fase do projeto de acordo com um pipeline muito bem projetado.
ChatOps: Conversation-Driven DevOps
O ChatOps, por exemplo, permite que as equipes de operações e engenharia trabalhem de maneira multifuncional e executem operações e comandos diretamente por meio do chat. Muito simples, não é mesmo? Pode ser definido como um modelo de colaboração que conecta pessoas, ferramentas, processos e automação em um fluxo de trabalho (workflow) transparente. Em um ambiente ChatOps, o cliente de chat atua como o canal de comunicação principal para o trabalho em andamento.
As ferramentas que os desenvolvedores e gerentes de operações já usam são integradas a um ambiente de comunicação colaborativo para melhorar o rastreamento de tickets e a resposta automatizada a incidentes. O raciocínio é simples e a abordagem é bem prática: por estarem em uma sala de chat, membros das equipes DevOps podem digitar comandos para executar no chatbot via scripts e plugins personalizados.
Esses comandos podem cobrir desde implantações de código a notificações de membros da equipe e respostas a eventos relacionados à segurança do sistema. Isso cria um sistema em tempo real para gerenciamento de incidentes de produção ao mesmo passo em que mantém, de forma automatizada, a documentação detalhada de toda a comunicação e processo durante um incidente.
A transparência fortalece o ciclo de feedback, melhora o compartilhamento de informações e aprimora a colaboração entre as equipes – um dos motivos pelos quais o ChatOps é popularmente chamado de “conversation-driven collaboration” (colaboração orientada por conversação) ou “conversation-driven DevOps” (DevOps orientado por conversação). Isso sem falar na cultura e treinamento multidisciplinar entre as equipes de desenvolvimento.
De fato, o ChatOps é uma ramificação do DevOps com foco na comunicação entre as equipes DevOps. O ambiente ChatOps engloba as ferramentas de comunicação e colaboração usadas pela equipe: notificações, servidores de chat, bots, sistemas de rastreamento de problemas etc., e pode ser dividido em 3 categorias principais de ferramentas para implementar um ambiente de trabalho ChatOps:
- Sistemas de notificação, como o disponibilizado na solução One Platform.
- Chatbots, como Qbot ou Hubot.
- Ferramentas de integração de chatroom, como Slack, Atlassian HipChat e CA Flowdock.
Para motivação da implementação, é interessante saber que tipo de tarefas operacionais podem ser automatizadas de forma conveniente com uso de ChatOps. Temos muitas possibilidades, mas algumas de destaque são:
- Automação da implantação de uma nova versão de aplicação em algum ambiente;
- Verificação completa de status das aplicações e serviços de um Produto;
- Automação de processos manuais de diagnóstico que podem envolver VPNs, consultas a bancos de dados, APIs e outras fontes de dados;
- Obtenção de indicadores de engenharia ou produto;
- Download de grandes volumes de arquivos de uma origem remota;
- Reclassificar a criticidade de um incidente e notificar pessoas envolvidas;
GitOps: DevOps aplicado ao Git
Antes de falar sobre GitOps, é importante falarmos sobre o Git, que é um sistema de controle de versão distribuído projetado para coordenar o trabalho entre programadores e rastrear alterações em qualquer conjunto de arquivos no código durante o desenvolvimento de software. Ao englobarmos as melhores práticas DevOps e aplicá-las à automação da infraestrutura, temos o GitOps, que funciona como uma estrutura operacional centrada no Git para hospedar todas as informações e documentação; ao usar o Git, as equipes de TI podem lidar com o gerenciamento de configuração e implementações com maior facilidade, já que a abordagem GitOps tem por objetivo aproximar o fluxo de trabalho de implantação entre os desenvolvedores.
A abordagem GitOps concentra alguns benefícios a serem considerados:
- Permite a colaboração em alterações de infraestrutura
- Controle de acesso aprimorado
- Tempo de lançamento no mercado mais rápido
- Menos riscos
- Custos reduzidos
- Menos sujeito a erros
GitFlow: colaboração e dimensionamento entre equipes DevOps
Da mesma forma que no GitOps, também o GitFlow tem relação com o Git, funcionando como um modelo de trabalho com branches para esse sistema de controle de versão distribuído. O GitFlow permite “congelar” o código mesmo que um membro da equipe esteja trabalhando nele, sem impedir que os demais membros possam trabalhar na próxima versão. Por essa razão, o GitFlow acaba sendo bastante recomendado para a colaboração e dimensionamento das equipes de desenvolvimento – dois princípios básicos e fundamentais do DevOps.
Um dos principais benefícios do GitFlow é justamente tornar o desenvolvimento paralelo muito mais fácil, ao isolar o novo desenvolvimento do trabalho concluído. O novo desenvolvimento (como recursos e correções de bugs não emergenciais) é feito em “Feature Branches” e só é “mergeado” à branch Main do código quando o desenvolvedor responsável avaliar que o código esteja pronto para o lançamento.
Se o desenvolvedor alternar de uma tarefa para outra, tudo o que precisa fazer é “commitar” suas alterações e, em seguida, criar um novo Feature branch (ou um “ramo”) para sua nova tarefa. Quando essa tarefa estiver concluída, basta fazer a verificação no Feature branch e seguir de onde parou.
Os Feature branches também tornam mais fácil para dois ou mais desenvolvedores colaborarem no desenvolvimento do mesmo recurso, porque cada Feature branch é uma sandbox onde as únicas alterações são as necessárias para fazer o novo recurso funcionar – ou seja, um ambiente de teste isolado que permite aos usuários executar programas ou arquivos sem afetar o aplicativo como um todo. Isso torna muito fácil ver e acompanhar o que cada colaborador está fazendo.
O Gitflow é ideal como abordagem de desenvolvimento envolvendo uma quantidade de pessoas que já envolve algumas implementações realizadas simultaneamente e que precisam ser integradas para posterior disponibilização para os clientes finais.
As técnicas descritas neste artigo são complementares às descritas no post anterior, sobre Estratégias de Implantação, e muito poderosas quando utilizadas em conjunto.