教學課程:使用 Jenkins 部署至 Azure Functions

重要

許多 Azure 服務都有 Jenkins 外掛程式。截至 2024 年 2 月 29 日,其中部分外掛程式將不支援。 Azure CLI 目前是整合 Jenkins 與 Azure 服務的建議方式。 如需詳細資訊,請參閱適用于 Azure 的 Jenkins 外掛程式一文

Azure Functions 是無伺服器計算服務。 使用 Azure Functions,您可以視需要執行程式碼,而不需布建或管理基礎結構。 本教學課程說明如何使用 Azure Functions 外掛程式將 JAVA 函式部署至 Azure Functions。

必要條件

檢視原始程式碼

本教學課程所使用的原始程式碼位於 Visual Studio China GitHub 存放庫中

建立 JAVA 函式

若要使用 JAVA 執行時間堆疊建立 JAVA 函式,請使用 Azure 入口網站 或 Azure CLI

下列步驟示範如何使用 Azure CLI 建立 JAVA 函式:

  1. 建立資源群組,並將 < resource_group > 預留位置取代為您的資源組名。

    az group create --name <resource_group> --location eastus
    
  2. 建立 Azure 儲存體帳戶,以適當的值取代預留位置。

    az storage account create --name <storage_account> --location eastus --resource-group <resource_group> --sku Standard_LRS    
    
  3. 建立測試函式應用程式,以適當的值取代預留位置。

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

準備 Jenkins 伺服器

下列步驟說明如何準備 Jenkins 伺服器:

  1. Azure 上部署 Jenkins 伺服器 。 如果您尚未安裝 Jenkins 伺服器的實例,文章: 在 Azure 上建立 Jenkins 伺服器會引導您完成此程式。

  2. 使用 SSH 登入 Jenkins 實例。

  3. 在 Jenkins 實例上,安裝 Az CLI 2.0.67 版或更高版本。

  4. 使用下列命令安裝 maven:

    sudo apt install -y maven
    
  5. 在 Jenkins 實例上,在終端機提示字元發出下列命令,以安裝 Azure Functions Core Tools

    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 需要 Azure 服務主體來驗證和存取 Azure 資源。 如需 逐步指示,請參閱部署至Azure App 服務

  7. 請確定已安裝認證 外掛程式

    1. 從功能表中,選取 [ 管理 Jenkins ]。

    2. 在 [系統設定] 底 下,選取 [ 管理外掛程式 ]。

    3. 選取 [已安裝] 索引標籤。

    4. 篩選 欄位中,輸入 credentials

    5. 確認已安裝認證 外掛程式 。 如果沒有,您必須從 [ 可用的 ] 索引標籤安裝它。

    The Credentials Plug-in needs to be installed.

  8. 從功能表中,選取 [ 管理 Jenkins ]。

  9. 在 [安全性] 底下 ,選取 [ 管理認證 ]。

  10. 在 [認證] 底下 ,選取 [全域]。

  11. 從功能表中,選取 [ 新增認證 ]。

  12. 為您的 Microsoft Azure 服務主體 輸入下列值

    • 種類 :選取值: 具有密碼的使用者名稱
    • 使用者名稱 :指定 appId 所建立之服務主體的 。
    • 密碼 :指定 password 服務主體的 (secret) 。
    • 識別碼 :指定認證識別碼,例如 azuresp
  13. 選取 [確定]。

分支範例 GitHub 存放庫

  1. 登入奇數或甚至範例應用程式的 GitHub 存放庫。

  2. 在 GitHub 的右上角,選擇 [ 分支 ]。

  3. 請依照提示選取您的 GitHub 帳戶並完成分叉。

建立 Jenkins 管線

在本節中,您會建立 Jenkins 管線

  1. 在 Jenkins 儀表板中,建立管線。

  2. 啟用 [準備執行的環境 ]。

  3. 在 [管線定義 > ] 區 段中,從 SCM 選取 [管線腳本]。

  4. 輸入 GitHub 分支的 URL 和腳本路徑(「doc/resources/jenkins/JenkinsFile」),以在 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'
             }
         }
     }
    

建置和部署

現在是執行 Jenkins 作業的時候了。

  1. 首先,透過 Azure Functions HTTP 觸發程式和系結 一文中的 指示取得授權金鑰。

  2. 在您的瀏覽器中,輸入應用程式的 URL。 將預留位置取代為適當的值,並指定input_number >< 數值作為 JAVA 函式的輸入。

    https://<function_app>.azurewebsites.net/api/HttpTrigger-Java?code=<authorization_key>&number=<input_number>
    
  3. 您會看到類似下列範例輸出的結果(其中奇數 - 365 - 用作測試):

    The number 365 is Odd.
    

清除資源

如果您不打算繼續使用此應用程式,請刪除您使用下列步驟建立的資源:

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

下一步