You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.08 03:32:42