Exercício - Publicar um módulo num registo

Concluído

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.

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

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

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

  4. Para SKU, selecione Básico.

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

  5. Selecione Rever + criar.

    Captura de ecrã do portal do Azure que mostra a página de criação do registo de contentor.

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

  7. Quando a mensagem Implantação bem-sucedida for exibida, selecione Ir para o recurso para abrir o registro do contêiner.

    Captura de ecrã do portal do Azure que mostra a implementação do registo de contentor, com o botão para ir para um recurso realçado.

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

    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 tela do Visual Studio Code que mostra o local do arquivo JSON de ponto de metadados.

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

  1. Abra o arquivo pipeline.yml na pasta modules/storage-account .

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

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

  3. Guarde as alterações ao ficheiro.

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 pipeline

  1. No navegador, selecione Pipelines>Pipelines.

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

  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 browser, 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 seu pipeline publicou.

    Captura de ecrã do portal do Azure que mostra um módulo Bicep no registo de contentor.

    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

    1. No projeto Azure DevOps, 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 Aplicativos excluídos, selecione brinquedo-reutilizável.
    4. Selecione Excluir permanentemente e siga as instruções.
  • Projeto Azure DevOps

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