你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn。
教程:使用 GitHub Actions 部署到应用服务并连接到数据库
了解如何设置 GitHub Actions 工作流来使用 Azure SQL 数据库后端部署 ASP.NET Core 应用程序。 完成后,你便拥有了一个在 Azure 中运行并连接到 SQL 数据库的 ASP.NET 应用。 首先使用 ARM 模板创建资源。
本教程不使用容器。 如果要部署到容器化的 ASP.NET Core 应用程序,请参阅使用 GitHub Actions 部署到用于容器的应用服务并连接到数据库。
在本教程中,你将了解如何执行以下操作:
- 使用 GitHub Actions 工作流通过 Azure 资源管理器模板(ARM 模板)将资源添加到 Azure
- 使用 GitHub Actions 工作流生成 ASP.NET Core 应用程序
如果没有 Azure 订阅,请在开始之前创建一个 Azure 免费帐户。
先决条件
若要完成本教程,你需要:
- 具有活动订阅的 Azure 帐户。 免费创建帐户。
- 一个 GitHub 帐户。 如果没有该帐户,请注册免费版。
- GitHub 存储库,用于存储资源管理器模板和工作流文件。 若要创建一个存储库,请参阅创建新存储库。
下载示例
在 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
此命令将输出 JSON,其中
appId
为你的client-id
。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
替换为你的订阅 ID,将$resourceGroupName
替换为你的资源组名称,将$servicePrincipalId
替换为新创建的服务主体 ID。az role assignment create --role contributor --subscription $subscriptionId --assignee-object-id $servicePrincipalId --assignee-principal-type ServicePrincipal --scope /subscriptions/$subscriptionId/resourceGroups/$resourceGroupName
运行以下命令,为 Microsoft Entra ID 应用程序创建新的联合标识凭据。
- 将
APPLICATION-OBJECT-ID
替换为 Microsoft Entra ID 应用程序的 objectId(在创建应用时生成)。 - 为
CREDENTIAL-NAME
设置一个值供以后引用。 - 设置
subject
。 此项的值由 GitHub 根据工作流定义:- GitHub Actions 环境中的作业:
repo:< Organization/Repository >:environment:< Name >
- 对于未绑定到环境的作业,请根据用于触发工作流的 ref 路径包括分支/标记的 ref 路径:
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" ] }
- 将
若要了解如何在 Azure 门户中创建 Active Directory 应用程序、服务主体和联合凭据,请参阅连接 GitHub 和 Azure。
配置 GitHub 机密以进行身份验证
需要向登录操作提供应用程序的“客户端 ID”、“租户 ID”和“订阅 ID”。 这些值可直接在工作流中提供,或可存储在 GitHub 机密中并在工作流中引用。 将这些值保存为 GitHub 机密是更安全的选择。
在 GitHub 中,转到存储库。
转到导航菜单中的“设置”。
选择“安全性”>“机密和变量”>“操作”。
选择“新建存储库机密”。
为
AZURE_CLIENT_ID
、AZURE_TENANT_ID
和AZURE_SUBSCRIPTION_ID
创建机密。 将 Microsoft Entra 应用程序中的这些值用于 GitHub 机密:GitHub 机密 Microsoft Entra 应用程序 AZURE_CLIENT_ID 应用程序(客户端)ID AZURE_TENANT_ID 目录(租户)ID AZURE_SUBSCRIPTION_ID 订阅 ID 通过选择“添加机密”来保存每个机密。
为生成项添加 Github 机密
在 GitHub 存储库中为
SQLADMIN_PASS
和SQLADMIN_LOGIN
创建两个新机密。 确保选择复杂的密码,否则 SQL 数据库服务器的创建步骤将失败。 以后你不再可以访问此密码,因此请将其另行保存。为你的 Azure 订阅 ID 创建
AZURE_SUBSCRIPTION_ID
机密。 如果不知道订阅 ID,请使用 Azure Shell 中的此命令进行查找。 复制SubscriptionId
列中的值。az account list -o table
创建 Azure 资源
“创建 Azure 资源”工作流运行一个 ARM 模板以将资源部署到 Azure。 该工作流:
- 通过签出操作签出源代码。
- 通过 Azure 登录操作登录到 Azure,并收集环境和 Azure 资源的信息。
- 通过 Azure 资源管理器部署操作部署资源。
若要运行“创建 Azure 资源”工作流,请执行以下操作:
打开存储库内
.github/workflows
中的infraworkflow.yml
文件。将
AZURE_RESOURCE_GROUP
的值更新为你的资源组名称。将 ARM 部署操作中
region
的输入设置为你所在的区域。- 打开
templates/azuredeploy.resourcegroup.parameters.json
并将rgLocation
属性更新为你所在的区域。
- 打开
转到“操作”并选择“运行工作流” 。
通过检查“操作”页上是否显示了绿色打勾标记来确认操作是否成功运行。
创建资源后,转到“操作”,选择“创建 Azure 资源”,然后禁用该工作流。
创建发布配置文件机密
在 Azure 门户中,打开使用
Create Azure Resources
工作流创建的新暂存应用服务(槽)。选择“获取发布配置文件”。
在文本编辑器中打开发布配置文件并复制其内容。
为
AZURE_WEBAPP_PUBLISH_PROFILE
创建新的 GitHub 机密。
生成并部署你的应用
若要运行生成和部署工作流:
打开存储库内
.github/workflows
中的workflow.yaml
文件。确认
AZURE_RESOURCE_GROUP
、AZURE_WEBAPP_NAME
、SQLSERVER_NAME
和DATABASE_NAME
的环境变量是否与infraworkflow.yml
中的环境变量相匹配。访问“交换到生产槽”输出中的 URL 来验证应用是否已部署。 应会看到名为“我的 TodoList 应用”的示例应用。
清理资源
如果不再需要示例项目,请删除 Azure 门户中的资源组,并删除 GitHub 中的存储库。