8 principais desafios na adoção do DevOps: Parte 2 - Soluções

Na parte um (aqui) desta série de blogs em duas partes, observei os 8 principais desafios que as organizações enfrentam quando adotam o DevOps. Agora, vejamos algumas soluções.

A mudança é mais difícil no começo, mais confusa no meio e a melhor no final. - Robin S. Sharma

1.Função da cultura de acordo com os princípios do DevOps

Os líderes e agentes de mudança do DevOps precisarão encontrar maneiras de educar continuamente as equipes e as pessoas da organização sobre como é a cultura do DevOps e por que ela acelera o fluxo de valor. Aqui estão algumas coisas que tentei que funcionaram:

Aprendizado e comunidades de prática

O pessoal do DevOps pode organizar treinamentos internos ou apresentações de introdução para a adoção do DevOps e dar exposição à cultura do DevOps. Dessa forma, eles podem promover e se encontrar cara a cara com todos na organização. A colaboração face a face é preferida ao uso de e-mail ou videoconferência, pois os humanos constroem a confiança mais rapidamente dessa maneira, portanto, é recomendável realizar um roadshow se as equipes estiverem dispersas, com o objetivo de encontrar pelo menos uma para todos, a fim de construir relacionamentos.

Base de conhecimento e perguntas frequentes do DevOps

As equipes do DevOps podem criar uma base de conhecimento ou Perguntas Frequentes (FAQ) e compartilhar com todas as pessoas da organização; portanto, todo mundo sabe onde obter informações para se relacionar com o DevOps onde elas precisam. A visibilidade e o fácil acesso às informações que os motivam a pesquisar e ler por si mesmos e até contribuir. Esse tipo de informação pode ser mantido em plataformas colaborativas, como Atlassian Confluence ou Microsoft Teams.

Aplicação das práticas culturais da organização Westrum

Podemos usar a prática cultural da Organização Westrum para criar uma cultura generativa que cultive o fluxo de dados e a confiança, observando as seis partes do modelo de cultura hierárquica de Westrum, concentrando-se nas práticas encontradas na cultura generativa;

Aqui, como você pode construir uma Cultura Generativa;

Resistência 2.Addressing à mudança

Os líderes devem esperar que as pessoas resistam à mudança. De acordo com a DevOpsologist, Philippa Hale, em seu artigo sobre ferramentas de mapeamento de partes interessadas e ela discutiu como podemos abordar o humor e as emoções de certas pessoas do grupo em relação a mudanças, podemos aplicar diferentes estratégias de engajamento para abordá-las em relação às iniciativas de DevOps. Existem 6 "perfis de comportamento" e como podemos nos envolver com eles, como abaixo;

Não engajado

Espectadores

Cínicos

Críticos

Entusiastas

Advogados (Campeões / Especialistas)

Para resumir com base no exposto, podemos ver todas as abordagens de envolvimento envolvidas na comunicação e manter-nos informados sobre a adoção do DevOps. Precisamos trabalhar de perto com todos os grupos e estar visíveis para eles e ajudar sempre que precisarem de um.

3. Trazendo clareza à visão do DevOps

A introdução da estrutura do DevOps CALMS pode ajudar a definir o roteiro e os objetivos do DevOps. O CALMS é uma estrutura conceitual para a integração de equipes, funções e sistemas de desenvolvimento e operações (DevOps) em uma organização.

Os líderes do DevOps precisam desenvolver um roteiro claro para a evolução do DevOps com fases claras de aprimoramento. Eles devem compartilhá-lo e torná-lo visível para todos dentro da organização;

4.Criando a colaboração entre equipes

As equipes de desenvolvimento e operação de TI precisam aprender a colaborar. Isso pode significar a criação de equipes multifuncionais, incluindo desenvolvedores e operadores, mas isso não funciona em muitas organizações. Muitas vezes, é uma mudança organizacional muito dramática, ou simplesmente não há pessoas suficientes para dar a volta. As configurações tradicionais do departamento de tecnologia também tendem a incluir um profundo conhecimento do assunto nas operações de TI em torno de segurança e redes, por exemplo, por isso é difícil ver como compartilhar esse tipo de pessoas entre as equipes de desenvolvimento ou produto.

O que ajuda é ter as equipes de desenvolvimento e operações de TI se reunindo regularmente? Se as equipes de desenvolvimento estiverem conduzindo scrums diários como parte de suas práticas ágeis, convidar as operações de TI para participar pode ajudar na remoção de impedimentos. Convidá-los para o planejamento do sprint pode garantir que esses requisitos não funcionais sejam considerados no sprint, agilizando o processo de entrega de valor.

Ferramentas de comunicação entre equipes, como Slack ou Microsoft Teams, realmente ajudam aqui, tornando possível que a colaboração seja contínua. O grupo ou canal de bate-papo “Alerta / Notificação” também precisa ser gerenciado adequadamente, para que os problemas possam ser direcionados à equipe correta e escalados rapidamente, usando a ação correta a ser tomada para solucionar o problema / bug.

Aqui estão algumas ferramentas de colaboração que você pode usar e começar a colaborar na sua organização;

5. Ambientes padronizados

Um ambiente é uma coleção de recursos ou locais de destino que você deseja converter do código em um produto real por meio do pipeline. O ambiente pode incluir máquinas virtuais (VM), servidores de banco de dados, serviços de terceiros etc. Abaixo está um exemplo de estágios do ambiente com seu uso, usuário / persona e responsável pela manutenção do ambiente;

As vantagens de ter um ambiente bem definido incluem o seguinte;

  1. Registro / histórico de implantação - Todos os detalhes da execução do pipeline são registrados nas ferramentas de CI / CD para seus recursos.
  2. Rastreabilidade - Permite rastrear se uma alteração de código (confirmação) ou recurso / correção de bug (itens de trabalho) atingiu um ambiente.
  3. Permissão / Controle - um ambiente seguro, especificando qual usuário é permitido e qual ambiente de destino a ser implantado.

O provisionamento do ambiente de automação é um fator importante de sucesso em um processo de entrega contínua. A equipe de desenvolvimento pode solicitar um novo ambiente ad-hoc e seu ambiente está sendo provisionado sob demanda à medida que o aplicativo é implementado? O ambiente do aplicativo pode se dividir em três áreas principais:

1. Infra-estrutura

2. Configuração

3. Dependências

Infraestrutura é o local em que o aplicativo ou serviço que está sendo implantado e o aplicativo executará necessidades de configuração específicas. Também inclui como as dependências precisam se integrar ao aplicativo. Atualmente, a infraestrutura pode ser provisionada por script ou eles chamam de "Infraestrutura como Código" ou, em suma, IaC. O IaC é hoje mais acessível por meio de uma gama abrangente de ferramentas disponíveis para automatizar todo o processo de provisionamento de ambiente.

A configuração é o próximo aspecto mais conseqüente do ambiente de aplicativos. A configuração determina como o aplicativo comporta em uma determinada infraestrutura e como a infraestrutura comporta em cognição ao aplicativo subjacente.

Dependências são todos os diferentes módulos ou sistemas dos quais um aplicativo depende, de bibliotecas a serviços ou outros aplicativos.

O benefício de usar a provisão de ambiente automatizada da seguinte maneira;

  • Complexidade reduzida, permitindo que as equipes de DevOps trabalhem em um nível mais alto de abstração.
  • Maior estabilidade, permitindo que os aplicativos respondam dinamicamente à sua implantação.
  • Maior flexibilidade, dissociando o gerenciamento de configurações do ambiente de hospedagem específico de um aplicativo.

Temos muitas ferramentas disponíveis no mercado, seja de código aberto ou corporativo, que podemos usar para automatizar o provisionamento para todas as três áreas mencionadas acima;

6. Padronizando o DevOps Toolchain e fornecendo-o como autoatendimento

Depois que as metas e os processos de adoção do DevOps são definidos, podemos determinar o conjunto de ferramentas necessário para atender aos processos. Certifique-se de que as equipes de desenvolvimento e operação de TI trabalhem juntas para decidir sobre as ferramentas adequadas para a organização. Com qualquer nova ferramenta introduzida, os trabalhadores existentes devem ser treinados. Também é essencial garantir que as ferramentas atendam aos requisitos de segurança e estejam bem integradas aos recursos e serviços existentes.

** Apenas cite algumas cadeias de ferramentas disponíveis no mercado para as seções acima.

7. Acelerando o gerenciamento de versões

Depois de definirmos adequadamente nosso ambiente, os líderes do DevOps precisam criar um pipeline de liberação adequado que, quando precisamos de um acionador automático para implantação, quando necessitamos do portão de aprovação pré-implantação e quando o estágio de controle de qualidade / teste precisa ser colocado. A figura abaixo mostra um pipeline básico de liberação com combinação de implantação automática e manual;

Uma vez que você tenha um pipeline de release adequado, a automação de construção, integração, teste e entrega e outros processos, reduzirá as atividades humanas em cada release, bem como a quantidade de gerenciamento e coordenação necessária.

Como a aceleração do desenvolvimento se tornou uma vantagem competitiva, a equipe do DevOps procurou habilitar a integração contínua e a distribuição contínua (CI / CD). O CI / CD ajuda os desenvolvedores e as operações de TI a superar um enorme aborrecimento no processo de desenvolvimento e teste de software. Ao longo dos anos, o desenvolvimento de software migrou do nível corporativo, onde existem amplos recursos, para equipes de desenvolvimento menores que correm para acompanhar a demanda gerada por bilhões de smartphones e outros dispositivos e plataformas de consumidores móveis. Abaixo está um exemplo de pipeline de CI / CD com a combinação de ferramentas disponíveis;

No nosso caso, optamos por utilizar uma combinação de ferramentas, pois parece fornecer a melhor solução para nossas necessidades complicadas. A maioria das equipes que desenvolvem produtos corporativos se beneficiaria dessa abordagem inicial. Nossa pilha de ferramentas consiste em,

  1. Atlassian JIRA - uma ferramenta para colaboração em equipe do backlog do Produto, Sprint Planning e Relatório de lançamento e quão bem a equipe Agile está se saindo em cada sprint.
  2. Github - um sistema de controle de versão distribuído (DVCS) em que o desenvolvedor se comunica e colabora para melhorar o código de recurso do produto e ter visibilidade das alterações e versões de código. Quaisquer alterações devem ser revisadas por outros desenvolvedores ou pelo Code Reviewer, que tornaram o código mais limpo e com menos erros / bugs.
  3. Azure DevOps - é uma ferramenta que usamos para orquestrar nosso pipeline de CI / CD e também é o local em que há mais colaboração entre o engenheiro, o desenvolvedor, o gerente de liberação e a equipe de controle de qualidade do DevOps. É também o local em que as integrações acontecem para oferecer um produto com boa qualidade e é por isso que temos análises de segurança e testes de controle de qualidade antes de implantar no ambiente de produção.
  4. Datadog - É uma ferramenta de monitoramento que, com o Datadog, você pode monitorar seus servidores, nuvens, métricas, aplicativos e equipe. É como uma parada para todos os tipos de monitores para seu ambiente e produtos.

Um pipeline de CI / CD eficiente pode melhorar significativamente o tempo de colocação no mercado e aproveitar a manutenção da estabilidade e da qualidade do software.

8. Teste de Automação

O DevOps promove a automação e tem como objetivo executar o máximo de automação possível de todas as tarefas diárias que não requerem intervenções humanas. Adicionar especialistas em controle de qualidade à composição da equipe do DevOps ajudará a equipe a decidir a melhor abordagem ou as ferramentas de teste podem ser automatizadas. As ferramentas de automação geralmente funcionam quando se trata de testar erros de aplicativo ou sistema, mas o teste de controle de qualidade faz um trabalho muito melhor ao testar a usabilidade e a disponibilidade da versão.

A integração de testes contínuos automatizados ao seu pipeline de CI / CD requer um implemento de teste de aplicativo que seja fácil de integrar aos implementos de compilação, automação de teste e CI / CD que você já usa e que possui amplo suporte à API da web. A vantagem de usar o teste contínuo automatizado da seguinte maneira:

Estabilidade. Ajuda a aplicar requisitos de qualidade e segurança de forma mais consistente. Se você gravar um teste de segurança manual e depois automatizá-lo, ele se tornará um requisito de segurança que você poderá aplicar a cada compilação.

Rapidez. Com o teste contínuo e automatizado desenvolvido por ferramentas escalonáveis, os desenvolvedores podem encontrar e ajustar problemas em tempo real em todo o SDLC. Isso agiliza o desenvolvimento de aplicativos e evita erros comuns aos testes manuais.

Escala. Para dimensionar o teste manual, você precisa de mais testadores manuais. Para dimensionar o teste automatizado, você só precisa de mais aplicativos e compilações para testar.

Conclusão

A adoção do DevOps é uma jornada que deve começar com uma análise da arquitetura e dos objetivos da organização. Resolver esses desafios comuns no Adoção do DevOps tornará a transformação muito mais suave. Durante um período, todas as equipes ou pessoas da organização se acostumarão às alterações do DevOps e se adaptarão aos processos de aprendizado contínuo. Depois que as equipes de Desenvolvimento, Operação e Gerenciamento aprenderem a cooperar, elas se ajudarão automaticamente e colaborarão estreitamente para arquivar as metas de adoção do DevOps.