如何在dbt Cloud Slim CI成功完成后触发GitHub Actions工作流
针对dbt Cloud Slim CI完成后自动触发Lint工作流的解决方案
方案1:通过dbt Cloud Webhook触发自定义GitHub事件
dbt Cloud支持在作业成功后发送Webhook,可借此触发GitHub Actions的自定义事件:
- 在dbt Cloud的Slim CI作业设置中,进入Settings > Webhooks,新增Webhook
- 触发条件选择Job Succeeded
- 配置Webhook参数:
- URL:
https://api.github.com/repos/<你的用户名>/<仓库名>/dispatches - 请求方法:POST
- 请求头:添加
Authorization: token <拥有repo权限的GitHub PAT> - 请求体:
{ "event_type": "dbt_slim_ci_success", "client_payload": { "pr_number": "{{ job.pr_number }}" } }
- URL:
- 修改Lint工作流的触发规则:
on: repository_dispatch: types: [dbt_slim_ci_success] - 在工作流中通过
github.event.client_payload.pr_number获取PR编号,拉取对应分支代码及已生成的manifest.json后执行Lint
方案2:在PR触发的工作流中等待dbt Cloud作业完成
直接在现有PR触发的工作流中,先调用dbt Cloud API触发Slim CI,轮询等待成功后再执行Lint:
- 触发dbt Cloud作业的API请求示例:
curl -X POST "https://cloud.getdbt.com/api/v2/accounts/<账户ID>/jobs/<作业ID>/run/" \ -H "Authorization: Token <dbt Cloud API Token>" \ -H "Content-Type: application/json" \ -d '{"cause": "GitHub Actions PR Lint Trigger", "github_pr_number": ${{ github.event.number }}}' - 保存返回的
run_id,轮询dbt Cloud的作业状态API,直到状态变为succeeded - 作业成功后,通过dbt Cloud API下载
manifest.json,或配置dbt作业将文件上传至PR分支 - 执行Lint检查步骤
关于on.check_run/on.status事件的可行性说明
这两个事件确实要求工作流文件位于默认分支才能触发:
- 若你的Lint工作流已合并到
main分支,可配置如下触发规则:on: check_run: types: [completed] - 并在作业中添加条件判断,仅处理dbt Cloud Slim CI的成功事件:
jobs: lint: if: github.event.check_run.name == 'dbt Slim CI' && github.event.check_run.conclusion == 'success' steps: - uses: actions/checkout@v4 with: ref: ${{ github.event.check_run.pull_requests[0].head.ref }} # 后续拉取manifest.json并执行Lint - 若Lint工作流仅存在于PR分支,则无法使用这两个事件
内容的提问来源于stack exchange,提问作者Aleix CC
相关产品推荐
相关产品推荐

