View on GitHub

manual-da-engenharia-para-codar

Este é o manual para compromissos de "código com" a engenharia.

Integração Contínua

imagem

Incentivamos equipes de engenharia a fazer um investimento inicial durante o Sprint 0 de um projeto para estabelecer um pipeline automatizado e repetível que integre continuamente o código e libere executáveis do sistema para ambientes de nuvem específicos. Cada integração deve ser verificada por um processo de compilação automatizado que assegura que um conjunto de testes de validação seja aprovado e identifica quaisquer erros para toda a equipe de desenvolvedores.

Encorajamos as equipes a implementar os pipelines de CI/CD antes que qualquer código de serviço seja escrito para os clientes, o que geralmente acontece no Sprint 0(N). Dessa forma, a equipe de engenharia pode desenvolver e testar seu trabalho de forma isolada sem impactar outros desenvolvedores e promover um fluxo de trabalho DevOps consistente ao longo do envolvimento.

Esses princípios estão diretamente alinhados com as práticas do ciclo de vida de desenvolvimento de software ágil.

Objetivos

A automação de integração contínua é uma parte integral do ciclo de desenvolvimento de software destinada a reduzir erros de integração de compilação e maximizar a velocidade em uma equipe de desenvolvimento.

Um pipeline de automação de compilação robusto deve:

Definição de Compilação Gerenciada no Git

Código / artefatos de manifesto necessários para compilar seu projeto devem ser mantidos dentro de seus repositórios Git de projeto

Automação de Compilação

Uma compilação automatizada deve abranger os seguintes princípios:

Tarefa de Compilação

Testes Unitários

Verificação de Estilo de Código

Alvo do Script de Compilação

Sem Dependências de IDE

Verificações de Segurança do DevOps

Dependências do Ambiente de Compilação

Configuração automática do ambiente local

Documentação da configuração local

Infraestrutura como Código

Gerencie o máximo possível dos seguintes como código:

Desacoplar a infraestrutura do código da aplicação simplifica a transição das equipes de engenharia para aplicativos nativos em nuvem.

Provedores de recursos do Terraform, como Azure DevOps, estão tornando mais fácil para os desenvolvedores gerenciar variáveis de pipeline de compilação, conexões de serviço e definições de pipeline de CI/CD.

Exemplo de Fluxo de Trabalho DevOps usando Terraform e Cobalt

imagem

Por que

IAC DevOPS: Operações por Pull Request

Padrões de Infraestrutura Recomendados

Princípios de IAC

Automatize o Ambiente Azure

Fluxo de Trabalho de CI de IAC

Acesso de Desenvolvedor Somente Leitura a Recursos de Nuvem

Automação de Segredos

os IAC são implantados por meio de um sistema CI/CD que possui automação de segredos integrada. Evite aplicar alterações a segredos e/ou certificados diretamente no Portal Azure.

Automação de Testes de Integração de Infraestrutura

Documentação de Infraestrutura

Validação de Configuração

As aplicações usam configurações para permitir diferentes comportamentos em tempo de execução e é bastante comum usar arquivos para armazenar essas configurações. Como desenvolvedores, podemos introduzir erros ao editar esses arquivos, o que causaria problemas para a inicialização e/ou execução correta da aplicação. Aplicando técnicas de validação na sintaxe e semântica de nossa configuração, podemos detectar erros antes que a aplicação seja implantada e executada, melhorando a experiência do desenvolvedor (usuário).

Exemplos de Arquivos de Configuração de Aplicativos

Por que Validar a Configuração da Aplicação como uma Etapa Separada?

O que é o Esquema JSON?

JSON-Schema é o padrão de documentos JSON que descreve a estrutura e os requisitos dos seus dados JSON. Embora seja chamado de JSON-Schema, também é comum usar esse método para YAMLs, já que ele é um superconjunto do JSON. O esquema é muito simples: aponta quais campos podem existir, quais são obrigatórios ou opcionais, que formato de dados eles usam. Outras regras de validação podem ser adicionadas a essa premissa básica, juntamente com informações legíveis por humanos. Os metadados ficam nos esquemas, que são arquivos .json também. Além disso, o esquema tem a maior adoção entre todos os padrões de validação JSON, pois cobre uma grande parte dos cenários de validação. Ele usa documentos JSON fáceis de analisar para esquemas e é facilmente extensível.

Como Implementar a Validação de Esquema?

A implementação da validação de esquema é dividida em duas partes: a geração dos esquemas e a validação de arquivos YAML/JSON com esses esquemas.

Geração

Existem duas opções para gerar um esquema:

Validação

O esquema possui mais de 30 validadores para diferentes linguagens, incluindo mais de 10 para JavaScript, portanto, não é necessário codificá-lo você mesmo.

Validação de Integração

Uma maneira eficaz de identificar erros em sua compilação rapidamente é investir cedo em um conjunto confiável de testes automatizados que validem a funcionalidade básica do sistema:

Testes de Integração de Ponta a Ponta

Evite enviar compilações quebradas

Relatando falhas de compilação

Dependências de Dados de Automação de Teste

Verificações de Cobertura de Código

Fluxo de Trabalho Orientado pelo Git

Compilação na Confirmação

Evite comentar testes falhados

Aplicação da Política de Ramificação

Estratégia de Ramificação

Entregar Rapidamente e Diariamente

“Ao confirmar regularmente, cada colaborador pode reduzir o número de alterações conflitantes. Fazer confirmações semanais de trabalho corre o risco de entrar em conflito com outras funcionalidades e pode ser muito difícil de resolver. Conflitos iniciais e pequenos em uma área do sistema fazem com que os membros da equipe se comuniquem sobre a alteração que estão fazendo.”

No espírito da transparência e da comunicação frequente em uma equipe de desenvolvimento, incentivamos os desenvolvedores a confirmar o código diariamente. Essa abordagem fornece visibilidade ao progresso das funcionalidades e acelera a programação em pares em toda a equipe. Aqui estão alguns princípios a serem considerados:

Todos confirmam no repositório git todos os dias

Ambientes Isolados

Um dos principais objetivos da validação de compilação é isolar e identificar falhas em ambientes de preparação e minimizar qualquer interrupção no tráfego de produção ao vivo. Nossos testes automatizados de ponta a ponta devem ser executados em um ambiente que reproduza nosso ambiente de produção (o máximo possível). Isso inclui versões de software consistent

es, SO, simulações de volume de dados de teste, paridade de tráfego de rede com produção, etc.

Teste em um clone da produção

Atualizações de solicitação de pull acionam lançamentos em estágios

Promover alterações de infraestrutura em ambientes fixos

Testando em produção

Acesso do Desenvolvedor aos Últimos Artefatos de Lançamento

Nosso fluxo de trabalho de DevOps deve permitir que os desenvolvedores obtenham, instalem e executem o executável do sistema mais recente. Os executáveis de lançamento devem ser gerados automaticamente como parte de nossos pipelines de CI/CD.

Os desenvolvedores podem acessar o executável mais recente

O artefato de lançamento é publicado para cada solicitação de pull ou mesclagem na ramificação principal

Observabilidade da Integração

As mudanças de estado aplicadas à compilação principal devem estar disponíveis e ser comunicadas em toda a equipe. Centralizar logs e status de falhas de pipeline de compilação e lançamento é essencial para desenvolvedores que investigam compilações quebradas.

Recomendamos integrar Teams ou Slack com as execuções de pipeline de CI/CD, o que ajuda a manter a equipe constantemente informada sobre falhas e status de candidatos à compilação.

Painel de nível superior de Integração Contínua

Emblema de status de compilação no README do projeto

Notificações de compilação

Recursos