如何在Jenkins构建中调用GitHub上指定版本的SQL脚本执行
Jenkins执行GitHub托管指定版本SQL脚本实现方案
方案一:复用现有SCM配置拉取(适配SQL脚本和项目代码同仓库场景)
你已经完成Jenkins和GitHub的SSH对接,这个方案配置成本最低:
- 进入对应Jenkins任务的配置页,找到
Source Code Management板块,选择Git选项,填入SQL脚本所在GitHub仓库的SSH地址,凭证选中你已经配置好的SSH密钥凭证 - 指定脚本版本的配置在
Branches to build栏完成:- 执行打了Tag的正式版本:直接填写标签引用,格式为
refs/tags/[你的标签名],例如refs/tags/sql_patch_v2.3.1 - 执行特定提交的版本:直接填写对应提交的完整Commit Hash值
- 执行特定分支的最新版本:直接填写分支名,例如
feature/order_table_patch
- 执行打了Tag的正式版本:直接填写标签引用,格式为
- 配置完成后,Jenkins在构建触发时会自动拉取你指定版本的仓库内容到当前构建工作目录,不需要额外写拉取逻辑,直接在原有Execute Shell的数据库连接逻辑后,追加执行本地SQL文件的命令即可:
- MySQL执行示例:
mysql -h $DB_HOST -u $DB_USER -p$DB_PWD $DB_NAME < ./sql/script_path/your_script.sql - PostgreSQL执行示例:
psql -h $DB_HOST -U $DB_USER -d $DB_NAME -f ./sql/script_path/your_script.sql
- MySQL执行示例:
方案二:构建步骤内单独拉取(适配SQL脚本独立仓库场景)
如果你的SQL脚本和当前构建的主项目不在同一个GitHub仓库,不需要改动现有SCM配置,直接在Execute Shell步骤中通过git命令拉取指定版本脚本即可,已配置的SSH密钥会自动完成鉴权:
- 拉取指定Tag版本脚本的命令示例:
# 浅克隆指定Tag的仓库,仅拉取最近1次提交减少传输量 git clone --depth 1 --branch v1.0.3 git@github.com:your_name/your_sql_repo.git tmp_sql_folder # 执行目标SQL脚本 mysql -h $DB_HOST -u $DB_USER -p$DB_PWD $DB_NAME < ./tmp_sql_folder/path/to/your_patch.sql # 执行完成后清理临时目录 rm -rf tmp_sql_folder
- 拉取指定Commit版本脚本的命令示例:
git clone --depth 1 git@github.com:your_name/your_sql_repo.git tmp_sql_folder cd tmp_sql_folder git checkout a1b2c3d4e5f6a7b8c9d0e1f2a3b4c5d6e7f8a9b0 cd .. mysql -h $DB_HOST -u $DB_USER -p$DB_PWD $DB_NAME < ./tmp_sql_folder/path/to/your_patch.sql rm -rf tmp_sql_folder
注意:不要把数据库地址、账号、密码这类敏感信息硬编码在Shell脚本里,提前在Jenkins凭证管理中存储这类敏感信息,通过构建环境变量的方式引用,避免凭证泄露。
内容的提问来源于stack exchange,提问作者Stella Hansen
相关产品推荐
相关产品推荐

