DBT(Data Build Tools)项目在Azure DevOps中搭建CI/CD流水线咨询
DBT 项目 Azure DevOps CI/CD 流水线搭建入门指引
前置准备
- 你的DBT代码已经提交到Azure DevOps Repos对应仓库,本地执行
dbt debug、dbt run无报错 - 已经在Azure DevOps项目中开通了流水线权限,目标数据仓库的访问凭证(比如账号密码、密钥、服务账号信息)已经提前存到Azure DevOps的项目变量组或者流水线机密变量中,禁止硬编码到代码里
- 提前确认你的DBT项目使用的Python版本、dbt核心版本、对应数据仓库的adapter版本(比如dbt-snowflake、dbt-synapse等)
核心流水线配置步骤
1. 新建流水线
- 进入Azure DevOps项目,左侧菜单选择「管道」-「管道」,点击「新建管道」
- 代码来源选择「Azure Repos Git」,选中你存放DBT代码的对应仓库
- 配置选项选择「Starter pipeline」,会生成默认的azure-pipelines.yml文件
2. 编写流水线yml配置
以下配置可适配大部分场景,根据自身项目参数修改即可:
trigger: branches: include: - main # 触发正式发布的分支,dev环境可以换成dev分支 - feature/* # 可选:功能分支提PR时自动触发校验 pool: vmImage: 'ubuntu-latest' # 用Linux运行环境即可,不需要Windows variables: - group: dbt-secret-variable-group # 替换成你自己建的变量组名,里面存数据仓库密钥等参数 - name: DBT_PROFILES_DIR value: $(Build.SourcesDirectory) # 配置dbt找profiles.yml的路径 steps: # 步骤1:安装Python环境 - task: UsePythonVersion@0 inputs: versionSpec: '3.9' # 替换成你项目适配的Python版本 addToPath: true # 步骤2:安装dbt依赖 - script: | python -m pip install --upgrade pip pip install dbt-core==1.5.0 dbt-synapse==1.5.0 # 替换成你项目用的dbt版本和对应adapter displayName: '安装DBT依赖包' # 步骤3:DBT代码校验(CI阶段必跑) - script: | dbt debug # 校验数据库连接、dbt配置是否正常 dbt compile # 校验SQL语法是否正确 dbt test --select "test_type:unit" # 可选:跑单元测试 displayName: 'DBT代码合法性校验' env: # 把机密变量注入到环境变量,dbt的profiles.yml可以直接读取环境变量 DBT_DB_HOST: $(dbt_db_host) DBT_DB_USER: $(dbt_db_user) DBT_DB_PWD: $(dbt_db_pwd) DBT_DB_DATABASE: $(dbt_db_database) DBT_DB_SCHEMA: $(dbt_db_schema_dev) # CI阶段用开发库的schema # 步骤4:生产发布(CD阶段,建议加人工审核再触发) - script: | dbt run --target prod dbt test --target prod displayName: '生产环境DBT部署执行' condition: and(succeeded(), eq(variables['Build.SourceBranch'], 'refs/heads/main')) # 只有main分支合并后才触发 env: DBT_DB_HOST: $(dbt_db_host) DBT_DB_USER: $(dbt_db_user) DBT_DB_PWD: $(dbt_db_pwd) DBT_DB_DATABASE: $(dbt_db_database) DBT_DB_SCHEMA: $(dbt_db_schema_prod)
注意:你的项目根目录下需要存放对应的profiles.yml文件,所有敏感参数不要写死在文件里,用
{{ env('DBT_DB_PWD') }}的方式读取环境变量即可。
3. 配置触发规则和权限
- 可以开启PR触发规则:当有PR指向main/dev分支时,自动跑CI校验步骤,不通过不允许合并
- 生产发布步骤建议添加人工审核节点,在yml里添加approval配置,或者在流水线可视化界面设置发布前需要对应负责人审核,避免误操作影响生产数据
- 所有敏感凭证不要提交到代码仓库,全部存在Azure DevOps变量组中,设置为机密变量后不会明文展示
常见问题排查
- 如果dbt debug报错连不上数据库,先检查运行流水线的agent IP有没有加到数据仓库的白名单中
- 如果依赖安装失败,检查dbt版本和adapter版本是否匹配,Python版本是否和本地开发环境一致
- 如果执行dbt run提示找不到模型,检查代码是否全部checkout到流水线运行环境,DBT_PROFILES_DIR路径配置是否正确
内容的提问来源于stack exchange,提问作者user961
相关产品推荐
相关产品推荐

