查看原文
其他

实现数据库 GitOps|Database CI/CD with GitHub 教程 ②

Adela Bytebase 2022-12-19


在 Database CI/CD with GitHub 系列第一篇教程:开启 SQL Review Actions 中,我们介绍了如何为 GitHub 仓库开启 SQL Review Actions,让其在有 PR 提交的情况下自动触发。
第二部分(下图中黄色)将引导你如何使用 Bytebase 和 GitHub 实现数据库 GitOps:如何通过将 SQL 脚本合并到 GitHub 仓库来触发数据库变化,这样,你的 Git 仓库始终是数据库 schema 的单一信息源(the source of truth),而且每当 Git 仓库中的 SQL 文件发生变化时,你的数据库 schema 也会实时发生变化。
⚠️ 本教程使用 Docker 在 5 秒内本地运行 Bytebase。

Step 1. 用 ngrok 生成的 URL 在 Docker 中运行 Bytebase 

ngrok (https://ngrok.com/) 是一个反向代理工具,我们需要它的公网地址,以便从 GitHub 接收 webhooks。这里使用 ngrok 是出于测试目的;对于生产使用,我们建议使用 Caddy (https://caddyserver.com/)。

登录 ngrok Dashboard(https://dashboard.ngrok.com/get-started/setup),并按照 Getting Started 步骤进行安装和配置。
运行 ngrok http 8080 ,并获得公共 URL。

在 Docker 中运行 Bytebase:

docker run --init \--name bytebase-github \--restart always \--add-host host.docker.internal:host-gateway \--publish 8080:8080 \--volume ~/.bytebase/data:/var/opt/bytebase \bytebase/bytebase:1.3.0 \--data /var/opt/bytebase \--host https://03f1-103-102-7-52.ngrok.io \--port 8080 \--frontend-port 80

Bytebase 在 Docker 中运行后,你可以通过 https://03f1-103-102-7-52.ngrok.io 访问 Bytebase。


Step 2. 在 Bytebase 中添加 GitHub 作为 Git 提供方 

进入 Bytebase,进入 Settings -> Version Control,选择 GitHub.com,点击 Next。
复制 Authorization callback URL。

登陆 GitHub,进入 Settings -> Developer Settings -> OAuth Apps。点击 New OAuth App。

粘贴之前复制的 Authorization callback URL,点击 Update Application。
在同一界面可以找到 Client ID 和 Client secrets。
回到 Bytebase,在  Application ID 和 Secret 中填入之前步骤获得的 Client ID 和 Client secrets。

点击 Next,你会被转到确认页面,点击 Confirm and add,这样就成功添加了 Git 提供方。


Step 3. 开启 GitOps 工作流进行 Schema Change

在 Bytebase 中,点击 Instance,并分别为 test 和 prod 环境添加两个实例(在此教程中,我们使用了两个 AWS RDS MySQL 实例,并使用了相同的 employee 数据集)。
  • 如果没有可以使用的数据库,请查看文档:如何在 Docker 中运行 MySQL (https://www.bytebase.com/docs/get-started/configure-workspace/add-a-mysql-instance-for-testing);

  • 我们开源了 MySQL 的 employee 数据集样本,你也可以导入 (https://github.com/bytebase/employee-sample-database-mysql);
  • 如果不导入,空的数据库也可以。

创建一个新项目。

点击 Transfer in DB,并将两个数据库转入。
进入项目下的 Version Control,并选择 GitOps workflow。

在 Repository 中选择你想接入的 GitHub 仓库,请注意 Branch 字段,确保是你希望 Bytebase 检测发生变化的 GitHub 仓库。其他默认设置不建议修改。

点击完成,可以看见版本控制已开启。
在你的 GitHub 仓库中创建一个 bytebase 文件夹,并添加 prod, test 文件夹。

按照命名规范创建一个 SQL 脚本:
{ENV_NAME}}/{{DB_NAME}}__{{VERSION}}__{{TYPE}}__{{DESCRIPTION}}.sql
比如这样:employeeGitHub__202208171630__migrate__add_nickname.sql

提交并推送这个脚本。
在 Bytebase 的项目里,你可以看到有一个新的 Issue 已经被创建了。
点击进入此 Issue,并点击 Approve。
推送的 SQL 脚本将在 test 环境中执行,完成后将显示 Done(你也可以通过自定义跳过手动批准:https://bytebase-com-git-add-blog-github-gitops-article-bytebase.vercel.app/docs/get-started/configure-workspace/set-up-environments)。

此时,进入 employeeGitHub 数据库,查看 employee 表,可以看见 nickname 列已经被加上了。

切回到编辑器,可以看到有一个自动生成的文件 .employeeGitHub__LATEST.sql , 这是由 Bytebase 写回的最新数据库 schema。

复制脚本文件 employeeGitHub__202208171630__migrate__add_nickname.sql 并将其粘贴至 prod 文件夹下,重复上述过程。这样,Schema 改变就会在生产环境下执行了。

🎉 Congrats

祝贺!你已经成功使用 Bytebase 和 GitHub 实现了数据库 GitOps。新的 SQL 脚本合并到 GitHub 仓库后,Bytebase 会自动记录数据库发生的变化。也就是说,只要 Bytebase 文件夹位于项目仓库内,你的数据库版本将时刻保持与应用代码版本的同步。

本系列的最后一篇文章,我们将把第一 & 第二部分合二为一,打造完整的数据库 DevOps 生态。敬请关注。🌏

贝斯的圆桌趴 |科技公司内部 SaaS 工具大公开
基于 GitHub 的数据库 CI/CD 最佳实践
开启 SQL Review Actions | Database CI/CD with GitHub 教程 ①
Rewind the PlanetScale Rewind | 拆解硅谷当红科技公司如何做 Product Marketing


您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存