实现数据库 GitOps|Database CI/CD with GitHub 教程 ②
Step 1. 用 ngrok 生成的 URL 在 Docker 中运行 Bytebase
ngrok (https://ngrok.com/) 是一个反向代理工具,我们需要它的公网地址,以便从 GitHub 接收 webhooks。这里使用 ngrok 是出于测试目的;对于生产使用,我们建议使用 Caddy (https://caddyserver.com/)。
在 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 提供方
登陆 GitHub,进入 Settings -> Developer Settings -> OAuth Apps。点击 New OAuth App。
Step 3. 开启 GitOps 工作流进行 Schema Change
如果没有可以使用的数据库,请查看文档:如何在 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); 如果不导入,空的数据库也可以。
创建一个新项目。
{ENV_NAME}}/{{DB_NAME}}__{{VERSION}}__{{TYPE}}__{{DESCRIPTION}}.sql
此时,进入 employeeGitHub 数据库,查看 employee 表,可以看见 nickname 列已经被加上了。
切回到编辑器,可以看到有一个自动生成的文件 .employeeGitHub__LATEST.sql , 这是由 Bytebase 写回的最新数据库 schema。
复制脚本文件 employeeGitHub__202208171630__migrate__add_nickname.sql 并将其粘贴至 prod 文件夹下,重复上述过程。这样,Schema 改变就会在生产环境下执行了。
祝贺!你已经成功使用 Bytebase 和 GitHub 实现了数据库 GitOps。新的 SQL 脚本合并到 GitHub 仓库后,Bytebase 会自动记录数据库发生的变化。也就是说,只要 Bytebase 文件夹位于项目仓库内,你的数据库版本将时刻保持与应用代码版本的同步。
本系列的最后一篇文章,我们将把第一 & 第二部分合二为一,打造完整的数据库 DevOps 生态。敬请关注。🌏