教程:使用 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 机密以进行身份验证

  1. GitHub 中,转到存储库。

  2. 选择“安全性”>“机密和变量”>“操作”。

  3. 选择“新建存储库机密”。

  4. 将 Azure CLI 命令的整个 JSON 输出粘贴到机密的值字段中。 为机密指定名称 AZURE_CREDENTIALS

  5. 选择“添加机密”。

添加 SQL Server 机密

在存储库中为 SQL_SERVER_ADMIN_PASSWORD 创建新机密。 此机密可以是符合 Azure 密码安全标准的任何密码。 以后你不再可以访问此密码,因此请将其另行保存。

创建 Azure 资源

“创建 Azure 资源”工作流运行一个 ARM 模板以将资源部署到 Azure。 该工作流:

若要运行“创建 Azure 资源”工作流,请执行以下操作:

  1. 打开存储库内 .github/workflows 中的 azuredeploy.yaml 文件。

  2. AZURE_RESOURCE_GROUP 的值更新为你的资源组名称。

  3. WEB_APP_NAMESQL_SERVER_NAME 的值更新为 Web 应用名称和 SQL Server 名称。

  4. 转到“操作”并选择“运行工作流” 。

    运行 GitHub Actions 工作流以添加资源。

  5. 通过检查“操作”页上是否显示了绿色打勾标记来确认操作是否成功运行。

    成功运行创建资源的操作。

添加容器注册表和 SQL 机密

  1. 在 Azure 门户中,打开资源组中新建的 Azure 容器注册表。

  2. 转到“访问密钥”,然后复制用户名和密码值。

  3. 在存储库中为 ACR_USERNAMEACR_PASSWORD 密码创建新的 GitHub 机密。

  4. 在 Azure 门户中,打开你的 SQL 数据库。 打开“连接字符串”并复制值。

  5. SQL_CONNECTION_STRING 创建新机密。 将 {your_password} 替换为你的 SQL_SERVER_ADMIN_PASSWORD

生成、推送和部署映像

生成、推送和部署工作流生成一个包含最新应用更改的容器,将该容器推送到 Azure 容器注册表,并将 Web 应用程序过渡槽更新为指向所推送的最新容器。 该工作流包含生成和部署作业:

  • 生成作业通过签出操作签出源代码。 然后,该作业使用 Docker 登录操作和自定义脚本向 Azure 容器注册表进行身份验证,生成容器映像,并将其部署到 Azure 容器注册表。
  • 部署作业通过 Azure 登录操作登录到 Azure,并收集环境和 Azure 资源的信息。 然后,该作业通过 Azure 应用服务设置操作更新 Web 应用设置,并通过 Azure Web 部署操作部署到应用服务过渡槽。 最后,该作业运行自定义脚本来更新 SQL 数据库,并从过渡槽交换到生产槽。

若要运行生成、推送和部署工作流,请执行以下操作:

  1. 打开存储库内 .github/workflows 中的 build-deploy.yaml 文件。

  2. 确认 AZURE_RESOURCE_GROUPWEB_APP_NAME 的环境变量是否与 azuredeploy.yaml 中的环境变量相匹配。

  3. ACR_LOGIN_SERVER 值更新为你的 Azure 容器注册表登录服务器。