教學課程:使用 Jenkins 和 Azure CLI 來部署到 Azure App Service

重要

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

若要將 Java Web 應用程式部署到 Azure,您可以在 Jenkins 管線中使用 Azure CLI。 在此教學課程中,您會執行下列工作:

  • 建立 Jenkins VM
  • 設定 Jenkins
  • 在 Azure 中建立 Web 應用程式
  • 準備 GitHub 存放庫
  • 建立 Jenkins 管線
  • 執行管線並確認 Web 應用程式

先決條件

  • Azure 訂用帳戶:如果您沒有 Azure 訂用帳戶,請在開始前建立免費帳戶

設定 Jenkins

下列步驟示範如何在 Jenkins 控制器上安裝必要的 JAVA JDK 和 Maven:

  1. 使用 SSH 登入 Jenkins 控制器。

  2. 從 apt-get 存放庫下載並安裝適用于 Azure 的 OpenJDK Azul Zulu 組建:

    sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys 0xB1998361219BD9C9
    sudo apt-add-repository "deb http://repos.azul.com/azure-only/zulu/apt stable main"
    sudo apt-get -q update
    sudo apt-get -y install zulu-8-azure-jdk
    
  3. 執行下列命令來安裝 Maven:

    sudo apt-get install -y maven
    

將 Azure 服務主體新增到 Jenkins 認證

下列步驟說明如何指定您的 Azure 認證:

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

  2. 在 Jenkins 儀表板中,選取 [認證 - > 系統] - [系統]。 >

  3. 選取 [全域認證 (不受限)]。

  4. 選取 [新增認證] 來新增 Microsoft Azure 服務主體。 請確定認證種類為 [具有密碼的使用者名稱 ],並輸入下列專案:

    • 使用者名稱:服務主體 appId
    • 密碼:服務主體 password
    • 識別碼:認證識別碼 (例如 AzureServicePrincipal)

建立 Azure App Service 來部署 Java Web 應用程式

使用 az appservice plan create 建立搭配免費定價層的 Azure App Service 方案:

az appservice plan create \
    --name <app_service_plan> \ 
    --resource-group <resource_group> \
    --sku FREE

重點

  • Appservice 方案會定義用來託管應用程式的實體資源。
  • 指派給 Appservice 方案的所有應用程式都會共用這些資源。
  • Appservice 方案可讓您節省裝載多個應用程式時的成本。

建立 Azure Web 應用程式

使用 az webapp createmyAppServicePlan App Service 方案中建立 Web 應用程式定義。

az webapp create \
    --name <app_name> \ 
    --resource-group <resource_group> \
    --plan <app_service_plan>

重點

  • Web 應用程式定義會提供一個 URL 以存取您的應用程式,並設定數個選項將您的程式碼部署至 Azure。
  • 使用唯一應用程式名稱來取代 <app_name> 預留位置。
  • 應用程式名稱是 Web 應用程式預設網域名稱的一部分。 因此,該名稱在 Azure 中的所有應用程式之間必須是唯一的。
  • 您可以先將自訂的網域名稱項目對應至 Web 應用程式,再將它公開給使用者。

設定 Java

使用 az appservice web config update 設定應用程式的 Java 執行階段設定:

az webapp config set \ 
    --name <app_name> \
    --resource-group <resource_group> \ 
    --java-version 1.8 \ 
    --java-container Tomcat \
    --java-container-version 8.0

準備 GitHub 存放庫

  1. 開啟適用於 Azure 的簡單 Java Web 應用程式存放庫。

  2. 選取 [派生] 按鈕,以將存放庫派生至您自己的 GitHub 帳戶。

  3. 按一下檔案名稱以開啟 [Jenkinsfile] 檔案。

  4. 選取鉛筆圖示即可編輯檔案。

  5. 更新訂用帳戶識別碼和租使用者識別碼。

      withEnv(['AZURE_SUBSCRIPTION_ID=<subscription_id>',
            'AZURE_TENANT_ID=<tenant_id>']) 
    
  6. 分別在第 22 和 23 行更新 Web 應用程式的資源群組和名稱。

    def resourceGroup = '<resource_group>'
    def webAppName = '<app_name>'
    
  7. 更新您 Jenkins 執行個體中的認證識別碼

    withCredentials([usernamePassword(credentialsId: '<service_princial>', passwordVariable: 'AZURE_CLIENT_SECRET', usernameVariable: 'AZURE_CLIENT_ID')]) {
    

建立 Jenkins 管線

執行下列動作來建立 Jenkins 管線:

  1. 在網頁瀏覽器中開啟 Jenkins。

  2. 選取 [新增項目] 。

  3. 輸入作業的名稱。

  4. 選取 [管線]。

  5. 選取 [確定]。

  6. 選取 [管線]。

  7. 針對 [Definition] \(定義\) ,選取 [Pipeline script from SCM] \(來自 SCM 的管線指令碼\) 。

  8. 針對 [SCM] ,選取 [Git] 。

  9. 輸入您分支存放庫的 GitHub URL:https:\<forked_repo\>.git

  10. 選取 [儲存]。

測試您的管線

  1. 移至您建立的管線

  2. 選取 [立即建置]

  3. 建置完成後,請選取 [主控台輸出] 以查看組建詳細資料。

確認您的 Web 應用程式

請執行下列作業,確認 WAR 檔案是否已順利部署到您的 Web 應用程式:

  1. 瀏覽至下列 URL:http://&lt;app_name>.azurewebsites.net/api/calculator/ping

  2. 您應該會看到類似以下的輸出:

    Welcome to Java Web App!!! This is updated!
    Today's date
    
  3. 流覽至下列 URL (將 x 和 y 取代 < 為要加總的兩個值) :HTTP:// < app_name.azurewebsites.net/api/calculator/add?x > = < xy >& = < y >> 。 <>

    Example of running the demo add

部署至 Linux 上的 Azure App Service

App Service 也可以針對支援的應用程式堆疊,在 Linux 上以原生方式裝載 Web 應用程式。 其也可以執行自訂的 Linux 容器 (也稱為用於容器的 Web App)。

您可以修改指令碼以部署至 Linux 上的 Azure App Service。 Linux 上的 App Service 支援 Docker。 因此,您可提供一個 Dockerfile,此檔案會將您的 Web 應用程式與服務執行階段封裝成 Docker 映像。 外掛程式會建置該映像,將其推送到 Docker 登錄,然後將該映像部署到您的 Web 應用程式。

  1. 請參閱使用自訂容器將自訂軟體遷移至 Azure App Service,以建立 Linux 上的 Azure App Service 和 Azure Container Registry。

        az group create --name myResourceGroup2 --location westus2
        az acr create --name myACRName --resource-group myResourceGroup2 --sku Basic --admin-enabled true
        az appservice plan create --name myAppServicePlan --resource-group  myResourceGroup2 --is-linux
        az webapp create --resource-group myResourceGroup2 --plan myAppServicePlan --name myApp --deployment-container-image-name myACRName.azurecr.io/calculator:latest
    
  2. 在您的 Jenkins 上安裝 Docker

  3. 請確定已安裝 Docker Pipeline 外掛程式

  4. 在您所分支的相同適用於 Azure 的簡單 Java Web 應用程式存放庫中,編輯 Jenkinsfile2 檔案,如下所是:

    1. 更新訂用帳戶識別碼和租使用者識別碼。

       withEnv(['AZURE_SUBSCRIPTION_ID=<mySubscriptionId>',
              'AZURE_TENANT_ID=<myTenantId>']) {
      
    2. 更新您的資源群組、Web 應用程式和 ACR 的名稱 (以您的值取代預留位置)。

      def webAppResourceGroup = '<resource_group>'
      def webAppName = '<app_name>'
      def acrName = '<registry>'
      
    3. <azsrvprincipal\> 更新為您的認證識別碼

      withCredentials([usernamePassword(credentialsId: '<service_principal>', passwordVariable: 'AZURE_CLIENT_SECRET', usernameVariable: 'AZURE_CLIENT_ID')]) {
      
  5. 就像您部署到 Windows 中的 Azure Web 應用程式時一樣,使用 Jenkinsfile2 建立新的 Jenkins 管線。

  6. 執行您的新作業。

  7. 若要確認,請在 Azure CLI 中執行下列命令:

    az acr repository list -n <myRegistry> -o json
    

    您應該會看到如下的結果:

    [
    "calculator"
    ]
    
  8. 瀏覽至 http://<app_name>.azurewebsites.net/api/calculator/ping (取代預留位置)。 您應該會看見如下所示的結果:

    Welcome to Java Web App!!! This is updated!
    Today's date
    
  9. 瀏覽至 http://<app_name>.azurewebsites.net/api/calculator/add?x=<x>&y=<y> (取代預留位置)。 您為 xy 指定的值會加總並顯示。

後續步驟