查看原文
其他

数据库即代码| 使用Bytebase的数据库GitOps实践

先说下笔者的体验后的感受,非常惊喜!通过Bytebase GitOps的实践方式完成SQL变更,当SQL文件被修改或者新建会同步Bytebase工单完成SQL变更。还会将当前数据库的Schema LATEST SQL存放到GITHUB仓库中。

记得19年的时候我们在做DevOps项目评估和实施的时候SQL变更是个难题。当时并没有太合适的SQL平台可以使用,后来我们要求开发人员写的SQL要具有幂等性并将变更的SQL填写到代码库固定的目录位置,然后CI/CD流水线会进行变更。CI/CD流水线检测到SQL文件变化会以Input的方式弹出让用户选择是否进行SQL变更。


笔者将自己使用Bytebase产品体验的过程做了简单整理,分享:

1. 环境准备

  • 本地MySQL数据库集群;
  • 一个GitHub账户;
  • 一个公开的仓库;
  • Docker本地安装Bytebase;
  • Ngrok 账户使用反向代理接收GitHub的WebHook;


由于本地部署的Bytebase产品无法通过GITHUB链接, 这里使用Ngrok隧道工具实现转发。如果是生产环境建议使用Caddy实现。当让如果在公网环境部署Bytebase产品可以跳过代理工具的配置。笔者是在本地部署的顺便将代理的配置过程也做了整理。

2. 获取Ngrok URL

注意Ngrok需要开启代理才能访问。注册Ngrok 账号 https://dashboard.ngrok.com/ 下载ngrok, 根据实际环境下载对应版本的Ngrok。如图所示。
参考Setup&installation教程,完成解压并将程序放到系统PATH中。配置认证token如下所示。

ngrok config add-authtoken 1o6O3ur1sBElTPLLEeG9uTAE7aw_JD3tGF4KCMBHbneog3Tz

后面计划将Bytebase产品以Docker的方式部署,并通过http://localhost:5678进行访问。所以通过命令ngrok http 5678开启代理隧道。获取公网URL https://262d-2409-8a00-242d-ab60-f4b8-70a1-71e3-1c2b.ap.ngrok.io 如图所示。(目前不用尝试访问这个URL,因为后面产品还没部署)


3. 部署Bytebase

以下是docker-compose.yaml代码,注意bytebase容器的command值。添加"--external-url", "https://262d-2409-8a00-242d-ab60-f4b8-70a1-71e3-1c2b.ap.ngrok.io"

version: "3.7"

services:
  bytebase:
    image: bytebase/bytebase:1.12.1
    init: true
    container_name: bytebase
    restart: always
    ports:
      - 5678:5678
    # # Uncomment the following lines to persist data
    # volumes:
    #   - ~/.bytebase/data:/var/opt/bytebase
    command: ["--data""/var/opt/bytebase""--port""5678""--external-url""https://262d-2409-8a00-242d-ab60-f4b8-70a1-71e3-1c2b.ap.ngrok.io"]

  employee-prod:
    image: bytebase/sample-database:mysql-employee-small
    ports:
      - 3306:3306

  employee-test:
    image: bytebase/sample-database:mysql-employee-small
    ports:
      - 3307:3306

通过docker-compose up -d 启动容器, 等待产品启动完成访问https://262d-2409-8a00-242d-ab60-f4b8-70a1-71e3-1c2b.ap.ngrok.io进入Bytebase产品首页,如图所示。(第一次部署需要注册管理员账号)


4. 平台配置GitOps

导航到“设置”,选择GitOps进入配置页面,如图所示。

上图中的应用ID和Secret信息,需要在GitHub中创建OAuth APP后获取。

  • Homepage URL: 复制上图中的Homepage URL;
  • Authorization callback URL:  复制上图中的Authorization URL;

进入GitHub OAuth Apps创建,如图所示。

创建应用后将应用ID和Secret填写到设置中,单击“ 下一步”。

跳转到GitHub Authorize 页面, 单击Authorize terraform-group。

Authorize完成后自动跳转到步骤3,确认信息并添加。

添加成功,到此完成GitOps与GitHub集成的配置。如图所示。


5. 项目开启GitOps

当配置好平台的GitOps集成后,还需要进入项目中为项目开启GitOps。导航到项目页面,然后进入GitOps设置。开启GitOps工作流如图所示。

选择Git提供方, 单击GitHub.com。

同步仓库信息,用户选择要关联GitOps变更的仓库。

关联好项目成功后,需要配置变更SQL文件的目录结构和命令规范。

  • 分支:默认main分支;
  • 根目录:检测SQL文件变更的目录,默认bytebase;
  • 文件路径模板:/bytebase/{{ENV_NAME}}/{{DB_NAME}}##{{VERSION}}##{{TYPE}}##{{DESC}}.sql
    • ENV_NAME 环境名称;
    • DB_NAME:数据库名称;
    • VERSION:版本号;
    • TYPE: SQL类型 DDL;
    • DESC: 描述
  • Schema路径模板:每次变更后会把最新的Schema存放到的具体路径;
image.png

到此,完成GitOps设置。

6. 提交SQL变更代码

创建SQL文件bytebase/Test/employee##202302071000##ddl##create_table.sql

上面截图中目录环境命名错误,应该是大写的T,以实际环境名称为准。

SQL代码:

CREATE TABLE subject
(
   id BIGINT NOT NULL,
   course VARCHAR(255)
);

提交代码后,返回Bytebase项目首页,可以看到捕获到了Push事件。如图所示。

进入issue 工单页面,可以看到变更的执行情况和变更的SQL语句等信息。如图所示。

进入“查看变更“,可以看到变更内容。如图所示。

此时,返回到GitHub仓库目录可以看到最新版本的数据库Schema已经生成。如图所示。


7. 再次变更

提交SQL代码,对上次变更的表subject添加字段。

查看提交变更产生的工单。如图所示。

进入issue 工单页面,可以看到变更的执行情况和变更的SQL语句等信息。如图所示。

查进入“查看变更“,可以看到变更内容。如图所示。

查看LATEST版本的SQL文件,已经发生了变化。



往期推荐


初体验| 使用Bytebase进行数据库CI/CD变更


2023 企业实施DevOps的价值有哪些?


DevOps与GitOps方法论的区别和常用工具


CI/CD Isn't Just About Efficiency -CI/CD 不仅关乎效率-简而言之,CI/CD应使我们快乐



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

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