Compartilhar via


Ciclo de vida de desenvolvimento

A estratégia de ciclo de vida de desenvolvimento fornece as principais considerações e recomendações de design para repositório, ramificação, compilações automatizadas, implantação e estratégia de reversão durante a criação automática de zonas de destino.

Estratégia do repositório

Considerações sobre o design

  • Adote um sistema de controle de versão como o Git para fornecer flexibilidade à equipe no compartilhamento e gerenciamento de código.

    • Git é o sistema de controle de versão padrão do setor. É um sistema de controle de versão distribuído, em que a cópia local do código é uma versão completa do repositório.
  • Entenda a comparação entre estrutura de repositório mono-repo e multi-repo.

    • Nas estruturas mono-repo, todo o código-fonte reside em um único repositório.
    • Nas estruturas multi-repo, todos os projetos são organizados em repositórios separados.
  • Escolha uma configuração de visibilidade que se adapte ao conteúdo do repositório.

    • Os repositórios públicos podem ser acessados anonimamente.
    • Os repositórios privados exigem que os usuários tenham acesso ao repositório e façam login para acessar os serviços.
    • Você pode definir visibilidade pública e privada para Azure DevOps Projects e repositórios GitHub.
  • Defina permissões de repositório que ajudem você a controlar quem pode contribuir com o código-fonte e gerenciar outros recursos.

  • Use a implantação de recursos de IaC (Infraestrutura como Código) no Azure. A IaC permite que você gerencie a infraestrutura em um modelo declarativo, ajudando a reduzir os esforços de configuração, garantir a consistência entre as implantações e evitar a configuração manual do ambiente.

  • O Azure dá suporte à IaC para Zonas de Destino por meio do seguinte:

Recomendações de design

  • Use o Git como sistema de controle de versão.

  • Usar repositórios privados ao compilar as Zonas de Destino do Azure

  • Use repositórios públicos ao compartilhar informações não confidenciais, como exemplos de automação, documentação pública e material de colaboração de código aberto.

  • Adote uma abordagem de IaC para implantar, gerenciar, governar e dar suporte a recursos de nuvem.

Estratégia de ramificação

Considerações sobre o design

Recomendações de design

  • Adote um modelo de desenvolvimento baseado em tronco, em que os desenvolvedores se comprometam com uma única ramificação. Esse modelo facilita a integração contínua. Todo o trabalho de recurso é feito no tronco e os conflitos de mesclagem são resolvidos quando a confirmação ocorre.

  • Peças às equipes para definir e usar convenções de nomenclatura consistentes para ramificações, a fim de identificar o trabalho feito.

  • Defina permissões para controlar quem pode ler e atualizar o código em uma ramificação do repositório Git. Você pode definir permissões para usuários individuais e para grupos.

  • Defina políticas de ramificação:

    • Exija o uso de solicitações de pull para mesclagens de ramificação na ramificação principal.
    • Exija o número mínimo de revisores para solicitações de pull.
    • Redefina todos os votos de aprovação para remover todos os votos de aprovação, mas mantenha os votos de rejeição ou espera sempre que uma ramificação de origem for alterada.
    • Inclua revisores de código automaticamente.
    • Verificar a resolução de comentários.
  • Defina o squash como estratégia de mesclagem, o que permite que você condense o histórico de branches do tópico do Git, ao concluir as solicitações de pull. Em vez de adicionar cada confirmação em um branch do tópico ao histórico da ramificação padrão, uma mesclagem squash adiciona todas as alterações de arquivo a uma única nova confirmação na ramificação padrão.

Compilações automatizadas

Considerações sobre o design

  • Implemente a CI (Integração Contínua). A CI envolve mesclar todo o código do desenvolvedor em uma base de código central regularmente e, em seguida, executar automaticamente os processos padrão de compilação e teste.

  • Use os gatilhos de CI:

    • Azure Repos Git. Você pode configurar ramificações, caminhos e marcas como gatilhos para executar uma compilação de CI.
    • GitHub. Você pode configurar gatilhos de ramificações, caminhos e marcas para executar uma compilação de CI.
  • Inclua testes de unidade de IaC no processo de compilação para validar a sintaxe.

  • Inclua testes de unidade no processo de compilação do aplicativo. Examine as tarefas disponíveis para Pipeline do Azure DevOps.

  • Use as conexões de serviço do Azure DevOps ou os segredos do GitHub para gerenciar as conexões com o Azure. Cada conexão deve ter o acesso de privilégio correto para os recursos do Azure.

  • Use os segredos do Azure Key Vault para armazenar e gerenciar informações confidenciais, como senhas, chaves de API e certificados.

  • Os agentes do Azure DevOps podem ser auto-hospedados ou hospedados pela Microsoft.

    • A manutenção e as atualizações são resolvidas para você, quando você usa agentes hospedados pela Microsoft. Toda vez que um trabalho de compilação é executado, uma máquina virtual nova é criada.
    • Configure e gerencie agentes auto-hospedados por conta própria para executar trabalhos de compilação.

Recomendações de design

  • Use a CI para automatizar as compilações e os testes do código sempre que um membro da equipe confirmar as alterações no controle de versão.

  • Inclua testes de unidade para IaC e código do aplicativo como parte do processo de compilação.

  • Se possível, use o pool hospedado pela Microsoft, em vez de pools auto-hospedados, pois eles oferecem isolamento e uma VM limpa para cada execução de pipeline.

  • Ao conectar o Azure DevOps ou o GitHub ao Azure por meio de conexões de serviço ou segredos do GitHub, defina sempre o escopo de modo que eles possam acessar apenas os recursos necessários.

  • Use os segredos do Key Vault para evitar a codificação de informações confidenciais, como credenciais (senhas de usuário da máquina virtual), certificados ou chaves. Em seguida, use segredos como variáveis nos trabalhos de compilação e lançamento.

Estratégia de implantação

Considerações sobre o design

  • Use a CD (Entrega Contínua). A CD envolve a criação, o teste, a configuração e a implantação de uma compilação em um ambiente.

  • Use os ambientes. Os ambientes permitem que você direcione uma coleção de recursos a partir de um trabalho de entrega. Os exemplos de nomes de ambiente comuns incluem:

    • Desenvolvimento
    • Teste
    • QA
    • Preparo
    • Produção
  • Considere usar a IaC como parte de sua estratégia para validar e confirmar alterações pré-implantação.

Recomendações de design

  • Use a CD para garantir que o código esteja sempre pronto para implantar ao compilar, testar e implantar automaticamente o código em ambientes semelhantes ao de produção. Adicione a entrega contínua para criar uma integração completa de CI/CD que ajuda a detectar defeitos de código o mais cedo possível e garante que você possa liberar rapidamente as atualizações testadas corretamente.

  • Use os ambientes como parte da estratégia de implantação. Os ambientes oferecem benefícios como:

    • Histórico de implantações
    • Rastreabilidade de confirmações e itens de trabalho
    • Integridade dos recursos de diagnóstico
    • Segurança
  • Inclua verificações de pré-implantação da IaC para que você possa visualizar as alterações e ver detalhes sobre se um recurso é criado, modificado ou excluído.

Estratégia de reversão

Considerações sobre o design

  • Crie um plano de reversão. Reverter uma implantação envolve reverter a implantação para um estado adequado conhecido e fornece a capacidade fundamental de recuperação de uma implantação com falha.

  • Use a opção Desfazer alterações no Git, se precisar reverter alterações em uma confirmação, descartar alterações ou redefinir uma ramificação para um estado anterior.

Recomendações de design

  • Adote o uso da opção Desfazer alterações no Git, quando precisar reverter alterações em arquivos confirmados, descartar alterações não confirmadas ou redefinir uma ramificação para um estado anterior.