使用 Azure Web 應用程式部署動作搭配 Azure Stack Hub

您可以設定 GitHub Actions,將 Web 應用程式部署到 Azure Stack Hub 執行個體。 這可讓您設定應用程式的持續整合和持續部署。 本文將協助您使用 GitHub Actions 和 Azure Stack Hub 開始執行自動化部署。 您將建立 Web 應用程式,並使用發行設定檔建立 Web 應用程式以裝載應用程式。

GitHub Actions 是由動作組成的工作流程,這些動作可直接在程式碼存放庫中啟用自動化作業。 您可以利用 GitHub 開發程序中的事件來觸發工作流序。 您可以設定常見的 DevOps 自動化工作,例如測試、部署和持續整合。

此範例工作流程包含下列相關指示:

  • 建立和驗證您的服務主體
  • 建立您的 Web 應用程式發行設定檔
  • 新增執行階段特定工作流程
  • 使用 Web 應用程式部署新增相符的工作流程

建立服務主體

服務主體可以使用角色型存取控制,以連線到資源並與其互動。 您需要具有參與者存取權的服務主體以及這些指示中指定的屬性,以搭配 GitHub Actions 使用。

重要

如果您是 Azure Stack Hub 的開發人員或使用者,則沒有建立服務主體的權限。 您需要具備雲端操作員權限,或使用本節中的指示向雲端操作員要求此主體。

下列是使用 PowerShell 命令提示字元,以 Azure CLI 專為 Windows 機器撰寫的程式碼片段。 如果您在 Linux 機器和 Bash 上使用 CLI,請移除 Line Extension 或以 \ 取代。

  1. 準備下列用來建立服務主體的參數值:

    參數 範例 描述
    endpoint-resource-manager "https://management.orlando.azurestack.corp.microsoft.com" 資源管理端點。
    suffix-storage-endpoint "orlando.azurestack.corp.microsoft.com" 儲存體帳戶的端點尾碼。
    suffix-keyvault-dns ".vault.orlando.azurestack.corp.microsoft.com" Key Vault 服務 DNS 尾碼。
    endpoint-active-directory-graph-resource-id "https://graph.windows.net/" Active Directory 資源識別碼。
    endpoint-sql-management https://notsupported SQL Server 管理端點。 請設為 https://notsupported
    profile 2020-09-01-hybrid 要用於此雲端的設定檔。
  2. 開啟您的命令列工具 (例如 Windows PowerShell 或 Bash)。 使用下列命令登入 Azure CLI:

    az login
    
  3. 新環境請使用 register 命令;如果您使用的是現有環境,則請使用 update 命令。 使用下列命令。

    az cloud register `
        -n "AzureStackUser" `
        --endpoint-resource-manager "https://management.<local>.<FQDN>" `
        --suffix-storage-endpoint ".<local>.<FQDN>" `
        --suffix-keyvault-dns ".vault.<local>.<FQDN>" `
        --endpoint-active-directory-graph-resource-id "https://graph.windows.net/" `
        --endpoint-sql-management https://notsupported  `
        --profile 2020-09-01-hybrid
    
  4. 取得您想要用於服務主體的訂用帳戶識別碼和資源群組。

  5. 使用下列命令,搭配訂用帳戶識別碼和資源群組來建立服務主體:

    az ad sp create-for-rbac --name "myApp" --role contributor `
        --scopes /subscriptions/{subscription-id}/resourceGroups/{resource-group} `
        --sdk-auth
    
  6. 複製產生的 JSON 物件。 您將會在包含動作的 GitHub 存放庫中,使用 JSON 物件建立祕密。 JSON 物件應該具有下列屬性:

    {
      "clientId": <Application ID for the service principal>,
      "clientSecret": <Client secret for the service principal>,
      "subscriptionId": <Subscription ID for the service principal>,
      "tenantId": <Tenant ID for the service principal>,
      "activeDirectoryEndpointUrl": "https://login.microsoftonline.com/",
      "resourceManagerEndpointUrl": "https://management.<FQDN>",
      "activeDirectoryGraphResourceId": "https://graph.windows.net/",
      "sqlManagementEndpointUrl": "https://notsupported",
      "galleryEndpointUrl": "https://providers.<FQDN>:30016/",
      "managementEndpointUrl": "https://management.<FQDN>"
    }
    

建立 Web 應用程式發行設定檔

開啟 [建立 Web 應用程式] 刀鋒視窗

  1. 登入 Azure Stack Hub 入口網站。
  2. 選取 [建立資源] [Web + 行動] [Web 應用程式]在 Azure Stack Hub 中建立 Web 應用程式

建立 Web 應用程式

  1. 選取 [訂用帳戶]。
  2. 建立或選取 [資源群組]。
  3. 鍵入應用程式的 [名稱]。 應用程式名稱會出現在應用程式的 URL 中,例如 yourappname.appservice.<region>.<FQDN>
  4. 選取應用程式的 [執行階段堆疊]。 執行階段必須符合您將發行設定檔設為目標所使用的工作流程。
  5. 選取將裝載執行階段和應用程式的作業系統 (OS)。
  6. 選取或鍵入 Azure Stack Hub 執行個體的 [區域]。
  7. 根據 Azure Stack Hub 執行個體、區域和應用程式 OS 來選取方案。
  8. 選取 [檢閱 + 建立] 。
  9. 檢閱 Web 應用程式。 選取 [建立]。 在 Azure Stack Hub 中檢閱 Web 應用程式
  10. 選取 [前往資源] 。 在 Azure Stack Hub 中取得發佈設定檔
  11. 選取 [取得發行設定檔]。 即會下載發行設定檔並命名為 <yourappname>.PublishSettings。 此檔案包含具有 Web 應用程式目標值的 XML。
  12. 儲存發行設定檔,以便在建立存放庫祕密時存取。

將祕密新增至存放庫

您可以使用 GitHub 祕密加密在動作中使用的敏感性資訊。 您會建立祕密來包含您的服務主體,並建立另一個祕密來包含您的 Web 應用程式發行設定檔。 此動作會使用這些項目來登入您的 Azure Stack Hub 執行個體,並將您的應用程式建置到 Web 應用程式目標。

  1. 開啟或建立 GitHub 存放庫。 如果您需要在 GitHub 建立存放庫的指引,您可以參閱 GitHub 文件中的指示
  2. 選取 [設定]。
  3. 選取 [祕密]。
  4. 選取 [新增存放庫祕密]。 新增您的 GitHub Actions 秘密
  5. 將祕密命名為 AZURE_CREDENTIALS
  6. 貼上代表服務主體的 JSON 物件。
  7. 選取 [新增祕密]。
  8. 選取 [新增存放庫祕密]。
  9. 將祕密命名為 AZURE_WEBAPP_PUBLISH_PROFILE
  10. 在文字編輯器中開啟 <yourappname>.PublishSettings,然後複製 XML 並將其貼入存放庫祕密中。
  11. 選取 [新增祕密]。

新增執行階段工作流程

  1. 從資料表中選擇 Web 應用程式執行階段範本。

    執行階段 範本
    DotNet dotnet.yml
    NodeJS node.yml
    Java java_jar.yml
    Java java_war.yml
    Python python.yml
    PHP php.yml
    Docker docker.yml
  2. 將範本 GitHub Actions 工作流程目錄放在專案存放庫中:.github/workflows/<runtime.yml>。工作流程目錄將會包含兩個工作流程。

新增 Web 應用程式部署動作

使用本節中的 YAML 建立第二個工作流程。 您將在此範例中部署 Python Web 應用程式。 您可能必須根據工作流程選取設定動作。 在建立動作步驟後,您可以在資料表設定不同執行階段的動作中,找到設定各種執行階段動作的參考。

GitHub Actions 工作流程範例

  1. 開啟 GitHub 存放庫。 如果尚未新增 Web 應用程式的應用資源,請立即新增這些資源。 在此範例中,我使用的是 Python Flask Hello World 範例,並新增了 Python .gitignoreapp.pyrequirements.txt 檔案。

    使用 Python Flask 搭配 Azure Stack Hub 的存放庫範例

  2. 選取 [動作]。

  3. 選取 [新增工作流程]。

    • 如果這是您的第一個工作流程,請選取 [選擇工作流程範本] 下的 [自行設定工作流程]。
    • 如果您具有現有的工作流程,請選取 [新增工作流程] > [自行設定工作流程]。
  4. 將路徑中的檔案命名為 workflow.yml

  5. 複製並貼上工作流程 YAML。

    # .github/workflows/worfklow.yml
    on: push
    
    jobs:
      build-and-deploy:
        runs-on: ubuntu-latest
        steps:
        # checkout the repo
        - name: 'Checkout Github Action' 
          uses: actions/checkout@main
    
        - name: Setup Python 3.6
          uses: actions/setup-node@v1
          with:
            python-version: '3.6'
        - name: 'create a virtual environment and install dependencies'
          run: |
            python3 -m venv .venv
            source .venv/bin/activate
            pip install -r requirements.txt
    
        - name: 'Run Azure webapp deploy action using publish profile credentials'
          uses: azure/webapps-deploy@v2
          with:
            app-name: <YOURAPPNAME>
            publish-profile: ${{ secrets.AZURE_WEBAPP_PUBLISH_PROFILE }}
    
  6. 在 workflow.yaml 中,使用您的應用程式名稱更新 <YOURAPPNAME>

  7. 選取 [開始認可]。

  8. 新增認可標題和選擇性詳細資料,然後選取 [認可新檔案]。

不同執行階段的設定動作

若要在特定的語言架構環境中建置應用程式程式碼,請使用設定動作:

執行階段 設定動作
DotNet Setup DotNet
NodeJS 設定節點
Java 設定 Java
Python 設定 Python
Docker docker-login

登入動作完成後,工作流程的下一組動作就會執行建置、標記和推送容器等工作。 如需詳細資訊,請參閱 Azure Webapp 動作文件。

觸發部署

當動作執行時,請驗證確已成功執行。

  1. 開啟 GitHub 存放庫。 您可以利用推送至存放庫來觸發工作流程。
  2. 選取 [動作]。
  3. 在 [所有工作流程] 下選取要認可的名稱。 這兩個工作流程都已記錄其狀態。 檢閱 GitHub 動作的狀態
  4. 選取部署的工作名稱 .github/workflows/workflow.yml
  5. 展開各區段以檢查工作流程動作的傳回值。 尋找已部署之 Web 應用程式的 URL。 尋找您的 Azure Stack Hub Web 應用程式 URL
  6. 開啟網頁瀏覽器並載入 URL。

後續步驟