Självstudie: Distribuera till Azure Functions med Jenkins

Viktigt!

Många Azure-tjänster har Jenkins-plugin-program. Vissa av dessa plugin-program kommer att vara utan stöd från och med den 29 februari 2024. Azure CLI är det för närvarande rekommenderade sättet att integrera Jenkins med Azure-tjänster. Mer information finns i artikeln Jenkins-plugin-program för Azure.

Azure Functions är en "serverlös" beräkningstjänst. Med Azure Functions kan köra du kod på begäran utan att tillhandahålla eller hantera infrastruktur. Den här självstudien visar hur du distribuerar en Java-funktion till Azure Functions med hjälp av Azure Functions-plugin-programmet.

Förutsättningar

Visa källkoden

Källkoden i den här självstudien finns i Visual Studio Kina GitHub-lagringsplatsen.

Skapa en Java-funktion

Om du vill skapa en Java-funktion med Java-körningsstacken kan du använda antingen Azure-portalen eller Azure CLI.

Följande steg visar hur du skapar en Java-funktion med Azure CLI:

  1. Skapa en resursgrupp och ersätt platshållaren <resource_group> med resursgruppens namn.

    az group create --name <resource_group> --location eastus
    
  2. Skapa ett Azure Storage-konto som ersätter platshållarna med lämpliga värden.

    az storage account create --name <storage_account> --location eastus --resource-group <resource_group> --sku Standard_LRS    
    
  3. Skapa testfunktionsappen som ersätter platshållarna med lämpliga värden.

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

Förbereda Jenkins-servern

Följande steg beskriver hur du förbereder Jenkins-servern:

  1. Distribuera en Jenkins-server i Azure. Om du inte redan har en instans av Jenkins-servern installerad får du vägledning genom processen i artikeln Skapa en Jenkins-server i Azure.

  2. Logga in på Jenkins-instansen med SSH.

  3. Installera Az CLI, version 2.0.67 eller senare på Jenkins-instansen.

  4. Installera maven med följande kommando:

    sudo apt install -y maven
    
  5. På Jenkins-instansen installerar du Azure Functions Core Tools genom att utfärda följande kommandon vid en terminaluppmaning:

    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 behöver Azure-tjänstens huvudnamn för att autentisera och få åtkomst till Azure-resurser. Referera till de stegvisa instruktionerna i Distribuera till Azure App Service.

  7. Kontrollera att plugin-programmet Autentiseringsuppgifter är installerat.

    1. Välj Hantera Jenkins på menyn.

    2. Under Systemkonfiguration väljer du Hantera plugin-program.

    3. Välj fliken Installerad .

    4. I filterfältet anger du credentials.

    5. Kontrollera att plugin-programmet Autentiseringsuppgifter är installerat. Annars måste du installera det från fliken Tillgänglig .

    The Credentials Plug-in needs to be installed.

  8. Välj Hantera Jenkins på menyn.

  9. Under Säkerhet väljer du Hantera autentiseringsuppgifter.

  10. Under Autentiseringsuppgifter väljer du (global).

  11. Välj Lägg till autentiseringsuppgifter på menyn.

  12. Ange följande värden för tjänstens huvudnamn för Microsoft Azure:

    • Typ: Välj värdet: Användarnamn med lösenord.
    • Användarnamn: Ange för appId tjänstens huvudnamn som skapats.
    • Lösenord: Ange (hemligheten password ) för tjänstens huvudnamn.
    • ID: Ange identifieraren för autentiseringsuppgifter, till exempel azuresp.
  13. Välj OK.

Förgrena GitHub-exempel-lagringsplatsen

  1. Logga in på GitHub-lagringsplatsen för den udda eller till och med exempelappen.

  2. I det övre högra hörnet i GitHub väljer du Fork (Förgrening).

  3. Följ anvisningarna för att välja ditt GitHub-konto och slutför förgreningen.

Skapa en Jenkins-pipeline

I det här avsnittet skapar du en Jenkins-pipeline.

  1. Skapa en pipeline i Jenkins-instrumentpanelen.

  2. Aktivera Förbered en miljö för körningen.

  3. I avsnittet Pipeline-Definition väljer du Pipeline-skript> från SCM.

  4. Ange din GitHub-förgrenings URL och skriptsökväg ("doc/resources/jenkins/JenkinsFile") som ska användas i JenkinsFile-exemplet.

     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'
             }
         }
     }
    

Skapa och distribuera

Nu är det dags att köra Jenkins-jobbet.

  1. Först hämtar du auktoriseringsnyckeln via anvisningarna i artikeln om HTTP-utlösare och bindningar i Azure Functions.

  2. Ange appens webbadress i webbläsaren. Ersätt platshållarna med lämpliga värden och ange ett numeriskt värde för <input_number> som indata för Java-funktionen.

    https://<function_app>.azurewebsites.net/api/HttpTrigger-Java?code=<authorization_key>&number=<input_number>
    
  3. Du ser resultat som liknar följande exempelutdata (där ett udda tal – 365 – användes som ett test):

    The number 365 is Odd.
    

Rensa resurser

Om du inte planerar att fortsätta använda det här programmet tar du bort de resurser som du skapade med följande steg:

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

Nästa steg