Exercício - Publicar um módulo num registo
Na sua empresa de brinquedos, você tem publicado seus módulos Bicep em um registro. Tem estado a executar o processo de publicação manualmente a partir do seu próprio computador. Agora, você deseja criar um pipeline para lidar com o processo de publicação.
Neste exercício, irá:
- Crie um registro de contêiner para seus módulos Bicep.
- Adicione um estágio de fiapos ao pipeline.
- Adicione um estágio de pipeline para publicar o módulo no seu registro.
- Verifique se o pipeline é executado com êxito.
- Verifique o módulo publicado no seu registo.
Criar um registo de contentores
Antes de publicar módulos, você precisa criar um registro para sua organização usar. Aqui, você usa o portal do Azure para criar um registro.
Em seu navegador, crie um novo registro de contêiner no portal do Azure.
Na guia Noções básicas, selecione sua assinatura de destino e o grupo de recursos ToyReusable que você criou anteriormente.
Introduza um nome para o seu registo e uma localização perto de si.
Importante
O nome do registo tem de ser exclusivo no Azure e conter de 5 a 50 carateres alfanuméricos. Uma marca de seleção ao lado do nome do Registro indica que o nome escolhido está disponível.
Para SKU, selecione Básico.
Deixe os valores padrão para as outras definições de configuração.
Selecione Rever + criar.
Revise as configurações, mostre Validação passada e selecione Criar.
Aguarde até que a implantação termine, o que geralmente leva de 1 a 2 minutos.
Quando a mensagem Implantação bem-sucedida for exibida, selecione Ir para o recurso para abrir o registro do contêiner.
Na área Visão geral do registro de contêiner, observe o valor da configuração do servidor de login. Será algo como yourregistryname.azurecr.io.
Você precisará desse valor em breve.
Adicionar um arquivo de metadados do módulo
Na unidade anterior, você aprendeu sobre a importância de ter uma estratégia de versionamento para seus módulos. Você também aprendeu como usar arquivos de metadados do módulo para especificar o número da versão principal e secundária do seu módulo dentro de um pipeline. Aqui, você adiciona um arquivo de metadados para o módulo de conta de armazenamento.
No Visual Studio Code, expanda a pasta modules/storage-account na raiz do repositório.
Crie um novo arquivo chamado metadata.json.
Adicione o seguinte conteúdo ao ficheiro:
{ "version": { "major": 1, "minor": 2 } }
Observe que, no arquivo de metadados, você define separadamente os números de versão principal e secundária. Seu pipeline combina esses números, juntamente com o número de compilação do pipeline, em um número de versão completo cada vez que o pipeline é executado.
Guarde as alterações ao ficheiro.
Atualize sua definição de pipeline e adicione um estágio de fiapos
Seu repositório contém um rascunho de um pipeline que você pode usar como ponto de partida.
Abra o arquivo pipeline.yml na pasta modules/storage-account .
Atualize o valor da variável de ambiente para o
ModuleRegistryServer
nome do servidor do registro do contêiner. Você copiou esse nome anteriormente neste exercício.Por exemplo, se o servidor de login do seu registro estiver yourregistryname.azurecr.io, ele terá esta aparência:
- name: ModuleRegistryServer value: yourregistryname.azurecr.io
Na parte inferior do arquivo, para o
# To be added
comentário com a seguinte definição de estágio de fiapos:stages: - stage: Lint jobs: - job: LintCode displayName: Lint code steps: - script: | az bicep build --file $(ModuleFilePath) name: LintBicepCode displayName: Run Bicep linter
Adicionar um estágio de publicação ao seu pipeline
Agora, você pode adicionar um segundo estágio para publicar o módulo em seu registro de contêiner.
Na parte inferior do arquivo de pipeline.yml , defina o estágio Publicar e adicione uma etapa para ler o número da versão do arquivo de metadata.json do módulo e defini-lo como uma variável de pipeline.
- stage: Publish jobs: - job: Publish steps: - script: | majorMinorVersionNumber=$(jq '(.version.major | tostring) + "." + (.version.minor | tostring)' $(ModuleMetadataFilePath) -r ) versionNumber="$majorMinorVersionNumber.$(Build.BuildNumber)" echo "##vso[task.setvariable variable=ModuleVersion;]$versionNumber" name: GetModuleVersionNumber displayName: Get module version number
A etapa executa um script que usa o aplicativo de linha de comando jq para analisar o arquivo JSON.
Abaixo da etapa que você criou, adicione uma etapa para publicar o módulo no registro.
- task: AzureCLI@2 name: Publish displayName: Publish module inputs: azureSubscription: $(ServiceConnectionName) scriptType: 'bash' scriptLocation: 'inlineScript' inlineScript: | az bicep publish \ --target 'br:$(ModuleRegistryServer)/$(ModuleName):$(ModuleVersion)' \ --file $(ModuleFilePath)
Observe que esta etapa constrói o valor do
--target
argumento dinamicamente. Ele combina o valor do servidor de registro, o nome do módulo e o número da versão.Guarde as alterações ao ficheiro.
Verificar e confirmar sua definição de pipeline
Verifique se o arquivo storage_account_module.yml se parece com o exemplo a seguir:
trigger: batch: true branches: include: - main paths: include: - 'modules/storage-account/**' variables: - name: ServiceConnectionName value: ToyReusable - name: ModuleName value: storage-account - name: ModuleRegistryServer value: yourregistryname.azurecr.io - name: ModuleFilePath value: modules/storage-account/main.bicep - name: ModuleMetadataFilePath value: modules/storage-account/metadata.json pool: vmImage: ubuntu-latest stages: - stage: Lint jobs: - job: LintCode displayName: Lint code steps: - script: | az bicep build --file $(ModuleFilePath) name: LintBicepCode displayName: Run Bicep linter - stage: Publish jobs: - job: Publish steps: - script: | majorMinorVersionNumber=$(jq '(.version.major | tostring) + "." + (.version.minor | tostring)' $(ModuleMetadataFilePath) -r ) versionNumber="$majorMinorVersionNumber.$(Build.BuildNumber)" echo "##vso[task.setvariable variable=ModuleVersion;]$versionNumber" name: GetModuleVersionNumber displayName: Get module version number - task: AzureCLI@2 name: Publish displayName: Publish module inputs: azureSubscription: $(ServiceConnectionName) scriptType: 'bash' scriptLocation: 'inlineScript' inlineScript: | az bicep publish \ --target 'br:$(ModuleRegistryServer)/$(ModuleName):$(ModuleVersion)' \ --file $(ModuleFilePath)
Caso contrário, atualize-o para corresponder a este exemplo e salve-o.
Confirme e envie suas alterações para o repositório Git executando os seguintes comandos no terminal do Visual Studio Code:
git add . git commit -m "Add lint and publish stages to storage account module pipeline" git push
Imediatamente após o push, o Azure Pipelines inicia uma nova execução de pipeline.
Monitorizar o pipeline
No navegador, selecione Pipelines>Pipelines.
Selecione a execução do pipeline ativo.
A execução do pipeline é exibida.
Aguarde até que a execução do pipeline termine. O módulo Bicep é publicado no seu registro de contêiner.
Observe o número de compilação do pipeline, que inclui a data de hoje e um número de revisão exclusivo.
Rever o módulo no registo
Você também pode exibir o módulo publicado no portal do Azure.
No browser, aceda ao Portal do Azure.
Vá para o grupo de recursos ToyReusable .
Selecione o registro de contêiner que você criou anteriormente.
Selecione o painel Repositórios no menu. Em seguida, selecione o repositório modules\storage-account , que representa o módulo que seu pipeline publicou.
Observe que há uma única tag, que corresponde ao número da versão do módulo que seu pipeline publicou. A versão principal (1) e a versão secundária (2) correspondem aos números de versão definidos no arquivo metadata.json . O número de revisão (20230407.3) corresponde ao número de compilação do pipeline.
Limpar os recursos
Agora que concluiu o exercício, pode remover os recursos para não ser cobrado por eles.
No terminal de código do Visual Studio, execute o seguinte comando:
az group delete --resource-group ToyReusable --yes --no-wait
O grupo de recursos é excluído em segundo plano.
Remove-AzResourceGroup -Name ToyReusable -Force
Você também pode remover a conexão de serviço e o projeto Azure DevOps.
Conexão de serviço
- No projeto Azure DevOps, selecione Configurações do projeto>Conexões de serviço.
- Selecione ToyReusable.
- No canto superior direito, selecione os três pontos para Mais ações.
- Selecione Excluir e confirme a exclusão.
Registo da Aplicação Azure
- Na página inicial do portal, procure por Microsoft Entra ID e selecione-o na lista de Serviços.
- Aceda a Gerir>registos de aplicações.
- Em Aplicativos excluídos, selecione brinquedo-reutilizável.
- Selecione Excluir permanentemente e siga as instruções.
Projeto Azure DevOps
- No projeto Azure DevOps, selecione Visão geral das configurações>do projeto.
- Em Excluir projeto , selecione Excluir.
- Digite o nome do projeto e confirme a exclusão.