Share via


教學課程:使用 GitHub Actions 部署至 App Service 並連線至資料庫

了解如何設定 GitHub Actions 工作流程,以部署具有 Azure SQL Database 後端的 ASP.NET Core 應用程式。 完成時,您的 ASP.NET 應用程式就會在 Azure 中執行,並已連線到 SQL Database。 您必須先使用 ARM 範本來建立資源。

本教學課程不使用容器。 若要部署至容器化 ASP.NET Core 應用程式,請參閱使用 GitHub Actions 部署至適用於容器的 App Service 並連線至資料庫

在本教學課程中,您會了解如何:

  • 使用 GitHub Actions 工作流程,透過 Azure Resource Manager 範本 (ARM 範本) 將資源新增至 Azure
  • 使用 GitHub Actions 工作流程建立 ASP.NET Core 應用程式

如果您沒有 Azure 訂閱,請在開始之前,先建立 Azure 免費帳戶

必要條件

若要完成此課程,您會需要:

  • 具有有效訂用帳戶的 Azure 帳戶。 免費建立帳戶
  • GitHub 帳戶。 如果您沒有 Microsoft 帳戶,請免費註冊
    • GitHub 存放庫,以儲存 Resource Manager 範本和工作流程檔案。 若要建立一個,請參閱建立新的存放庫 \(英文\)。

下載範例

在 Azure 範例存放庫中派生範例專案

https://github.com/Azure-Samples/dotnetcore-sqldb-ghactions

建立資源群組

開啟位於 https://shell.azure.com 的 Azure Cloud Shell。 您也可以使用 Azure CLI (如果已安裝在本機)。 (如需 Cloud Shell 的詳細資訊,請參閱 Cloud Shell 概觀。)

az group create --name {resource-group-name} --location {resource-group-location}

產生部署認證

OpenID Connect 是使用短期權杖的驗證方法。 使用 GitHub Actions 設定 OpenID Connect 是更複雜的程序,可提供強化的安全性。

  1. 若您沒有現有的應用程式,請註冊可存取資源的新 Microsoft Entra 應用程式與服務主體

    az ad app create --display-name myApp
    

    此命令會使用作為您 client-idappId 來輸出 JSON。 objectIdAPPLICATION-OBJECT-ID,而且會用來搭配 Graph API 呼叫建立同盟認證。 儲存值以稍後作為 AZURE_CLIENT_ID GitHub 秘密。

  2. 建立服務主體。 將 $appID 取代為您 JSON 輸出中的 appId。 此命令會產生具有不同 objectId 的 JSON 輸出,並將用於下一個步驟中。 新的 objectIdassignee-object-id

    此命令會產生具有不同 objectId 的 JSON 輸出,並將在下一個步驟中使用。 新的 objectIdassignee-object-id

    複製 appOwnerTenantId 以供稍後作為 AZURE_TENANT_ID 的 GitHub 秘密使用。

     az ad sp create --id $appId
    
  3. 依訂用帳戶和物件建立新的角色指派。 依預設,角色指派將會繫結至您的預設訂用帳戶。 以訂用帳戶識別碼取代 $subscriptionId,以資源群組名稱取代 $resourceGroupName,並以產生的 assignee-object-id 取代 $assigneeObjectId (新建立的服務主體物件識別碼)。

    az role assignment create --role contributor --subscription $subscriptionId --assignee-object-id  $assigneeObjectId --assignee-principal-type ServicePrincipal --scope /subscriptions/$subscriptionId/resourceGroups/$resourceGroupName
    
  4. 執行下列命令,為您的 Microsoft Entra 應用程式建立新的同盟身分識別認證

    • 針對您的 Microsoft Entra 應用程式,以 objectId (建立應用程式時產生) 取代 APPLICATION-OBJECT-ID
    • CREDENTIAL-NAME 的值設定為稍後參考。
    • 設定 subject。 依據您的工作流程,GitHub 會定義此項目的值:
      • 您 GitHub Actions 環境中的工作:repo:< Organization/Repository >:environment:< Name >
      • 針對未繫結至環境的作業,請根據用來觸發工作流程的參考路徑,包含分支/標記的參考路徑:repo:< Organization/Repository >:ref:< ref path>。 例如,repo:n-username/ node_express:ref:refs/heads/my-branchrepo:n-username/ node_express:ref:refs/tags/my-tag
      • 針對由提取要求事件所觸發的工作流程:repo:< Organization/Repository >:pull_request
    az ad app federated-credential create --id <APPLICATION-OBJECT-ID> --parameters credential.json
    ("credential.json" contains the following content)
    {
        "name": "<CREDENTIAL-NAME>",
        "issuer": "https://token.actions.githubusercontent.com",
        "subject": "repo:octo-org/octo-repo:environment:Production",
        "description": "Testing",
        "audiences": [
            "api://AzureADTokenExchange"
        ]
    }
    

若要瞭解如何在 Azure 入口網站 中建立 Active Directory 應用程式、服務主體和同盟認證,請參閱 gitHub 和 Azure 連線。

設定用於驗證的 GitHub 祕密

您必須將應用程式的用戶端識別碼租用戶識別碼訂用帳戶識別碼提供給登入動作。 這些值可以直接在工作流程中提供,也可以儲存在 GitHub 的秘密中,並在您的工作流程中參考。 將值儲存為 GitHub 秘密是較安全的選擇。

  1. GitHub (英文) 中,前往您的存放庫。

  2. 移至導覽功能表中的 [設定]

  3. 選取 [安全性] > [祕密和變數] > [動作]。

    新增祕密的螢幕擷取畫面

  4. 選取 [新增存放庫祕密]。

  5. 建立 AZURE_CLIENT_IDAZURE_TENANT_IDAZURE_SUBSCRIPTION_ID 的秘密。 使用 Microsoft Entra 應用程式中的這些值來取得 GitHub 祕密:

    GitHub 祕密 Microsoft Entra 應用程式
    AZURE_CLIENT_ID 應用程式 (用戶端) 識別碼
    AZURE_TENANT_ID 目錄 (租用戶) 識別碼
    AZURE_SUBSCRIPTION_ID 訂用帳戶識別碼
  6. 選取 [新增秘密] 以儲存每個秘密。

為組建新增 GitHub 秘密

  1. 在 GitHub 存放庫中為 SQLADMIN_PASSSQLADMIN_LOGIN 建立兩個新的秘密。 請務必選擇複雜的密碼,否則 SQL 資料庫伺服器的建立步驟會失敗。 您無法再次存取此密碼,請另外儲存。

  2. 為 Azure 訂用帳戶識別碼建立 AZURE_SUBSCRIPTION_ID 秘密。 如果不知道訂用帳戶識別碼,請在 Azure Shell 中使用此命令來查明。 複製 SubscriptionId 欄中的值。

    az account list -o table
    

建立 Azure 資源

建立 Azure 資源工作流程會執行 ARM 範本,以將資源部署至 Azure。 工作流程:

若要執行建立 Azure 資源工作流程:

  1. 在存放庫的 .github/workflows 中開啟 infraworkflow.yml 檔案。

  2. AZURE_RESOURCE_GROUP 的值更新為您的資源群組名稱。

  3. 在 ARM 部署動作中將 region 的輸入設定為您的區域。

    1. 開啟 templates/azuredeploy.resourcegroup.parameters.json,將 rgLocation 屬性更新為您的區域。
  4. 移至 [動作],然後選取 [執行工作流程]

    執行 GitHub Actions 工作流程以新增資源。

  5. 檢查 [動作] 頁面上的綠色核取記號,確認動作已成功執行。

    成功執行建立資源。

  6. 建立資源之後,移至 [動作],選取 [建立 Azure 資源],停用工作流程。

    停用建立 Azure 資源工作流程。

建立發行設定檔祕密

  1. 在Azure 入口網站中,開啟以 Create Azure Resources 工作流程建立的新預備App Service (位置)。

  2. 選取 [取得發行設定檔]

  3. 在文字編輯器中開啟發行設定檔,並複製其內容。

  4. AZURE_WEBAPP_PUBLISH_PROFILE 建立新的 GitHub 秘密。

組建並部署應用程式

若要執行組建和部署工作流程:

  1. 在存放庫的 .github/workflows 中開啟 workflow.yaml 檔案。

  2. 確認 AZURE_RESOURCE_GROUPAZURE_WEBAPP_NAMESQLSERVER_NAMEDATABASE_NAME 的環境變數符合 infraworkflow.yml 中的環境變數。

  3. 循著 Swap 中的 URL 瀏覽至生產位置輸出,以確認應用程式已部署。 您應該會看到應用程式範例 My TodoList App。

清除資源

如果不再需要範例專案,請在 Azure 入口網站中刪除資源群組,並在 GitHub 上刪除存放庫。

下一步