Ciclo de vida de desenvolvimento

A estratégia de ciclo de vida de desenvolvimento fornece considerações e recomendações de conceção fundamentais para o repositório, ramo, compilações automatizadas, implementação e estratégia de reversão durante a criação automática da zona de destino.

Estratégia de repositório

Considerações de design

  • Considere adotar um sistema de controlo de versões, como o Git, para fornecer flexibilidade à sua equipa na partilha e gestão de código.

    • O Git é o sistema de controlo de versões padrão da indústria. É um sistema de controlo de versões distribuído, em que a cópia local do código é uma versão completa do repositório.
  • Compreender o repositório mono versus a estrutura do Repositório multi-repositório.

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

    • Os repositórios públicos podem ser acedidos anonimamente.
    • Os repositórios privados exigem que os utilizadores tenham acesso ao repositório e que tenham sessão iniciada para aceder aos serviços.
    • Pode definir visibilidade pública e privada para projetos do Azure DevOps e repositórios do GitHub.
  • Considere definir permissões de repositório que o ajudam a controlar quem pode contribuir para o seu código fonte e gerir outras funcionalidades.

  • Considere utilizar a implementação de recursos Infraestrutura como Código (IaC) no Azure. A IaC permite-lhe gerir a infraestrutura num modelo declarativo, ajudando a reduzir o esforço de configuração, garantir a consistência entre implementações e evitar a configuração manual do ambiente.

  • O Azure fornece suporte para IaC para Zonas de Destino através de:

Recomendações de conceção

  • Utilize o Git como um sistema de controlo de versões.

  • Utilizar repositórios privados ao criar Zonas de Destino do Azure

  • Utilize repositórios públicos ao partilhar informações não confidenciais, como exemplos de automatização, documentação pública e material de colaboração open source.

  • Adote uma abordagem IaC para implementar, gerir, governar e suportar recursos da cloud.

Estratégia de ramo

Considerações de design

Recomendações de conceção

  • Adote um modelo de desenvolvimento baseado em ramal, no qual os programadores se consolidam num único ramo. Este modelo facilita a integração contínua. Todo o trabalho de funcionalidade é feito no ramal e todos os conflitos de intercalação são resolvidos quando a consolidação ocorre.

  • Faça com que as suas equipas definam e utilizem convenções de nomenclatura consistentes para os ramos identificarem o trabalho realizado.

  • Defina permissões para controlar quem pode ler e atualizar código num ramo do seu repositório Git. Pode definir permissões para utilizadores individuais e para grupos.

  • Definir políticas de ramo:

    • Exigir a utilização de pedidos Pull para intercalações de ramo no ramo principal.
    • Exigir um número mínimo de revisores para pedidos Pull.
    • Reponha todos os votos de aprovação para remover todos os votos de aprovação, mas mantenha os votos para rejeitar ou aguardar sempre que um ramo de origem for alterado.
    • Incluir automaticamente revisores de código.
    • Verifique a resolução de comentários.
  • Defina squash como estratégia de intercalação, o que lhe permite condensar o histórico git de ramos de tópicos quando concluir pedidos Pull. Em vez de adicionar cada consolidação num ramo de tópico ao histórico do ramo predefinido, uma intercalação de squash adiciona todas as alterações de ficheiro a uma única nova consolidação no ramo predefinido.

Compilações automatizadas

Considerações de design

  • Considere implementar a Integração Contínua (CI). A CI envolve intercalar todo o código do programador numa base de código central com base numa agenda regular e executar automaticamente processos de teste e compilações padrão.

  • Considere utilizar acionadores de CI:

    • Repositórios do Azure git. Pode configurar ramos, caminhos e etiquetas como acionadores para executar uma compilação ci.
    • GitHub. Pode configurar ramificações, caminhos e acionadores de etiquetas para executar uma compilação ci.
  • Considere incluir testes de unidades IaC no processo de compilação para validar a sintaxe.

  • Considere incluir testes de unidades no processo de compilação da aplicação. Reveja as tarefas disponíveis para o Pipeline do Azure DevOps.

  • Utilize ligações de serviço do Azure DevOps ou segredos do GitHub para gerir ligações ao Azure. Cada ligação deve ter o acesso privilegiado correto aos recursos do Azure.

  • Considere utilizar o Azure Key Vault segredos para armazenar e gerir informações confidenciais, como palavras-passe, chaves de API, certificados.

  • Os agentes do Azure DevOps podem ser autoalojados ou alojados na Microsoft.

    • A manutenção e as atualizações são efetuadas por si quando utiliza agentes alojados na Microsoft. Sempre que uma tarefa de compilação é executada, é criada uma nova máquina virtual.
    • Configure e faça a gestão de agentes autoalojados por conta própria para executar tarefas de compilação.

Recomendações de conceção

  • Utilize a CI para automatizar compilações e testes de código sempre que um membro da equipa consolidar alterações ao controlo de versões.

  • Inclua testes de unidades para IaC e código da aplicação como parte do processo de compilação.

  • Se possível, utilize o conjunto alojado pela Microsoft em vez de conjuntos autoalojados, uma vez que oferecem isolamento e uma VM limpa para cada execução de pipeline.

  • Quando ligar o Azure DevOps ou o GitHub ao Azure através de ligações de serviço ou segredos do GitHub, certifique-se de que define sempre o âmbito para que possam aceder apenas aos recursos necessários.

  • Utilize Key Vault segredos para evitar a codificação de informações confidenciais, como credenciais (palavras-passe de utilizador da máquina virtual), certificados ou chaves. Em seguida, utilize segredos como variáveis nas suas tarefas de compilação e versão.

Estratégia de implementação

Considerações de design

  • Considere utilizar a Entrega Contínua (CD). O CD envolve criar, testar, configurar e implementar a partir de uma compilação para um ambiente.

  • Considere utilizar ambientes. Os ambientes permitem-lhe direcionar uma coleção de recursos de uma tarefa de entrega. Exemplos de nomes de ambiente comuns incluem:

    • Dev
    • Teste
    • QA
    • Transição
    • Produção
  • Considere utilizar IaC como parte da sua estratégia para validar e confirmar as alterações pré-implementação.

Recomendações de conceção

  • Utilize o CD para garantir que o código está sempre pronto para ser implementado ao criar, testar e implementar código automaticamente em ambientes semelhantes a produção. Adicione a entrega contínua para criar uma integração ci/CD completa que o ajuda a detetar defeitos de código o mais cedo possível e garante que pode lançar rapidamente atualizações testadas corretamente.

  • Utilize ambientes como parte da sua estratégia de implementação. Os ambientes proporcionam benefícios como:

    • Histórico de implementações
    • Rastreabilidade de consolidações e itens de trabalho
    • Estado de funcionamento do recurso de diagnóstico
    • Segurança
  • Inclua verificações de pré-implementação IaC para que possa pré-visualizar as alterações. e veja os detalhes sobre se um recurso foi criado, modificado ou eliminado.

Estratégia de reversão

Considerações de design

  • Considere criar um plano de reversão. Reverter uma implementação envolve reverter a implementação para um bom estado conhecido e fornece uma capacidade crucial para recuperar de uma implementação falhada.

  • Considere a utilização de anular alterações no Git se precisar de reverter as alterações numa consolidação, eliminar alterações ou repor um ramo para um estado anterior.

Recomendações de conceção

  • Adote a utilização de anular alterações no Git quando precisar de reverter as alterações para ficheiros consolidados, eliminar alterações não consolidadas ou repor um ramo para um estado anterior.