教學課程:使用 Jenkins 和 Azure CLI 部署至 Azure App 服務

重要

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

若要將 Java Web 應用程式部署至 Azure,您可以在 Jenkins Pipeline 中使用 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

建立部署 Java Web 應用程式的 Azure App 服務

使用 az appservice plan create 建立具有免費定價層的 Azure App 服務 方案

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

重點︰

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

建立 Azure Web 應用程式

使用 az webapp create 在 App Service 方案中建立 Web 應用程式定義 myAppServicePlan

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. 針對 [定義],從 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=x&y=<y。<<>>>><><

    Example of running the demo add

部署至Linux上的 Azure App 服務

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

您可以修改文稿以部署至Linux上的 Azure App 服務。 Linux 上的 App Service 支援 Docker。 因此,您會提供 Dockerfile,以將 Web 應用程式與服務運行時間封裝到 Docker 映射中。 外掛程式會建置映像、將其推送至 Docker 登錄,並將映射部署至您的 Web 應用程式。

  1. 請參閱使用自定義容器將自定義軟體遷移至 Azure App 服務,以在Linux和 Azure Container Registry 上建立 Azure App 服務。

        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. 在您分岔的相同 簡單 Java Web App 中 ,編輯 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 Jenkinsfile2中的 Azure Web 應用程式時,請建立新的 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 指定的值會加總並顯示。

下一步