Exercício - Publicar um módulo num registo

Concluído

Na sua empresa de brinquedos, tem publicado os seus módulos Bicep num repositório. 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, vais:

  • 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 seu pipeline é executado com êxito.
  • Verifique o módulo publicado no seu registro.

Criar um registro de contêiner

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.

  1. Em seu navegador, criar um novo registro de contêiner no portal do Azure.

  2. Na guia Noções básicas, selecione a sua assinatura de destino e o grupo de recursos ToyReusable que criou anteriormente.

  3. Introduza um nome para o seu registo e uma localização perto de si.

    Importante

    O nome do Registro deve ser exclusivo no Azure e conter de 5 a 50 caracteres alfanuméricos. Uma marca de seleção ao lado do nome do Registro indica que o nome escolhido está disponível.

  4. Para o SKU , selecione Básico.

    Deixe os valores padrão para as outras definições de configuração.

  5. Selecione Rever + criar.

    Captura de tela do portal do Azure que mostra a página de criação do registro de contêiner.

  6. Reveja as definições que indicam Validação concluída e, em seguida, selecione Criar.

    Aguarde até que a implantação termine, o que geralmente leva de 1 a 2 minutos.

  7. Quando a mensagem Implantação bem-sucedida for exibida, selecione Ir para recurso para abrir o registo do contentor.

    Captura de tela do portal do Azure que mostra a implantação do Registro de contêiner, com o botão para ir para um recurso realçado.

  8. Na área Visão Geral do do Registro de contêiner, observe o valor da configuração Servidor de Login. Será algo como yourregistryname.azurecr.io.

    Captura de ecrã do portal do Azure que mostra os detalhes do registo de contentor, com o servidor de início de sessão realçado.

    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.

  1. No Visual Studio Code, expanda a pasta modules/storage-account na raiz do repositório.

  2. Crie um novo arquivo chamado metadata.json.

    Captura de ecrã do Visual Studio Code que mostra a localização do arquivo de metadados JSON.

  3. 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.

  4. Salve as alterações no arquivo.

Atualize a sua definição de pipeline e adicione uma fase de lint

Seu repositório contém um rascunho de um pipeline que você pode usar como ponto de partida.

  1. Abra o ficheiro pipeline.yml na pasta módulos/conta de armazenamento.

  2. Atualize o valor da variável de ambiente ModuleRegistryServer para o 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
    
  3. Na parte inferior do ficheiro, para o comentário # To be added com a seguinte definição de etapa de linter:

    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.

  1. 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.

  2. 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 argumento --target dinamicamente. Ele combina o valor do servidor de registro, o nome do módulo e o número da versão.

  3. Salve as alterações no arquivo.

Verificar e confirmar sua definição de pipeline

  1. 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.

  2. 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 fluxo de trabalho

  1. No navegador, selecione Pipelines>Pipelines.

  2. Selecione a execução ativa do pipeline.

  3. 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.

  4. 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.

  1. No seu navegador, aceda ao portal do Azure.

  2. Vá para o grupo de recursos ToyReusable.

  3. Selecione o registro de contêiner que você criou anteriormente.

  4. Selecione o painel Repositórios no menu. Em seguida, selecione o repositório modules\storage-account, que representa o módulo que o seu pipeline publicou.

    Captura de tela do portal do Azure que mostra um módulo Bicep no registro do contêiner.

    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 versã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

    1. No projeto DevOps do Azure, selecione Configurações do projeto>Conexões de serviço.
    2. Selecione ToyReusable.
    3. No canto superior direito, selecione os três pontos para Mais ações.
    4. Selecione Excluir e confirme a exclusão.
  • Registo da Aplicação Azure

    1. Na página inicial do portal, procure por Microsoft Entra ID e selecione-o na lista de Serviços .
    2. Aceda a Gerir registos de aplicações>.
    3. Em Aplicações eliminadas selecione reutilizável para brinquedos.
    4. Selecione Excluir permanentemente e siga as instruções.
  • Projeto Azure DevOps

    1. No projeto Azure DevOps, selecione Configurações do projeto>Visão geral.
    2. Em Excluir projeto selecione Excluir.
    3. Digite o nome do projeto e confirme a exclusão.