数据库即代码| 使用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;

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

2. 获取Ngrok URL

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

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,因为后面产品还没部署)
e7dc766a39b88b0381accef5c1a05e10.png

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产品首页,如图所示。(第一次部署需要注册管理员账号)

b3871b4058792f0ba6444154d8bc11a5.png9f616f459f9fbb7cad5d985975e8642e.png

4. 平台配置GitOps

导航到“设置”,选择GitOps进入配置页面,如图所示。
4bf53b7be340d3777d384a729d8bac95.png
上图中的应用ID和Secret信息,需要在GitHub中创建OAuth APP后获取。

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

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

进入GitHub OAuth Apps创建,如图所示。
6d666d5b14b4e675cfa8d9643467e013.png

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

跳转到GitHub Authorize 页面, 单击Authorize terraform-group。
1e6094be249247790fa22c4fc601ed6c.png

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

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

5. 项目开启GitOps

当配置好平台的GitOps集成后,还需要进入项目中为项目开启GitOps。导航到项目页面,然后进入GitOps设置。开启GitOps工作流如图所示。
7035a17b0539cf0a9716e2a733d1ef61.png
选择Git提供方, 单击GitHub.com。
a4a7e493a21967bbf66b2c5c1dad3062.png

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

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

  • 分支:默认main分支;

  • 根目录:检测SQL文件变更的目录,默认bytebase;

  • 文件路径模板:/bytebase/{{ENV_NAME}}/{{DB_NAME}}##{{VERSION}}##{{TYPE}}##{{DESC}}.sql

    • ENV_NAME 环境名称;

    • DB_NAME:数据库名称;

    • VERSION:版本号;

    • TYPE: SQL类型 DDL;

    • DESC: 描述

  • Schema路径模板:每次变更后会把最新的Schema存放到的具体路径;

1866e15bd89dd79b8ccb04bc3a3f6fcc.png
image.png

到此,完成GitOps设置。

6. 提交SQL变更代码

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

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

SQL代码:

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

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

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

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

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

7. 再次变更

提交SQL代码,对上次变更的表subject添加字段。
b92a22a5136b091f7a7992d1018ce943.png
查看提交变更产生的工单。如图所示。
77e04a9eb99e93a9b15972dde5368d51.png
进入issue 工单页面,可以看到变更的执行情况和变更的SQL语句等信息。如图所示。
b4f2e2eb93ebd90bd5105e8e26acffc6.png

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

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

往期推荐

aec9eb332e4e65917942acdd107cb05c.jpeg

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

74c550daa934f39ec896610245130fb0.jpeg

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

1b51c61fee3cc4594f26ebe4433de28c.jpeg

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

8e77bac0bb91575667c794fe2a891150.jpeg

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

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
当连接数据库时,你可以使用Java的JDBC(Java Database Connectivity)来实现。以下是一个简单的示例代码,展示了如何连接到数据库并执行一些基本操作: ```java import java.sql.*; public class ConnectToDatabase { public static void main(String[] args) { // 数据库连接信息 String url = "jdbc:mysql://localhost:3306/mydatabase"; // 数据库URL String username = "root"; // 数据库用户名 String password = "password"; // 数据库密码 // 声明数据库连接对象 Connection conn = null; try { // 加载数据库驱动 Class.forName("com.mysql.jdbc.Driver"); // 创建数据库连接 conn = DriverManager.getConnection(url, username, password); // 执行数据库操作 // ... // 关闭数据库连接 conn.close(); } catch (ClassNotFoundException e) { e.printStackTrace(); } catch (SQLException e) { e.printStackTrace(); } } } ``` 请确保已将适当的JDBC驱动程序添加到项目的类路径中。在示例代码中,我们使用了MySQL数据库,因此需要添加MySQL JDBC驱动程序。 注意:实际使用时,你需要替换`url`、`username`和`password`变量的值,以便连接到你自己的数据库。 此示例仅展示了连接数据库的基本步骤,你可以根据自己的需求执行其他数据库操作,如查询、插入、更新等。你可以使用Java的Statement或PreparedStatement对象执行SQL语句,并使用ResultSet对象检索查询结果。具体操作可根据你使用数据库和需求进行调整。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值