sql-server - 有没有办法将 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:我不想要一些需要付费的软件
解决方案
不需要任何其他软件,都可以在 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 数据库的工作类似,但您需要连接到不同的数据库、运行不同的查询等。
推荐阅读
- log4net - Log4View - 日志级别未显示正确的日志级别消息
- facebook - Facebook Marketing API - 在开发模式下创建广告
- java - CentOS 7 上的 Tomcat 8 不作为服务启动(但它手动启动 ....)
- angularjs - Angularjs ng-Repat 如何从名称中删除 Extension
- git - git pull origin master on github 的私人项目
- python - 在 python 中使用 sklearn 库实现随机回归时出现值错误
- android - 如何在 Android 客户端和服务器端应用程序之间安全地发送密码?
- python - 使用 itertools.tee 复制一个嵌套的迭代器(即 itertools.groupby)
- c# - Page_Load 事件在延迟后执行
- amazon-web-services - 将文件从 s3 移动到 s3 冰川的方法