你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn。
使用工作流将数据库更新部署到 Azure Database for MySQL - 灵活服务器,以开始使用 GitHub Actions。
Prerequisites
需要:
具有活动订阅的 Azure 帐户。 免费创建帐户。
一个 GitHub 帐户。 如果没有 GitHub 帐户,可以免费注册。
包含示例数据的 GitHub 存储库 (
data.sql)。重要说明
本快速入门假设你已将 GitHub 存储库克隆到计算机,以便可以将关联的 IP 地址添加到防火墙规则(如有必要)。
Azure Database for MySQL 灵活服务器实例。
工作流文件概述
GitHub Actions 工作流是由存储库中 /.github/workflows/ 路径中的 YAML (.yml) 文件定义的。 此定义包含组成工作流的各种步骤和参数。
此文件包含两个部分:
| 部分 | 任务 |
|---|---|
| 身份验证 | 1. 生成部署凭据。 |
| 部署 | 1. 部署数据库。 |
生成部署凭据
若要对 OIDC 使用 Azure 登录操作,需要在 Microsoft Entra 应用或用户分配的托管身份上配置联合身份凭证。
选项 1:Microsoft Entra 应用程序
- 在 Azure 门户、Azure CLI或 Azure PowerShell中创建具有服务主体的 Microsoft Entra 应用程序。
- 复制 客户端 ID、订阅 ID和 Directory(租户)ID 的值,以便在 GitHub Actions 工作流中稍后使用。
- 在 Azure 门户、Azure CLI或 Azure PowerShell中,为服务主体分配适当的角色。
- 在 Microsoft Entra 应用程序上配置联合标识凭据 来信任由 GitHub Actions 颁发的令牌,用于您的 GitHub 存储库。
选项 2:用户分配的托管标识
- 创建用户分配的托管标识。
- 复制 客户端 ID、订阅 ID和 Directory(租户)ID 的值,以便在 GitHub Actions 工作流中稍后使用。
- 为用户分配的托管标识分配适当的角色。
- 在用户分配的托管标识上配置联合标识凭据,以信任由 GitHub Actions 向你的 GitHub 仓库颁发的令牌。
复制 MySQL 连接字符串
在 Azure 门户中,转到 Azure Database for MySQL 灵活服务器实例,然后打开“设置”“连接字符串”。> 复制 ADO.NET 连接字符串。 将占位符值替换为 your_database 和 your_password。
重要说明
- 对于 Azure Database for MySQL 单一服务器,请使用 Uid=adminusername@servername。 请注意,@servername 是必需的。
- 对于 Azure Database for MySQL 灵活服务器,请使用不带 的 @servername。
你将使用连接字符串作为 GitHub 机密。
配置 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_SUBSCRIPTION_ID 订阅 ID AZURE_TENANT_ID 目录(租户)ID 注释
出于安全原因,我们建议使用 GitHub 机密,而不是将值直接传递到工作流。
添加工作流
转到 GitHub 存储库的“操作”。
选择“自己设置工作流”。
删除工作流文件
on:部分后面的所有内容。 例如,剩余工作流的外观可能如以下所示。name: CI on: push: branches: [ main ] pull_request: branches: [ main ]将工作流重命名为
MySQL for GitHub Actions,并添加签出和登录操作。 这些操作会签出你的站点代码,并使用之前创建的AZURE_CREDENTIALSGitHub 机密向 Azure 进行身份验证。name: MySQL for GitHub Actions on: push: branches: [ main ] pull_request: branches: [ main ] jobs: build: runs-on: windows-latest steps: - uses: actions/checkout@v1 - uses: azure/login@v2 with: client-id: ${{ secrets.AZURE_CLIENT_ID }} tenant-id: ${{ secrets.AZURE_TENANT_ID }} subscription-id: ${{ secrets.AZURE_SUBSCRIPTION_ID }}使用 Azure MySQL 部署操作连接到 MySQL 实例。 将
MYSQL_SERVER_NAME替换为服务器的名称。 在存储库的根级别应该有一个名为data.sql的 MySQL 数据文件。- uses: azure/mysql@v1 with: server-name: MYSQL_SERVER_NAME connection-string: ${{ secrets.AZURE_MYSQL_CONNECTION_STRING }} sql-file: './data.sql'通过添加注销 Azure 的操作来完成工作流。 下面是已完成的工作流。 文件会显示在存储库的
.github/workflows文件夹中。name: MySQL for GitHub Actions on: push: branches: [ main ] pull_request: branches: [ main ] jobs: build: runs-on: windows-latest steps: - uses: actions/checkout@v1 - uses: azure/login@v2 with: client-id: ${{ secrets.AZURE_CLIENT_ID }} tenant-id: ${{ secrets.AZURE_TENANT_ID }} subscription-id: ${{ secrets.AZURE_SUBSCRIPTION_ID }} - uses: azure/mysql@v1 with: server-name: MYSQL_SERVER_NAME connection-string: ${{ secrets.AZURE_MYSQL_CONNECTION_STRING }} sql-file: './data.sql' # Azure logout - name: logout run: | az logout
查看部署
转到 GitHub 存储库的“操作”。
打开第一个结果,查看工作流运行的详细日志。
清理资源
不再需要 Azure Database for MySQL 灵活服务器数据库和存储库时,请删除资源组和 GitHub 存储库来清理部署的资源。