Home > Gestão

Práticas recomendadas de Devops: 5 métodos que você deve adotar

Certifique-se de fornecer as necessidades de negócios primeiro e alinhe a automação do Devops a áreas de alta repetição

Isaac Sacolick, InfoWorld/EUA

10/12/2018 às 8h37

Foto: Shutterstock

Devops é agora importante em muitas organizações de tecnologia por causa de duas missões e culturas aparentemente opostas que precisam se unir:

  • As equipes de desenvolvimento ágeis agem com rapidez para atender aos requisitos de negócios e implementar mudanças nos aplicativos.
  • As equipes operacionais trabalham arduamente para manter o desempenho dos sistemas, garantir a segurança dos ambientes de computação e gerenciar os recursos de computação.

As equipes ágeis costumam ver as equipes operacionais como lentas e rígidas, enquanto os engenheiros de sistemas enxergam os desenvolvedores ágeis como não suportando as necessidades operacionais e imprudentes quando as implantações de aplicativos causam problemas de produção.

Essas são generalizações, mas as duas disciplinas geralmente têm motivações, terminologias e ferramentas diferentes - e esse desalinhamento pode criar problemas de negócios. Por exemplo, à medida que as startups se tornam maiores, elas precisam desenvolver procedimentos operacionais para garantir a estabilidade e, ao mesmo tempo, afetar minimamente sua velocidade e agilidade no desenvolvimento. Nas grandes empresas, elas ainda precisam encontrar maneiras de entregar aplicativos voltados para o cliente e melhorias no fluxo de trabalho interno mais rapidamente, sem comprometer a confiabilidade ou perder  conformidade.

O Devops visa abordar esses conflitos com uma cultura, um conjunto de princípios operacionais e um conjunto emergente de práticas recomendadas que permitem a velocidade de implantação de aplicativos e a estabilidade na execução deles com menos conflitos e comprometimentos. Isso é feito, em grande parte, fornecendo práticas que automatizam etapas operacionais e padronizam configurações:

  • Para as equipes de desenvolvimento, essas práticas padronizam e automatizam etapas desde o desenvolvimento de código até o teste, a segurança e a execução de aplicativos em vários ambientes.
  • Para operações, as práticas conduzem a automação na configuração e implantação de infraestrutura, monitorando vários domínios e permitindo a resolução de problemas de produção mais rapidamente.

As práticas de Devops incluem:

  • Controle de versão e estratégias de ramificação.
  • Pipelines de integração contínua e entrega contínua ( CI/CD ).
  • Containers que padronizam e isolam os ambientes de tempo de execução do aplicativo.
  • Infraestrutura como código (IAC), que permite criar scripts na camada de infraestrutura.
  • Monitorando os pipelines Devops e a integridade dos aplicativos em execução.

Devops começa com as práticas e ferramentas usadas para liberar software para computar ambientes com procedimentos fundamentais que existem há décadas. Eles incluem o controle de versão para gerenciar alterações de código em uma equipe de desenvolvedores, ramificando a base de código para suportar diferentes atividades de desenvolvimento e versões de software de marcação de versão antes de inseri-los em diferentes ambientes.

As principais diferenças para as equipes Devops são que as ferramentas são mais fáceis de usar e se integram melhor a outras tecnologias que automatizam a criação e a implantação de aplicativos. Há também estratégias mais padronizadas de ramificação e mesclagem de código que são mais fáceis de gerenciar com sistemas modernos de controle de versão.

Por exemplo, muitas organizações estão usando o Git (incluindo as  versões GitHub e BitBucket) e outras ferramentas de controle de versão que oferecem vários aplicativos clientes, APIs para integração e ferramentas de linha de comando para gerenciar procedimentos mais frequentes ou complexos. Hoje, a maioria dos desenvolvedores usa pelo menos uma tecnologia de controle de versão em seus projetos e, portanto, a implementação de padrões não é tão difícil quanto costumava ser.

As organizações que usam essas ferramentas podem adotar estratégias de ramificação como o Gitflow, que padronizam ramificações para produção, teste e desenvolvimento e estabelecem procedimentos para o desenvolvimento de novos recursos ou patches de produção. Essas estratégias de ramificação permitem que as equipes colaborem em diferentes tipos de necessidades de desenvolvimento e apenas introduzam código testado e implantado em ramificações de produção. As equipes usam a marcação de versão para rotular todas as versões do código-fonte e outros arquivos que fazem parte de uma versão do software.

Automatizando o gerenciamento de versões com integração e implementação contínuas
A maioria das organizações que exige suporte ao usuário após as versões de produção, e outras que estão no início do desenvolvimento de suas práticas de Devops, geralmente seguem as práticas tradicionais de gerenciamento de versões que suportam construções como versões maiores e menores. As equipes mais sofisticadas que desenvolvem aplicativos que exigem menos suporte ao usuário podem praticar a implantação contínua quando houver automação que integre continuamente e forneça alterações de código aos ambientes de produção.

Para permitir lançamentos mais frequentes, as equipes procuram automatizar as etapas, desde o check-in do código até o fornecimento de aplicativos totalmente testados para os ambientes de computação. A integração contínua (CI) é a automação para criar e integrar todos os componentes de software para que eles estejam em um pacote implantável. As ferramentas de implementação contínua (CD) gerenciam variáveis ​​específicas do ambiente e automatizam o envio de aplicativos para o desenvolvimento, teste, produção e outros ambientes de computação. Juntas, essas ferramentas formam o pipeline de CI/CD .

Para que o CI/CD seja um processo de automação eficiente, testes contínuos devem ser implementados no pipeline para garantir que o novo código não esteja introduzindo defeitos e outros problemas. Testes de unidade implementados no pipeline de integração contínua garantem que o código comprometido não está quebrando nenhum teste de unidade existente. Outros testes que procuram problemas de segurança em nível de código e estrutura de código também podem ser implementados na etapa de integração. Funcionalidade e desempenho automatizados que exigem ambientes de tempo de execução são frequentemente automatizados como parte de pipelines de entrega contínua.

Essa automação gera muitas mudanças comportamentais e práticas benéficas que permitem que as equipes façam alterações com mais frequência e mais segurança. Isso leva as equipes a fazer check-in e testar códigos com maior frequência, o que permite que os defeitos sejam encontrados e resolvidos mais rapidamente. Os procedimentos de implantação manual são propensos a erros, o que a automação elimina amplamente. A automação também leva a maior parte da sobrecarga ao impulsionar novos recursos para os usuários, permitindo que as equipes sejam implantadas com maior frequência.

Usando containers para dirigir microsserviços
Se o CI/CD fornece automação para a entrega de aplicativos, os  containers serão o empacotamento do ambiente operacional do aplicativo . Os desenvolvedores podem especificar o sistema operacional, os requisitos do aplicativo e os requisitos de configuração como um container para executar os aplicativos em uma camada isolada que compartilha o sistema operacional de seu host. O Docker e o Kubernetes são tecnologias de container que ajudam os desenvolvedores a definir seus ambientes de aplicativos de maneiras consistentes.

Com pipelines CI/CD para integrar e implantar código, e com containers padronizados que isolam as necessidades de computação de cada aplicativo, os desenvolvedores têm as ferramentas para fabricar serviços de aplicativos sem muita sobrecarga. Em seguida, as equipes de desenvolvimento têm mais opções para converter os requisitos de negócios em microsserviços que podem ser implantados, dimensionados e aproveitados para várias necessidades de negócios.

Automatizando a configuração e provisionamento com infraestrutura como código (IAC)
À medida que automatizar a integração de código e os aplicativos de entrega e o uso de containers impulsionam a entrega de aplicativos, as próximas práticas de Devops ajudam a automatizar e padronizar a infraestrutura e os serviços de nuvem.

Automatizar e gerenciar infraestrutura costumava ser difícil. Uma vez que uma arquitetura foi selecionada, os engenheiros operacionais olham para vários componentes de infraestrutura para construí-los e configurá-los de acordo com os requisitos. As ferramentas de gerenciamento de ativos e configuração usadas para capturar essas arquiteturas exigiam uma combinação de etapas automatizadas e manuais e, com frequência, estavam desatualizadas ou faltavam informações críticas. Os ambientes de computação também eram rígidos e, embora houvesse algumas ferramentas para automatizar ambientes de dimensionamento, eles geralmente eram isolados para um tipo de infraestrutura específico, exigiam habilidades diferentes para implementar a automação e tinham acesso a apenas um subconjunto de dados operacionais para determinar se e como para escalar.

Os ambientes de nuvem de hoje oferecem interfaces de usuário que simplificam o trabalho dos engenheiros. Eles podem usar essas ferramentas para configurar redes privadas virtuais, configurar grupos de segurança e, em seguida, iniciar serviços de computação, armazenamento e outros serviços necessários.

Mas as equipes de Devops levam isso um passo adiante. Em vez de usar as interfaces da Web e configurar manualmente os recursos de computação, eles automatizam o processo com código. As ferramentas de infraestrutura como código (IaC) permitem que engenheiros operacionais gerenciem e automatizem a configuração e o gerenciamento da infraestrutura. As configurações que permitem escalar ambientes para cima e para baixo também podem ser incorporadas nesses scripts. Chef, Puppet, Ansible e Salt são quatro tecnologias concorrentes que ajudam a implementar equipes operacionais para implementar o IaC.

Monitorando pipelines Devops e aplicativos
Um processo de fabricação é tão bom quanto a capacidade de monitorar, alertar e se recuperar de problemas. O mesmo vale para o monitoramento do Devops e a experiência do usuário de executar aplicativos e serviços. À medida que as organizações investem em automação, no uso de containers, padronização e implantação de aplicativos, um investimento paralelo em monitoramento é uma prática recomendada.

Pense em monitorar em vários níveis. No nível mais baixo está o monitoramento da infraestrutura, permitindo o reconhecimento e as respostas quando os recursos de computação não são saudáveis ​​ou têm baixo desempenho. Os ambientes de nuvem hoje oferecem recursos para monitorar, alertar e usar recursos elásticos da nuvem para responder a problemas de infraestrutura.

A próxima camada consiste nas ferramentas para monitorar e capturar métricas relacionadas à automação do Devops. Essas ferramentas se tornam mais críticas à medida que aumenta o número de desenvolvedores e os serviços implementáveis. Essas ferramentas fornecem alertas quando cria ferramentas de falha e auditoria para ajudar a diagnosticar problemas.

Por último, existem ferramentas que monitoram o tempo de atividade do aplicativo, o desempenho e outras métricas de tempo de execução. Essas ferramentas de monitoramento geralmente testam APIs e também realizam testes completos de navegador em endpoints únicos ou em transações de várias etapas. Esses monitores são uma defesa de linha de frente para alertar as equipes de Devops quando APIs ou aplicativos estiverem operando fora de níveis de serviço aceitáveis.

Onde começar com práticas Devops
Existem muitas práticas Devops, e todas levam tempo para amadurecer e se integrar. Não há uma sequência prescrita para implementá-las ou recomendações rígidas sobre o quanto de automação usar.

Ainda assim, as organizações devem primeiro procurar alinhar a cultura e a mentalidade em torno dos princípios Devops e, em seguida, reconhecer quais práticas melhor se alinham às necessidades de negócios. Por exemplo, organizações que já estão com desempenho insatisfatório de aplicativos podem optar por implementar o monitoramento primeiro para ajudar a resolver problemas mais rapidamente e identificar as causas básicas mais facilmente. Outras organizações que estão iniciando migrações de nuvem podem optar por implantar infraestrutura como código, enquanto as que estabelecem arquiteturas de desenvolvimento de aplicativos padrão podem investir em pipelines de CI/CD.

Os tecnólogos devem ter em mente que há um custo na implementação da automação e que nem toda organização exige implantação contínua. A melhor prática é garantir que as necessidades de negócios sejam entregues primeiro e alinhar a automação do Devops a áreas de alta repetição, onde os esforços manuais são propensos a erros.

 

(*) Isaac Sacolick é o autor de Driving Digital: Guia do líder para transformação de negócios através da tecnologia, que abrange muitas práticas, como Agile, Devops e Ciência de Dado, essenciais para programas de Transformação Digital bem-sucedidos. Sacolick é um reconhecido CIO social, um blogueiro de longa data da Social, Agile and Transformation e CIO.com , e presidente da StarCIO .

Junte-se a nós e receba nossas melhores histórias de tecnologia. Newsletter Newsletter por e-mail