如何在YAML中循环调用SQLFluff lint检查变更的SQL文件
在CI/CD流水线中集成SQLFluff检查T-SQL代码规范
以下是我自用且验证有效的脚本,只要你的Docker镜像已安装SQLFluff,且流水线具备Git仓库访问权限(需配置对应凭证),即可直接复制到CI/CD流程中使用。
脚本内容:
- echo "SQL Fluff 任务脚本执行中" - sqlfluff --version # 初始化状态标记,若无检查失败则保持为0 - SQLFluffStepStatusFail=0 # 遍历所有变更的SQL文件(对比本次提交与上一次提交的差异),使用T-SQL方言执行检查,开启nofail以输出所有结果 - | for file in $( git diff --name-only $CI_COMMIT_BEFORE_SHA $CI_COMMIT_SHA -- *.sql ); do sqlfluff lint $file --dialect tsql --annotation-level warning --disable-noqa --nofail && SQLFluffStepStatus=$(echo $?) || export SQLFluffStepStatus=1 if [ "$SQLFluffStepStatus" != 0 ]; then # 标记存在检查失败,但继续遍历所有文件,让开发者一次看到全部问题 SQLFluffStepStatusFail=1 fi done # 检查是否存在失败,若有则发送Teams通知并终止流水线 - | if [ "$SQLFluffStepStatusFail" != 0 ]; then echo "SQLFluff检查失败,状态码:$SQLFluffStepStatusFail" chmod +x teams-chat-post.sh ./teams-chat-post.sh "$teamsurl" "$title" "$failcolor" "$failbody" exit 1 fi
脚本说明
- 开头输出任务提示并打印SQLFluff版本,方便排查环境适配问题
- 用
SQLFluffStepStatusFail标记整体检查状态,初始值为0(代表无失败) - 通过
git diff筛选出本次提交中变更的SQL文件,逐个执行代码规范检查 - 开启
--nofail参数确保单个文件检查失败时,仍继续遍历所有文件,让开发者一次查看全部问题,无需反复运行流水线 - 最后根据状态标记判断是否发送Teams通知,并终止流水线流程
内容的提问来源于stack exchange,提问作者Richard-Notgiven
相关产品推荐
相关产品推荐

