使用 GitHub Actions 部署至 App Service

配合 GitHub Actions 開始將工作流程自動化,並從 GitHub 部署至 Azure App Service

必要條件

建立應用程式時設定 GitHub Actions 部署

GitHub Actions 部署會整合到預設應用程式建立精靈中。 您只需要在 [部署] 索引標籤中將 [持續部署] 設為 [啟用],然後設定您想要的組織、存放庫和分支。

A screenshot showing how to enable GitHub Actions deployment in the App Service create wizard.

當您啟用持續部署時,應用程式建立精靈會根據基本驗證選取項目自動挑選驗證方法,並據以設定應用程式和 GitHub 存放庫:

基本驗證選取項目 驗證方法
停用 使用者指派的身分識別 (OpenID Connect)
啟用 基本驗證

注意

如果您在建立應用程式時收到錯誤,指出 Azure 帳戶沒有特定權限,則可能是沒有建立及設定使用者指派身分識別的必要權限。 如需替代方案,請參閱透過部署中心設定 GitHub Actions 部署

透過部署中心設定 GitHub Actions 部署

若是現有的應用程式,您可以使用 App Service 部署中心,迅速地開始使用 GitHub Actions。 這個周全的方法會根據應用程式堆疊,自動產生 GitHub Actions 工作流程檔案,並在 GitHub 存放庫進行認可。

部署中心也可讓您使用使用者指派的身分識別選項,輕鬆設定更安全的 OpenID Connect 驗證。

如果 Azure 帳戶具有所需的權限,您可以選取以建立使用者指派的身分識別。 否則,您可以在 [身分識別] 下拉式清單中選取現有使用者指派的受控識別。 您可以與 Azure 管理員合作,使用網站參與者角色建立使用者指派的受控識別。

如需詳細資訊,請參閱持續部署至 Azure App Service

手動設定 GitHub Actions 工作流程

您也可以不使用部署中心以部署工作流程。

  1. 產生部署認證
  2. 設定 GitHub 祕密
  3. 將工作流程檔案新增至 GitHub 存放庫

1.產生部署認證

使用適用於 GitHub Actions 的 Azure App Services 進行驗證的建議方式是使用使用者定義的受控識別,而最簡單的方式是改為直接在入口網站中設定 GitHub Actions 部署,並選取 [使用者指派的受控識別]

注意

使用使用者指派的受控識別進行驗證目前為預覽狀態。

或者,您可以使用服務主體、OpenID Connect 或發行設定檔進行驗證。

注意

發行設定檔需要啟用基本驗證

發行設定檔是應用程式層級認證。 將發行設定檔設定為 GitHub 祕密。

  1. 前往 Azure 入口網站中的 App Service。

  2. 在 [概觀] 頁面上,選取 [取得發行設定檔]

  3. 儲存下載的檔案。 您將使用檔案的內容來建立 GitHub 祕密。

注意

自 2020 年 10 月起,Linux Web 應用程式需要將應用程式設定 WEBSITE_WEBDEPLOY_USE_SCM 設為 true才能下載發行設定檔。 未來將移除此需求。

2.設定 GitHub 密碼

GitHub 中,瀏覽您的存放庫。 選取設定>安全性>秘密與變數>動作>新存放庫密碼

若要使用應用程式層級認證,請將所下載發行設定檔內容貼到祕密的值欄位中。 將祕密命名為 AZURE_WEBAPP_PUBLISH_PROFILE

稍後設定 GitHub 工作流程檔案時,您會在部署 Azure Web 應用程式動作中使用 AZURE_WEBAPP_PUBLISH_PROFILE。 例如:

- uses: azure/webapps-deploy@v2
  with:
    publish-profile: ${{ secrets.AZURE_WEBAPP_PUBLISH_PROFILE }}

3.將工作流程檔案新增至 GitHub 存放庫

工作流程是由 GitHub 存放庫內 /.github/workflows/ 路徑中的 YAML (. yml) 檔案所定義。 此定義包含組成工作流程的各種步驟與參數。

工作流程檔案至少會有下列不同的步驟:

  1. 使用您建立的 GitHub 祕密透過 App Service 進行驗證。
  2. 建置 Web 應用程式。
  3. 部署 Web 應用程式。

若要將程式碼部署至 App Service 應用程式,您可以使用 azure/webapps-deploy@v3 動作。 此動作需要 app-name 中的 Web 應用程式名稱,而且根據語言堆疊,在 package 中輸入要部署的 *.zip、*.war、*.jar 或資料夾路徑。 如需 azure/webapps-deploy@v3 動作可能輸入的完整清單,請參閱 action.yml 定義。

下列範例顯示工作流程的一部分,這部分會以不同支援的語言建置 Web 應用程式。

publish-profile 輸入應該參考您稍早建立AZURE_WEBAPP_PUBLISH_PROFILE GitHub 祕密。

name: .NET Core CI

on: [push]

env:
  AZURE_WEBAPP_NAME: my-app-name    # set this to your application's name
  AZURE_WEBAPP_PACKAGE_PATH: '.'      # set this to the path to your web app project, defaults to the repository root
  DOTNET_VERSION: '6.0.x'           # set this to the dot net version to use

jobs:
  build:
    runs-on: ubuntu-latest

    steps:
      # Checkout the repo
      - uses: actions/checkout@main
      
      # Setup .NET Core SDK
      - name: Setup .NET Core
        uses: actions/setup-dotnet@v3
        with:
          dotnet-version: ${{ env.DOTNET_VERSION }} 
      
      # Run dotnet build and publish
      - name: dotnet build and publish
        run: |
          dotnet restore
          dotnet build --configuration Release
          dotnet publish -c Release --property:PublishDir='${{ env.AZURE_WEBAPP_PACKAGE_PATH }}/myapp' 
          
      # Deploy to Azure Web apps
      - name: 'Run Azure webapp deploy action using publish profile credentials'
        uses: azure/webapps-deploy@v3
        with: 
          app-name: ${{ env.AZURE_WEBAPP_NAME }} # Replace with your app name
          publish-profile: ${{ secrets.AZURE_WEBAPP_PUBLISH_PROFILE  }} # Define secret variable in repository settings as per action documentation
          package: '${{ env.AZURE_WEBAPP_PACKAGE_PATH }}/myapp'

下一步

查看 Azure GitHub Actions 和工作流程的參考: