Esercitazione: Eseguire la distribuzione in Funzioni di Azure usando Jenkins

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.

Funzioni di Azure è un servizio di calcolo senza server. Usando Funzioni di Azure è possibile eseguire codice on demand senza provisioning o gestione dell'infrastruttura. Questa esercitazione mostra come distribuire una funzione Java in Funzioni di Azure tramite il plug-in per Funzioni di Azure.

Prerequisiti

Visualizzare il codice sorgente

Il codice sorgente usato per questa esercitazione si trova nel repository GitHub Visual Studio China.

Creare una funzione Java

Per creare una funzione Java con lo stack di runtime Java, usare il portale di Azure o l'interfaccia della riga di comando di Azure.

La procedura seguente mostra come creare una funzione Java tramite l'interfaccia della riga di comando di Azure:

  1. Creare un gruppo di risorse, sostituendo il <segnaposto resource_group> con il nome del gruppo di risorse.

    az group create --name <resource_group> --location eastus
    
  2. Creare un account di archiviazione di Azure, sostituendo i segnaposto con i valori appropriati.

    az storage account create --name <storage_account> --location eastus --resource-group <resource_group> --sku Standard_LRS    
    
  3. Creare l'app per le funzioni di test, sostituendo i segnaposto con i valori appropriati.

    az functionapp create --resource-group <resource_group> --runtime java --consumption-plan-location eastus --name <function_app> --storage-account <storage_account> --functions-version 2
    

Preparare il server Jenkins

La procedura seguente descrive come preparare il server Jenkins:

  1. Distribuire un server Jenkins in Azure. Se non è già installata un'istanza del server Jenkins, l'articolo Creare un server Jenkins in Azure descrive in modo dettagliato questo processo.

  2. Accedere all'istanza di Jenkins con SSH.

  3. Nelll'istanza di Jenkins installare l'interfaccia della riga di comando di Azure versione 2.0.67 o successiva.

  4. Installare Maven usando il comando seguente:

    sudo apt install -y maven
    
  5. Nell'istanza di Jenkins installare Azure Functions Core Tools eseguendo i comandi seguenti da un prompt del terminale:

    curl https://packages.microsoft.com/keys/microsoft.asc | gpg --dearmor > microsoft.gpg
    sudo mv microsoft.gpg /etc/apt/trusted.gpg.d/microsoft.gpg
    sudo sh -c 'echo "deb [arch=amd64] https://packages.microsoft.com/repos/microsoft-ubuntu-$(lsb_release -cs)-prod $(lsb_release -cs) main" > /etc/apt/sources.list.d/dotnetdev.list'
    cat /etc/apt/sources.list.d/dotnetdev.list
    sudo apt-get update
    sudo apt-get install azure-functions-core-tools-3
    
  6. Jenkins richiede un'entità servizio di Azure per l'autenticazione e l'accesso alle risorse di Azure. Per istruzioni dettagliate, fare riferimento a Eseguire la distribuzione in Servizio app di Azure.

  7. Assicurarsi che il plug-in Credenziali sia installato.

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

    2. In Configurazione di sistema selezionare Gestisci plug-in.

    3. Selezionare la scheda Installati.

    4. Nel campo del filtro immettere credentials.

    5. Verificare che il plug-in Credentials sia installato. Se non lo è, occorre installarlo dalla scheda Available (Disponibili).

    The Credentials Plug-in needs to be installed.

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

  9. In Security (Sicurezza) selezionare Manage Credentials (Gestisci credenziali).

  10. In Credentials (Credenziali) selezionare (global).

  11. Scegliere Add Credentials (Aggiungi credenziali) dal menu.

  12. Immettere i valori seguenti per l'entità servizio di Microsoft Azure:

    • Tipo: selezionare il valore Username with password (Nome utente con password).
    • Nome utente: specificare l'oggetto appId dell'entità servizio creata.
    • Password: specificare il password segreto dell'entità servizio.
    • ID: specificare l'identificatore delle credenziali, ad esempio azuresp.
  13. Seleziona OK.

Creare una copia tramite fork del repository GitHub di esempio

  1. Accedere al repository GitHub per l'app di esempio odd-or-even.

  2. Nell'angolo superiore destro in GitHub scegliere Fork.

  3. Seguire le istruzioni per selezionare l'account GitHub e completare la creazione di una copia tramite fork.

Creare una pipeline Jenkins

In questa sezione viene creata la pipeline Jenkins.

  1. Nel dashboard di Jenkins creare una pipeline.

  2. Selezionare Prepare an environment for the run (Preparare un ambiente per l'esecuzione).

  3. Nella sezione Pipeline-Definition> (Definizione pipeline) selezionare Pipeline script from SCM (Script pipeline da SCM).

  4. Immettere il percorso dello script e l'URL del fork di GitHub ("doc/resources/jenkins/JenkinsFile") da usare nell'esempio JenkinsFile.

     node {
     withEnv(['AZURE_SUBSCRIPTION_ID=99999999-9999-9999-9999-999999999999',
             'AZURE_TENANT_ID=99999999-9999-9999-9999-999999999999']) {
         stage('Init') {
             cleanWs()
             checkout scm
         }
    
         stage('Build') {
             sh 'mvn clean package'
         }
    
         stage('Publish') {
             def RESOURCE_GROUP = '<resource_group>' 
             def FUNC_NAME = '<function_app>'
             // login Azure
             withCredentials([usernamePassword(credentialsId: 'azuresp', passwordVariable: 'AZURE_CLIENT_SECRET', usernameVariable: 'AZURE_CLIENT_ID')]) {
             sh '''
                 az login --service-principal -u $AZURE_CLIENT_ID -p $AZURE_CLIENT_SECRET -t $AZURE_TENANT_ID
                 az account set -s $AZURE_SUBSCRIPTION_ID
             '''
             }
             sh 'cd $PWD/target/azure-functions/odd-or-even-function-sample && zip -r ../../../archive.zip ./* && cd -'
             sh "az functionapp deployment source config-zip -g $RESOURCE_GROUP -n $FUNC_NAME --src archive.zip"
             sh 'az logout'
             }
         }
     }
    

Crea e distribuisci

È ora possibile eseguire il processo Jenkins.

  1. Prima di tutto, ottenere la chiave di autorizzazione tramite le istruzioni contenute nell'articolo Trigger e associazioni HTTP di Funzioni di Azure.

  2. Nel browser immettere l'URL dell'app. Sostituire i segnaposto con i valori appropriati e specificare un valore numerico per <input_number> come input per la funzione Java.

    https://<function_app>.azurewebsites.net/api/HttpTrigger-Java?code=<authorization_key>&number=<input_number>
    
  3. Verranno visualizzati risultati simili all'output di esempio seguente (in cui è stato usato un numero dispari, 365, come test):

    The number 365 is Odd.
    

Pulire le risorse

Se non si intende continuare a usare questa applicazione, eliminare le risorse associate seguendo questa procedura:

az group delete -y --no-wait -n <resource_group>

Passaggi successivi