Tutorial: Usar o Armazenamento do Azure para criar artefatos

Importante

Muitos serviços do Azure têm plug-ins Jenkins. Alguns desses plug-ins estarão sem suporte a partir de 29 de fevereiro de 2024. A CLI do Azure é a maneira atualmente recomendada de integrar o Jenkins aos serviços do Azure. Para obter mais informações, consulte o artigo Jenkins plug-ins for Azure.

Este artigo ilustra como usar o armazenamento de Blob como um repositório de artefatos de compilação criados por uma solução de integração contínua (CI) Jenkins ou como uma fonte de arquivos baixáveis para serem usados em um processo de compilação. Um dos cenários em que você acharia essa solução útil é quando você está codificando em um ambiente de desenvolvimento ágil (usando Java ou outras linguagens), as compilações estão sendo executadas com base na integração contínua e você precisa de um repositório para seus artefatos de compilação, para que você possa, por exemplo, compartilhá-los com outros membros da organização, seus clientes ou manter um arquivo. Outro cenário é quando o próprio trabalho de compilação requer outros arquivos, por exemplo, dependências para baixar como parte da entrada de compilação.

Pré-requisitos

  • Assinatura do Azure: se você não tiver uma assinatura do Azure, crie uma conta gratuita do Azure antes de começar.
  • Servidor Jenkins: Se você não tiver um servidor Jenkins instalado, crie um servidor Jenkins no Azure.
  • CLI do Azure: instale a CLI do Azure (versão 2.0.67 ou superior) no servidor Jenkins.
  • Conta de armazenamento do Azure: se você ainda não tiver uma conta de armazenamento, crie uma conta de armazenamento.

Adicionar a credencial do Azure necessária para executar a CLI do Azure

  1. Navegue até o portal Jenkins.

  2. No menu, selecione Gerenciar Jenkins.

  3. Selecione Gerenciar credenciais.

  4. Selecione o domínio global .

  5. Selecione Adicionar credenciais.

  6. Preencha os campos obrigatórios da seguinte forma:

    • Tipo: Selecione Nome de usuário com senha.
    • Nome de usuário: especifique o appId da entidade de serviço.
    • Senha: especifique o password da entidade de serviço.
    • ID: especifique um identificador de credencial, como azuresp.
    • Descrição: opcionalmente, inclua uma descrição significativa para o seu ambiente.
  7. Selecione OK para criar a credencial.

Criar um trabalho de pipeline para carregar artefatos de compilação

As etapas a seguir guiam você na criação de um trabalho de pipeline. O trabalho de pipeline cria vários arquivos e carrega os arquivos em sua conta de armazenamento usando a CLI do Azure.

  1. No painel Jenkins, selecione Novo Item.

  2. Nomeie o trabalho myjob, selecione Pipeline e, em seguida, selecione OK.

  3. Na seção Pipeline da configuração do trabalho, selecione Script de pipeline e cole o seguinte em Script. Edite os espaços reservados para corresponder aos valores do seu ambiente.

    pipeline {
      agent any
      environment {
        AZURE_SUBSCRIPTION_ID='99999999-9999-9999-9999-999999999999'
        AZURE_TENANT_ID='99999999-9999-9999-9999-999999999999'
        AZURE_STORAGE_ACCOUNT='myStorageAccount'
      }
      stages {
        stage('Build') {
          steps {
            sh 'rm -rf *'
            sh 'mkdir text'
            sh 'echo Hello Azure Storage from Jenkins > ./text/hello.txt'
            sh 'date > ./text/date.txt'
          }
    
          post {
            success {
              withCredentials([usernamePassword(credentialsId: 'azuresp', 
                              passwordVariable: 'AZURE_CLIENT_SECRET', 
                              usernameVariable: 'AZURE_CLIENT_ID')]) {
                sh '''
                  echo $container_name
                  # Login to Azure with ServicePrincipal
                  az login --service-principal -u $AZURE_CLIENT_ID -p $AZURE_CLIENT_SECRET -t $AZURE_TENANT_ID
                  # Set default subscription
                  az account set --subscription $AZURE_SUBSCRIPTION_ID
                  # Execute upload to Azure
                  az storage container create --account-name $AZURE_STORAGE_ACCOUNT --name $JOB_NAME --auth-mode login
                  az storage blob upload-batch --destination ${JOB_NAME} --source ./text --account-name $AZURE_STORAGE_ACCOUNT
                  # Logout from Azure
                  az logout
                '''
              }
            }
          }
        }
      }
    }
    
  4. Selecione Compilar agora para executar myjob.

  5. Examine o status da saída do console. Quando a ação pós-compilação carrega os artefatos de compilação, as mensagens de status para o armazenamento do Azure são gravadas no console.

  6. Se você encontrar um erro semelhante ao seguinte, isso significa que você precisa conceder acesso no nível do contêiner: Se receber esta mensagem de erro, consulte os seguintes artigos para resolver: ValidationError: You do not have the required permissions needed to perform this operation.

  7. Após a conclusão bem-sucedida do trabalho, examine os artefatos de construção abrindo o blob público:

    1. Inicie sessão no portal do Azure.
    2. Selecione Armazenamento.
    3. Selecione o nome da conta de armazenamento que você usou para Jenkins.
    4. Selecione Contêineres.
    5. Selecione o contêiner chamado myjob, dentro da lista de blobs.
    6. Você deve ver os dois arquivos a seguir: olá.txt e data.txt.
    7. Copie o URL de qualquer um destes itens e cole-o no navegador.
    8. Você vê o arquivo de texto que foi carregado como um artefato de compilação.

    Pontos principais:

    • Os nomes de contêiner e os nomes de blob são minúsculos (e diferenciam maiúsculas de minúsculas) no armazenamento do Azure.

Criar um trabalho de pipeline para baixar do Armazenamento de Blobs do Azure

As etapas a seguir mostram como configurar um trabalho de pipeline para baixar itens do Armazenamento de Blobs do Azure.

  1. Na seção Pipeline da configuração do trabalho, selecione Script de pipeline e cole o seguinte em Script. Edite os espaços reservados para corresponder aos valores do seu ambiente.

    pipeline {
      agent any
      environment {
        AZURE_SUBSCRIPTION_ID='99999999-9999-9999-9999-999999999999'
        AZURE_TENANT_ID='99999999-9999-9999-9999-999999999999'
        AZURE_STORAGE_ACCOUNT='myStorageAccount'
      }
      stages {
        stage('Build') {
          steps {
            withCredentials([usernamePassword(credentialsId: 'azuresp', 
                            passwordVariable: 'AZURE_CLIENT_SECRET', 
                            usernameVariable: 'AZURE_CLIENT_ID')]) {
              sh '''
                # Login to Azure with ServicePrincipal
                az login --service-principal -u $AZURE_CLIENT_ID -p $AZURE_CLIENT_SECRET -t $AZURE_TENANT_ID
                # Set default subscription
                az account set --subscription $AZURE_SUBSCRIPTION_ID
                # Execute upload to Azure
                az storage blob download --account-name $AZURE_STORAGE_ACCOUNT --container-name myjob --name hello.txt --file ${WORKSPACE}/hello.txt --auth-mode login
                # Logout from Azure
                az logout
              '''   
            }
          }
        }
      }
    }
    
  2. Depois de executar uma compilação, verifique a saída do console do histórico de compilação. Como alternativa, você também pode olhar para o local do download para ver se os blobs esperados foram baixados com sucesso.

Próximos passos