Exercício - Proteja o seu ramo principal
Sua equipe está trabalhando em um modelo Bicep que já contém um site e um banco de dados. Você implantou os componentes em seu ambiente de produção. Agora, você precisa atualizar seu modelo Bicep para adicionar sua fila de processamento de pedidos.
Neste exercício, você criará uma ramificação de recurso para sua alteração. Você também protegerá sua ramificação principal e só permitirá que as alterações sejam mescladas à ramificação principal depois de serem revisadas. Antes disso, porém, você precisa certificar-se de que seu ambiente está configurado para concluir o restante deste módulo.
Durante o processo, você:
- Configure um repositório GitHub para este módulo.
- Clone o repositório para o seu computador.
- Adicione proteção de ramificação à ramificação principal do repositório.
- Crie uma ramificação de recurso local para sua alteração.
- Tente mesclar sua ramificação de recursos na principal.
- Configure um projeto de DevOps do Azure para este módulo.
- Clone o repositório do projeto para o seu computador.
- Adicione políticas de ramificação à ramificação principal do repositório.
- Crie uma ramificação de recurso local para sua alteração.
- Tente mesclar sua ramificação de recursos na principal.
Obtenha o repositório GitHub
Aqui, você garante que seu repositório GitHub esteja configurado para concluir o restante deste módulo. Você o configura criando um novo repositório com base em um repositório de modelos. O repositório de modelos contém os arquivos que você precisa para começar este módulo.
Iniciar a partir do repositório de modelos
Execute um modelo que configure seu repositório GitHub.
No site do GitHub, siga estas etapas para criar um repositório a partir do modelo:
Selecione Usar este modelo>Criar um novo repositório.
Insira um nome para seu novo projeto, como toy-website-review.
Selecione a opção Público .
Ao criar seus próprios repositórios, convém torná-los privados. Neste módulo, você trabalhará com recursos do GitHub que funcionam apenas com repositórios públicos e com contas do GitHub Enterprise.
Selecione Criar repositório a partir de modelo.
Obtenha o projeto Azure DevOps
Aqui, você garante que sua organização do Azure DevOps esteja configurada para concluir o restante deste módulo. Você o configura executando um modelo que cria um projeto no Azure DevOps.
No site do Gerador de Demonstração do Azure DevOps, siga estas etapas:
Selecione Entrar e aceite os termos de uso.
Na página Criar Novo Projeto, selecione sua organização do Azure DevOps. Em seguida, insira um nome de projeto, como toy-website-review.
Selecione Criar projeto.
O modelo leva alguns minutos para ser executado. Ele cria automaticamente um pipeline e um arquivo Bicep que você usará em exercícios posteriores.
Selecione Navegar para o projeto para ir para o seu projeto no Azure DevOps.
Clonar o repositório
Agora você tem uma cópia do repositório de modelos em sua própria conta. Clone este repositório localmente para que você possa começar a trabalhar nele.
Selecione Código e, em seguida, selecione o ícone Copiar .
Abra o Visual Studio Code.
Abra uma janela de terminal do Visual Studio Code selecionando Terminal>New Terminal. A janela geralmente abre na parte inferior da tela.
No terminal, vá para o diretório onde você deseja clonar o repositório GitHub em seu computador local. Por exemplo, para clonar o repositório para a pasta toy-website-review , execute o seguinte comando:
cd toy-website-review
Digite
git clone
e cole a URL copiada anteriormente e execute o comando. O comando tem esta aparência:git clone https://github.com/mygithubuser/toy-website-review.git
Reabra o Visual Studio Code na pasta do repositório executando o seguinte comando no terminal do Visual Studio Code:
code -r toy-website-review
Agora você tem um projeto em sua própria conta. Clone este repositório localmente para que você possa começar a trabalhar nele.
Selecione Arquivos de repos>.
Selecione Clonar.
Se você estiver usando o macOS, precisará de uma senha especial para clonar o repositório Git. Selecione Gerar credenciais do Git e copie o nome de usuário e a senha exibidos para algum lugar seguro.
Selecione Clonar no VS Code. Se você for solicitado a permitir que o Visual Studio Code seja aberto, selecione Abrir.
Crie uma pasta para usar no repositório e escolha Selecionar local do repositório.
Está a utilizar este repositório pela primeira vez, pelo que lhe será pedido para iniciar sessão.
Se estiver a utilizar o Windows, introduza as mesmas credenciais que utilizou para iniciar sessão no Azure DevOps anteriormente neste exercício.
Se você estiver usando o macOS, digite o nome de usuário e a senha do Git que você gerou há alguns instantes.
O Visual Studio Code solicita que você abra o repositório. Selecione Abrir.
Adicionar proteções de ramificação
Configure seu repositório Git para evitar pushes diretos para a ramificação principal.
No navegador, selecione Configurações.
Selecione Ramos.
Selecione Adicionar regra de proteção de ramificação.
Na caixa de texto Padrão de nome de ramo, digite principal.
Selecione Exigir uma solicitação pull antes de mesclar.
Limpar Exigir aprovações. Normalmente, você selecionaria essa opção. Mas neste exemplo, você vai mesclar sua própria solicitação pull e a opção Exigir aprovações impede que você faça isso.
Selecione Não permitir ignorar as configurações acima.
Selecione essa configuração como um exemplo para mostrar como
git push
falharmain
posteriormente neste exercício. Em um ambiente de produção, talvez você não queira restringir as mesclagens diretas paramain
administradores ou proprietários de repositórios.Perto da parte inferior da página, selecione Criar.
O GitHub pode pedir que você faça login novamente para confirmar sua identidade.
Adicionar políticas de filial
Configure seu repositório Git para evitar pushes diretos para a ramificação principal.
No seu navegador, vá para Repos>Branches.
Passe o cursor sobre a ramificação principal e selecione os três pontos.
Selecione Políticas de filial.
Na janela Políticas de filial, altere a configuração Exigir um número mínimo de revisores para Ativado.
Altere o número mínimo de revisores para 1 e selecione a opção Permitir que os solicitantes aprovem suas próprias alterações .
Nota
Aqui, você habilita a opção Permitir que os solicitantes aprovem suas próprias alterações . Nesses exercícios, você está trabalhando por conta própria, então precisa criar e aprovar suas alterações. Mas em um ambiente de equipe real, talvez você não queira habilitar essa opção.
Criar uma ramificação de recurso local
No terminal do Visual Studio Code, execute a seguinte instrução:
git checkout -b add-orders-queue
Este comando cria uma nova ramificação de recurso para você trabalhar.
Abra o arquivo main.bicep na pasta deploy .
Abaixo dos parâmetros, adicione uma nova variável para o nome da fila:
var storageAccountSkuName = (environmentType == 'prod') ? 'Standard_GRS' : 'Standard_LRS' var processOrderQueueName = 'processorder'
Dentro do recurso de conta de armazenamento, adicione a fila como um recurso filho aninhado:
resource storageAccount 'Microsoft.Storage/storageAccounts@2023-05-01' = { name: storageAccountName location: location sku: { name: storageAccountSkuName } kind: 'StorageV2' properties: { accessTier: 'Hot' } resource queueServices 'queueServices' existing = { name: 'default' resource processOrderQueue 'queues' = { name: processOrderQueueName } } }
Na definição do
appService
módulo, adicione a conta de armazenamento e os nomes da fila como parâmetros:module appService 'modules/appService.bicep' = { name: 'appService' params: { location: location appServiceAppName: appServiceAppName storageAccountName: storageAccount.name processOrderQueueName: storageAccount::queueServices::processOrderQueue.name environmentType: environmentType } }
Esse código permite que o aplicativo encontre a fila para onde enviará mensagens.
Salve o arquivo main.bicep .
Abra o arquivo appService.bicep na pasta deploy/modules .
Perto da parte superior do arquivo appService.bicep , adicione novos parâmetros para a conta de armazenamento e nomes de fila:
@description('The Azure region into which the resources should be deployed.') param location string @description('The name of the App Service app to deploy. This name must be globally unique.') param appServiceAppName string @description('The name of the storage account to deploy. This name must be globally unique.') param storageAccountName string @description('The name of the queue to deploy for processing orders.') param processOrderQueueName string @description('The type of the environment. This must be nonprod or prod.') @allowed([ 'nonprod' 'prod' ]) param environmentType string
Atualize o
appServiceApp
recurso para propagar a conta de armazenamento e os nomes da fila para as variáveis de ambiente do aplicativo:resource appServiceApp 'Microsoft.Web/sites@2024-04-01' = { name: appServiceAppName location: location properties: { serverFarmId: appServicePlan.id httpsOnly: true siteConfig: { appSettings: [ { name: 'StorageAccountName' value: storageAccountName } { name: 'ProcessOrderQueueName' value: processOrderQueueName } ] } } }
Confirme e envie sua ramificação de recursos
Confirme suas alterações e envie-as por push para o repositório GitHub executando os seguintes comandos no terminal do Visual Studio Code:
Confirme suas alterações e envie-as por push para o repositório do Azure Repos executando os seguintes comandos no terminal do Visual Studio Code:
git add .
git commit -m "Add orders queue and associated configuration"
git push --set-upstream origin add-orders-queue
A ramificação de recurso é enviada por push para uma nova ramificação, também chamada add-orders-queue, em seu repositório remoto.
Tente mesclar a ramificação do recurso para a principal
Você aprendeu por que não é aconselhável empurrar diretamente para o ramo principal. Aqui, você tenta quebrar essa diretriz para ver como a proteção do seu ramo principal impede que você empurre acidentalmente suas alterações para um ramo protegido.
No terminal do Visual Studio Code, execute as seguintes instruções para alternar para a ramificação principal e mesclar a ramificação add-orders-queue nela:
git checkout main git merge add-orders-queue
O comando funcionou, mas você mesclou a ramificação add-orders-queue em sua ramificação principal apenas no repositório Git local .
Execute a seguinte instrução para tentar enviar suas alterações para o GitHub:
git push
Observe que seu push falha com uma mensagem de erro parecida com esta:
Total 0 (delta 0), reused 0 (delta 0), pack-reused 0 remote: error: GH006: Protected branch update failed for refs/heads/main. remote: error: Changes must be made through a pull request. To https://github.com/mygithubuser/toy-website-review.git ! [remote rejected] main -> main (protected branch hook declined) error: failed to push some refs to 'https://github.com/mygithubuser/toy-website-review.git'
A mensagem de erro informa que pushes para a ramificação principal não são permitidos e que você deve usar uma solicitação pull para atualizar a ramificação.
Desfaça a mesclagem executando a seguinte instrução:
git reset --hard HEAD~1
Este comando diz ao repositório Git local para redefinir o estado da ramificação principal para o que era antes da última confirmação ser mesclada e não para salvar suas alterações. A ramificação add-orders-queue não é afetada.
Você aprendeu por que não é aconselhável empurrar diretamente para o ramo principal. Aqui, você tenta quebrar essa diretriz para ver como as políticas de ramificação impedem que você empurre acidentalmente suas alterações para uma ramificação protegida.
No terminal do Visual Studio Code, execute as seguintes instruções para alternar para a ramificação principal e mesclar a ramificação add-orders-queue a ela:
git checkout main git merge add-orders-queue
O comando funcionou, mas você mesclou a ramificação add-orders-queue em sua ramificação principal apenas no repositório Git local.
Execute a seguinte instrução para tentar enviar suas alterações para o Azure Repos:
git push
Observe que seu push falha com uma mensagem de erro parecida com esta:
Total 0 (delta 0), reused 0 (delta 0), pack-reused 0 To https://dev.azure.com/mytoycompany/toy-website-review/_git/toy-website-review ! [remote rejected] main -> main (TF402455: Pushes to this branch are not permitted; you must use a pull request to update this branch.) error: failed to push some refs to 'https://dev.azure.com/mytoycompany/toy-website-review/_git/toy-website-review'
A mensagem de erro informa que pushes para a ramificação principal não são permitidos e que você deve usar uma solicitação pull para atualizar a ramificação.
Desfaça a mesclagem executando a seguinte instrução:
git reset --hard HEAD~1
Este comando diz ao repositório Git local para redefinir o estado da ramificação principal para o que era antes da última confirmação ser mesclada e não para salvar suas alterações. A ramificação add-orders-queue não é afetada.