教學課程:使用 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 是更複雜的程序,可提供強化的安全性。
若您沒有現有的應用程式,請註冊可存取資源的新 Microsoft Entra ID 應用程式與服務主體。
az ad app create --display-name myApp
此命令會使用作為您
client-id
的appId
來輸出 JSON。id
是APPLICATION-OBJECT-ID
,而且會用來搭配圖形 API 呼叫建立同盟認證。 儲存值以稍後作為AZURE_CLIENT_ID
GitHub 秘密。建立服務主體。 將
$appID
取代為您 JSON 輸出中的 appId。這個命令會使用服務主體
id
產生 JSON 輸出。 服務主體id
是作為下一個步驟中az role assignment create
命令中--assignee-object-id
引數的值。從 JSON 輸出複製
appOwnerOrganizationId
以供稍後作為AZURE_TENANT_ID
的 GitHub 祕密使用。az ad sp create --id $appId
為服務主體建立新的角色指派。 依預設,角色指派將會繫結至您的預設訂用帳戶。 以訂用帳戶識別碼取代
$subscriptionId
,以資源群組名稱取代$resourceGroupName
,並以新建立的服務主體物件識別碼取代$servicePrincipalId
。az role assignment create --role contributor --subscription $subscriptionId --assignee-object-id $servicePrincipalId --assignee-principal-type ServicePrincipal --scope /subscriptions/$subscriptionId/resourceGroups/$resourceGroupName
執行下列命令,為您的 Microsoft Entra ID 應用程式建立新的同盟身分識別認證。
- 針對您的 Microsoft Entra ID 應用程式,以 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-branch
或repo:n-username/ node_express:ref:refs/tags/my-tag
。 - 針對由提取要求事件所觸發的工作流程:
repo:< Organization/Repository >:pull_request
。
- 您 GitHub Actions 環境中的工作:
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" ] }
- 針對您的 Microsoft Entra ID 應用程式,以 objectId (建立應用程式時產生) 取代
若要了解如何在 Azure 入口網站中建立 Active Directory 應用程式、服務主體與同盟認證,請參閱連線 GitHub 與 Azure。
設定用於驗證的 GitHub 祕密
您必須將應用程式的用戶端識別碼、租用戶識別碼和訂用帳戶識別碼提供給登入動作。 這些值可以直接在工作流程中提供,也可以儲存在 GitHub 的秘密中,並在您的工作流程中參考。 將值儲存為 GitHub 秘密是較安全的選擇。
在 GitHub (英文) 中,前往您的存放庫。
移至導覽功能表中的 [設定]。
選取 [安全性] > [祕密和變數] > [動作]。
選取 [新增存放庫祕密]。
建立
AZURE_CLIENT_ID
、AZURE_TENANT_ID
和AZURE_SUBSCRIPTION_ID
的秘密。 使用 Microsoft Entra 應用程式中的這些值來取得 GitHub 祕密:GitHub 祕密 Microsoft Entra 應用程式 AZURE_CLIENT_ID 應用程式 (用戶端) 識別碼 AZURE_TENANT_ID 目錄 (租用戶) 識別碼 AZURE_SUBSCRIPTION_ID 訂用帳戶識別碼 選取 [新增秘密] 以儲存每個秘密。
為組建新增 GitHub 秘密
在 GitHub 存放庫中為
SQLADMIN_PASS
的SQLADMIN_LOGIN
建立兩個新的秘密。 請務必選擇複雜的密碼,否則 SQL 資料庫伺服器的建立步驟會失敗。 您無法再次存取此密碼,請另外儲存。為 Azure 訂用帳戶識別碼建立
AZURE_SUBSCRIPTION_ID
秘密。 如果不知道訂用帳戶識別碼,請在 Azure Shell 中使用此命令來查明。 複製SubscriptionId
欄中的值。az account list -o table
建立 Azure 資源
建立 Azure 資源工作流程會執行 ARM 範本,以將資源部署至 Azure。 工作流程:
- 使用簽出動作來簽出原始程式碼。
- 使用 Azure 登入動作來登入 Azure,並收集環境和 Azure 資源資訊。
- 使用 Azure Resource Manager 部署動作來部署資源。
若要執行建立 Azure 資源工作流程:
在存放庫的
.github/workflows
中開啟infraworkflow.yml
檔案。將
AZURE_RESOURCE_GROUP
的值更新為您的資源群組名稱。在 ARM 部署動作中將
region
的輸入設定為您的區域。- 開啟
templates/azuredeploy.resourcegroup.parameters.json
,將rgLocation
屬性更新為您的區域。
- 開啟
移至 [動作],然後選取 [執行工作流程]。
檢查 [動作] 頁面上的綠色核取記號,確認動作已成功執行。
建立資源之後,移至 [動作],選取 [建立 Azure 資源],停用工作流程。
建立發行設定檔祕密
在Azure 入口網站中,開啟以
Create Azure Resources
工作流程建立的新預備App Service (位置)。選取 [取得發行設定檔]。
在文字編輯器中開啟發行設定檔,並複製其內容。
為
AZURE_WEBAPP_PUBLISH_PROFILE
建立新的 GitHub 秘密。
組建並部署應用程式
若要執行組建和部署工作流程:
在存放庫的
.github/workflows
中開啟workflow.yaml
檔案。確認
AZURE_RESOURCE_GROUP
、AZURE_WEBAPP_NAME
、SQLSERVER_NAME
和DATABASE_NAME
的環境變數符合infraworkflow.yml
中的環境變數。循著 Swap 中的 URL 瀏覽至生產位置輸出,以確認應用程式已部署。 您應該會看到應用程式範例 My TodoList App。
清除資源
如果不再需要範例專案,請在 Azure 入口網站中刪除資源群組,並在 GitHub 上刪除存放庫。