Esercitazione: Usare Archiviazione di Azure per gli artefatti di compilazione

Importante

Molti servizi di Azure dispongono di plug-in Jenkins. Alcuni di questi plug-in non saranno supportati a partire dal 29 febbraio 2024. L'interfaccia della riga di comando di Azure è il modo attualmente consigliato per integrare Jenkins con i servizi di Azure. Per altre informazioni, vedere l'articolo Plug-in Jenkins per Azure.

L'articolo illustra come usare l'archiviazione BLOB come archivio di elementi di compilazione creati dalla soluzione di integrazione continua Jenkins o come origine di file scaricabili da usare in un processo di compilazione. Questa soluzione può rivelarsi utile nel caso in cui si codifichi in un ambiente di sviluppo agile (usando Java o altri linguaggi), le compilazioni vengano eseguite in base all'integrazione continuata e sia necessario un archivio per gli artefatti di compilazione, ad esempio per poterli condividere con altri membri dell'organizzazione o clienti oppure per gestire un archivio. Un altro scenario è quando il processo di compilazione stesso richiede altri file, ad esempio dipendenze da scaricare come parte dell'input di compilazione.

Prerequisiti

  • Sottoscrizione di Azure: se non si ha una sottoscrizione di Azure, creare un account Azure gratuito prima di iniziare.
  • Server Jenkins: se non è installato un server Jenkins, creare un server Jenkins in Azure.
  • Interfaccia della riga di comando di Azure: installare l'interfaccia della riga di comando di Azure (versione 2.0.67 o successiva) nel server Jenkins.
  • Account di archiviazione di Azure: se non si ha già un account di archiviazione, creare un account Archiviazione.

Aggiungere le credenziali di Azure necessarie per eseguire l'interfaccia della riga di comando di Azure

  1. Passare al portale di Jenkins.

  2. Nel menu selezionare Manage Jenkins (Gestisci Jenkins).

  3. Selezionare Manage Credentials (Gestisci credenziali).

  4. Selezionare il dominio global.

  5. Selezionare Aggiungi credenziali.

  6. Compilare i campi obbligatori nel modo seguente:

    • Tipo: selezionare Username with password (Nome utente con password).
    • Nome utente: specificare l'oggetto appId dell'entità servizio.
    • Password: specificare l'oggetto password dell'entità servizio.
    • ID: specificare un identificatore di credenziali, ad esempio azuresp.
    • Descrizione: facoltativamente, includere una descrizione significativa per l'ambiente.
  7. Scegliere OK per creare le credenziali.

Creare un processo della pipeline per caricare gli artefatti della compilazione

La procedura seguente illustra in dettaglio la creazione di un processo della pipeline. Il processo crea diversi file e li carica nell'account di archiviazione usando l'interfaccia della riga di comando di Azure.

  1. Nel dashboard di Jenkins selezionare New Item (Nuovo elemento).

  2. Assegnare al processo il nome myjob, selezionare Pipeline e quindi scegliere OK.

  3. Nella sezione Pipeline della configurazione del processo selezionare Pipeline script (Script pipeline) e incollare il codice seguente in Script. Modificare i segnaposto in modo che corrispondano ai valori dell'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. Selezionare Build Now (Compila) per eseguire myjob.

  5. Esaminare l'output di console per ottenere informazioni sullo stato. Quando l'azione di post-compilazione carica gli artefatti della compilazione, nella console vengono scritti i messaggi di stato per l'archiviazione di Azure.

  6. Se si verifica un errore simile al seguente, significa che è necessario concedere l'accesso a livello di contenitore: ValidationError: You do not have the required permissions needed to perform this operation. se viene visualizzato questo messaggio di errore, fare riferimento agli articoli seguenti per risolvere:

  7. Dopo avere completato il processo, esaminare gli artefatti della compilazione aprendo il BLOB pubblico:

    1. Accedere al portale di Azure.
    2. Selezionare Archiviazione.
    3. Fare clic sul nome dell'account di archiviazione usato per Jenkins.
    4. Selezionare Contenitori.
    5. Selezionare il contenitore denominato myjob nell'elenco dei BLOB.
    6. Dovrebbero essere visualizzati due file: hello.txt e date.txt.
    7. Copiare l'URL di uno di questi elementi e incollarlo nel browser.
    8. Viene visualizzato il file di testo caricato come elemento di compilazione.

    Punti principali:

    • In Archiviazione di Azure i nomi di contenitori e i nomi di BLOB sono riportati in lettere minuscole (e si applica la distinzione maiuscole/minuscole).

Creare un processo della pipeline da scaricare da Archiviazione BLOB di Azure

I passaggi seguenti illustrano come configurare un processo della pipeline per scaricare gli elementi da Archiviazione BLOB di Azure.

  1. Nella sezione Pipeline della configurazione del processo selezionare Pipeline script (Script pipeline) e incollare il codice seguente in Script. Modificare i segnaposto in modo che corrispondano ai valori dell'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. Dopo l'esecuzione di una compilazione, controllare l'output della console della cronologia delle compilazioni. In alternativa, si può anche controllare il percorso di download per verificare se i BLOB previsti sono stati scaricati correttamente.

Passaggi successivi