首页 > 解决方案 > 有没有办法将 SQL 表模式比较/交叉集成到 CI/CD gitlab 中?

问题描述

语境:

我有一个项目,我们可以在其中找到 2 个 SQL 数据库。第一个是 db_prod(生产中),第二个是 db_test(测试中)。有时,我会更新我的 db_test 表模式,添加一些列。

问题:

在我的 gitlab CI/CD 管道中,我想在 CD 阶段将我的 db_test 表模式的更改集成到我的 db_prod 表模式(我不是在谈论数据,只是表结构)。

一些重要的点:

我看到已经有一些软件和 IDE(如 Visual Studio)可以帮助您比较表结构并创建更新脚本,但我没有找到将其集成到 CI/CD 管道中的方法。我想出的唯一方法是开发自己的脚本。

问题:

你知道/有一些建议将“SQL 比较和 2 个数据库之间的结构交叉”集成到 CI/CD gitlab 管道中吗?:)

感谢您的回答!

PS:我不想要一些需要付费的软件

标签: sql-servercontinuous-integrationgitlab-ci

解决方案


不需要任何其他软件,都可以在 Gitlab CI Pipeline 中完成。这是连接到 QA 数据库并运行一些查询(例如,创建表)的示例作业:

stages:
  - database_setup
  ...

Setup QA Database:
  stage: database_setup
  image: mysql:8.0
  variables:
    GIT_STRATEGY: none
  script:
    # Run some queries
    - mysql -h ${QA_MYSQL_HOST} -p ${QA_MYSQL_PORT} -u ${QA_MYSQL_USER} -p${QA_MYSQL_PASSWORD} -e "create database qa_database_name;"
    - mysql -h ${QA_MYSQL_HOST} -p ${QA_MYSQL_PORT} -u ${QA_MYSQL_USER} -p${QA_MYSQL_PASSWORD} -e "create table example_table (id int, name, varchar(50));"

这只是一个愚蠢的例子,但是这个作业使用了一个安装了 mysql 服务器和客户端软件的 Docker 镜像,但是在这个例子中,我们只需要客户端,因为我们正在连接到远程数据库服务器(由QA_MYSQL_HOST, QA_MYSQL_PORT, QA_MYSQL_USER,以及QA_MYSQL_PASSWORD在 Gitlab 的项目设置中定义的 CI 变量)。

设置 prod 数据库的工作类似,但您需要连接到不同的数据库、运行不同的查询等。


推荐阅读