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

如何通过Azure Pipeline Post-Deployment Gate校验Databricks Job状态

实现方案(无代理占用,基于Azure DevOps Gates)

核心思路

原有while循环方案会全程占用构建代理,我们可以拆分为两个逻辑环节,用Azure DevOps服务端运行的Gates替代代理端的等待逻辑:

  • 第一阶段仅负责触发Databricks作业,将生成的作业运行ID输出为流水线变量,触发完成后立刻释放代理
  • 在触发阶段和后续Staging阶段之间添加Gates校验逻辑,由Azure DevOps服务端按指定间隔轮询Databricks作业状态,校验通过才允许进入下一阶段,全程不占用代理资源

实现步骤

1. 前置准备

提前在Azure DevOps中完成两个配置:

  • 新建Databricks个人访问令牌(PAT),存入Azure DevOps的变量组/安全变量,命名为databricks.pat
  • 新建一个空环境,命名为DatabricksJobWaitEnv,后续我们将Gates绑定到这个环境上

2. YAML配置示例

# 定义全局变量,可根据实际情况调整
variables:
  databricks.instance.url: "你的Databricks工作区URL"
  databricks.job.train.id: "你的Databricks训练作业ID"

stages:
# 第一阶段:仅触发Databricks作业,不等待执行结果
- stage: TriggerDatabricksJob
  displayName: '触发Databricks训练作业'
  jobs:
  - job: TriggerJob
    displayName: '触发训练作业'
    pool:
      vmImage: 'ubuntu-latest'
    steps:
    - task: Bash@3
      displayName: '调用Databricks CLI触发作业并输出run_id'
      inputs:
        targetType: 'inline'
        script: |
          # 安装databricks cli(如果代理镜像没有预装)
          pip install databricks-cli
          # 配置databricks认证
          export DATABRICKS_HOST=$(databricks.instance.url)
          export DATABRICKS_TOKEN=$(databricks.pat)
          # 触发作业,获取run_id
          run_id=$(databricks jobs run-now --job-id $(databricks.job.train.id) | jq -r ".run_id")
          # 将run_id设为阶段输出变量,供后续Gates校验使用
          echo "##vso[task.setvariable variable=databricks.run.id;isOutput=true]$run_id"
      name: TriggerStep # 必须指定步骤名,才能引用输出变量

# 第二阶段:校验Databricks作业状态,校验通过后执行Staging部署
- stage: Staging
  displayName: '部署到预发环境'
  dependsOn: TriggerDatabricksJob
  # 引用前一阶段输出的run_id
  variables:
    runId: $[ stageDependencies.TriggerDatabricksJob.TriggerJob.outputs['TriggerStep.databricks.run.id'] ]
  jobs:
  - deployment: DeployToStaging
    displayName: '预发环境部署'
    # 绑定带Gates的环境
    environment: DatabricksJobWaitEnv
    pool:
      vmImage: 'ubuntu-latest'
    strategy:
      runOnce:
        deploy:
          steps:
            # 这里放你原本Staging阶段的部署逻辑
            - script: echo "Databricks作业执行成功,开始部署到预发环境"

3. 配置环境Gates

进入你刚才新建的DatabricksJobWaitEnv环境的配置页面,添加「调用REST API」类型的Gates,配置如下:

  • 检测间隔:按你的需求设置,比如5分钟
  • 超时时间:设置为Databricks作业的最大允许运行时长,比如24小时
  • REST API配置:
    • 连接类型:通用
    • 方法:GET
    • URL:$(databricks.instance.url)/api/2.1/jobs/runs/get?run_id=$(runId)
    • 请求头:添加Authorization: Bearer $(databricks.pat)
    • 成功规则:选择「表达式」,输入表达式eq(root['state']['result_state'], 'SUCCESS')

配置完成后,流水线运行到Staging阶段时,会先触发Gates逻辑,由Azure DevOps服务端按间隔轮询作业状态,直到作业成功才会执行后续的部署步骤,全程不会占用构建代理。

内容的提问来源于stack exchange,提问作者kanimbla

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 18:54:05