教程:使用 GitHub Actions 部署到应用服务自定义容器并连接到数据库
本教程逐步介绍如何设置一个 GitHub Actions 工作流,以使用 Azure SQL 数据库后端部署容器化的 ASP.NET Core 应用程序。 完成后,你便拥有了一个在 Azure 中运行并连接到 SQL 数据库的 ASP.NET 应用。 首先,你将使用 ARM 模板 GitHub Actions 工作流创建 Azure资源。
在本教程中,你将了解如何执行以下操作:
- 使用 GitHub Actions 工作流通过 Azure 资源管理器模板(ARM 模板)将资源添加到 Azure
- 使用 GitHub Actions 工作流生成包含最新 Web 应用更改的容器
如果没有 Azure 订阅,可在开始前创建一个试用帐户。
若要完成本教程,你需要:
- 具有活动订阅的 Azure 帐户。 创建试用版订阅。
- 一个 GitHub 帐户。 如果没有该帐户,请注册免费版。
- GitHub 存储库,用于存储资源管理器模板和工作流文件。 若要创建一个存储库,请参阅创建新存储库。
在 Azure 示例存储库中创建示例项目的分支。
https://github.com/Azure-Samples/dotnetcore-containerized-sqldb-ghactions/
使用 Azure CLI。
az group create --name {resource-group-name} --location {resource-group-location}
需使用服务主体进行身份验证才能正常运行资源部署脚本。 可以使用 Azure CLI 中的 az ad sp create-for-rbac 命令创建服务主体。
az ad sp create-for-rbac --name "{service-principal-name}" --sdk-auth --role contributor --scopes /subscriptions/{subscription-id}/resourceGroups/{resource-group-name}
在该示例中,请将占位符替换为你的订阅 ID、资源组名称和服务主体名称。 输出是一个 JSON 对象,包含的角色分配凭据可提供对应用服务应用的访问权限。 复制此 JSON 对象供以后使用。 如需帮助,请参阅配置部署凭据。
{
"clientId": "<GUID>",
"clientSecret": "<GUID>",
"subscriptionId": "<GUID>",
"tenantId": "<GUID>",
(...)
}
重要
始终应授予最小访问权限。 上一个示例中的范围仅限于特定的应用服务应用而不是整个资源组。
在 GitHub 中,转到存储库。
选择“安全性”>“机密和变量”>“操作”。
选择“新建存储库机密”。
将 Azure CLI 命令的整个 JSON 输出粘贴到机密的值字段中。 为机密指定名称
AZURE_CREDENTIALS
。选择“添加机密”。
在存储库中为 SQL_SERVER_ADMIN_PASSWORD
创建新机密。 此机密可以是符合 Azure 密码安全标准的任何密码。 以后你不再可以访问此密码,因此请将其另行保存。
“创建 Azure 资源”工作流运行一个 ARM 模板以将资源部署到 Azure。 该工作流:
- 通过签出操作签出源代码。
- 通过 Azure 登录操作登录到 Azure,并收集环境和 Azure 资源的信息。
- 通过 Azure 资源管理器部署操作部署资源。
若要运行“创建 Azure 资源”工作流,请执行以下操作:
打开存储库内
.github/workflows
中的azuredeploy.yaml
文件。将
AZURE_RESOURCE_GROUP
的值更新为你的资源组名称。将
WEB_APP_NAME
和SQL_SERVER_NAME
的值更新为 Web 应用名称和 SQL Server 名称。转到“操作”并选择“运行工作流” 。
通过检查“操作”页上是否显示了绿色打勾标记来确认操作是否成功运行。
在 Azure 门户中,打开资源组中新建的 Azure 容器注册表。
转到“访问密钥”,然后复制用户名和密码值。
在存储库中为
ACR_USERNAME
和ACR_PASSWORD
密码创建新的 GitHub 机密。在 Azure 门户中,打开你的 SQL 数据库。 打开“连接字符串”并复制值。
为
SQL_CONNECTION_STRING
创建新机密。 将{your_password}
替换为你的SQL_SERVER_ADMIN_PASSWORD
。
生成、推送和部署工作流生成一个包含最新应用更改的容器,将该容器推送到 Azure 容器注册表,并将 Web 应用程序过渡槽更新为指向所推送的最新容器。 该工作流包含生成和部署作业:
- 生成作业通过签出操作签出源代码。 然后,该作业使用 Docker 登录操作和自定义脚本向 Azure 容器注册表进行身份验证,生成容器映像,并将其部署到 Azure 容器注册表。
- 部署作业通过 Azure 登录操作登录到 Azure,并收集环境和 Azure 资源的信息。 然后,该作业通过 Azure 应用服务设置操作更新 Web 应用设置,并通过 Azure Web 部署操作部署到应用服务过渡槽。 最后,该作业运行自定义脚本来更新 SQL 数据库,并从过渡槽交换到生产槽。
若要运行生成、推送和部署工作流,请执行以下操作:
打开存储库内
.github/workflows
中的build-deploy.yaml
文件。确认
AZURE_RESOURCE_GROUP
和WEB_APP_NAME
的环境变量是否与azuredeploy.yaml
中的环境变量相匹配。将
ACR_LOGIN_SERVER
值更新为你的 Azure 容器注册表登录服务器。