Implementar restrições de fusão de filiais

Concluído

As restrições de mesclagem de ramificações em sistemas de controle de versão hospedados pelo Azure DevOps e pelo GitHub são essenciais para controlar a qualidade do código, facilitar a colaboração e melhorar a estabilidade em projetos de desenvolvimento de software. Eles ajudam as organizações a aplicar revisões de código, validar a conclusão bem-sucedida de testes automatizados e evitar empurrões forçados para ramificações designadas. Essas restrições ajudam a manter a integridade da base de código, evitam alterações acidentais e garantem que apenas as alterações verificadas e aprovadas sejam mescladas em ramificações de produção.

Os conceitos gerais de restrições de fusão de filiais são agnósticos em relação à plataforma. Embora sua implementação difira um pouco entre o Azure DevOps e o GitHub, também há muitas semelhanças, fornecendo, na maioria das vezes, paridade de recursos entre eles.

Azure DevOps

No Azure DevOps, você pode implementar restrições de mesclagem de ramificação usando políticas baseadas em proteção de filial.

Para implementar a proteção de ramificação, navegue até seu repositório no portal de DevOps do Azure e selecione a ramificação à qual você deseja aplicar restrições de mesclagem. Como alternativa, você pode definir o escopo da proteção para as ramificações atuais e futuras que correspondem a um padrão especificado. Como parte da configuração de proteção, você pode aplicar as seguintes políticas de ramificação:

  • Exigir um número mínimo de revisores: garante que as alterações não possam ser mescladas sem o número necessário de aprovações.
  • Verificar itens de trabalho vinculados: incentiva a rastreabilidade verificando itens vinculados em solicitações pull
  • Verificar a resolução de comentários: verifica se todos os comentários foram resolvidos em solicitações pull
  • Limitar tipos de mesclagem: controla o histórico de ramificações limitando os tipos disponíveis de mesclagem quando as solicitações pull são concluídas. Isso inclui a opção de habilitar ou desabilitar seletivamente os seguintes tipos de mesclagem:
    • Mesclagem básica (sem avanço rápido): preserva o histórico exatamente como aconteceu durante o desenvolvimento.
    • Rebase e avanço rápido: cria um histórico linear reproduzindo as confirmações de ramificação de origem no destino sem uma confirmação de mesclagem.
    • Mesclagem de squash: cria um histórico linear condensando as confirmações da ramificação de origem em uma única nova confirmação na ramificação de destino.
    • Rebasear com confirmação de mesclagem: cria um histórico semilinear reproduzindo as confirmações de ramificação de origem no destino e, em seguida, criando uma confirmação de mesclagem.

Opcionalmente, você pode configurar as seguintes restrições:

  • Validação de compilação: valida o código pré-mesclando e criando alterações de solicitação pull.
  • Verificações de status: exija que outros serviços publiquem o status bem-sucedido para concluir solicitações pull. As verificações de status são tarefas automatizadas que são acionadas durante o processo de solicitação pull para verificar determinados critérios antes de permitir que a solicitação pull seja mesclada na ramificação de destino. No Azure DevOps, as verificações de status são associadas a pipelines de compilação e pipelines de lançamento.
  • Incluir revisores automaticamente: designar revisores de código para incluir automaticamente quando solicitações pull alteram determinadas áreas do código.

Você também tem a opção de bloquear uma ramificação, tornando-a efetivamente somente leitura.

Observe que o Azure DevOps fornece duas opções para ignorar os requisitos de política para um repositório. Para implementá-los, você precisa alterar a configuração de segurança padrão do repositório, definindo as permissões para executar as seguintes ações como Permitir:

  • Ignore as políticas ao concluir solicitações pull.
  • Ignore as políticas ao enviar por push.

É essencial garantir que essas permissões sejam concedidas apenas a indivíduos designados que compreendam as implicações dessas ações no cumprimento dos padrões organizacionais e possam exercer um bom julgamento em relação ao seu uso.

GitHub

No GitHub, você pode implementar restrições de mesclagem de ramificação usando regras de proteção de ramificação. As regras de proteção de ramificação definem se os colaboradores podem excluir ou forçar push para a ramificação e definem requisitos para quaisquer pushes para a ramificação, como passar verificações de status ou um histórico de confirmação linear. Assim como no Azure DevOps, você pode aplicá-los a ramificações específicas com base na correspondência de padrão de nome.

Para implementar regras de proteção de ramificação, navegue até o repositório na interface da Web do GitHub, na guia Configurações e, no menu de navegação, selecione o item de menu Ramos. Isso permitirá que você acesse a configuração das regras do Branch Protection. Como parte da configuração de proteção, você pode aplicar as seguintes regras:

  • Exigir uma solicitação pull antes da fusão: requer que os colaboradores enviem solicitações pull para revisão e aprovação antes de mesclar suas alterações.
  • Exigir que as verificações de status sejam aprovadas antes da mesclagem: designa as verificações de status que devem ser aprovadas antes de permitir mesclagens. Quando habilitada, as confirmações devem primeiro ser enviadas por push para outra ramificação e, em seguida, mescladas ou enviadas diretamente para uma ramificação que corresponda a essa regra após a aprovação das verificações de status.
  • Exigir resolução de conversa antes da fusão: garante que todas as discussões e comentários relacionados a alterações de código sejam resolvidos antes de mesclar solicitações pull.
  • Exigir confirmações assinadas: os mandatos que se comprometem com filiais protegidas são assinados com assinaturas verificadas, aumentando a segurança e garantindo a autenticidade das contribuições de código.
  • Exigir histórico linear: evita confirmações de mesclagem em ramificações protegidas, impondo um histórico linear, o que facilita o rastreamento e, se necessário, a reversão de quaisquer alterações. Isso significa efetivamente que todas as solicitações pull devem usar uma mesclagem de squash ou uma mesclagem de rebase.
  • Exigir que as implantações sejam bem-sucedidas antes da fusão: determina que as alterações propostas nas solicitações pull sejam exaustivamente testadas e validadas antes de serem integradas à base de código.
  • Ramificação de bloqueio: como seu equivalente do Azure Devops, restringe o acesso de gravação à ramificação, tornando-a somente leitura.
  • Não permita ignorar as configurações acima: elimina a possibilidade de as outras regras serem ignoradas por administradores e usuários que receberam a permissão de ignorar proteções de ramificação.
  • Permitir push force: permita que usuários com privilégios de push forcem alterações push. Tal como acontece com o Azure DevOps, isto destina-se apenas a uma medida de emergência.
  • Permitir exclusões: permite que usuários com privilégios de push excluam ramificações protegidas. Embora essa flexibilidade possa simplificar o gerenciamento de filiais, ela também representa um risco de exclusões acidentais ou maliciosas de ramificações e deve ser cuidadosamente controlada para evitar a perda de dados e manter a integridade do repositório.