Azure 管道步骤 - 触发 Databricks 作业

Azure Pipeline Step - Trigger Databricks Job

我正在尝试在管道步骤中触发数据块作业,我在其中使用从上一步作为变量传递的作业 ID。

这就是我创建作业 ID 并将其作为变量传递的方式:

- script: |
    job_id=$(databricks jobs create --json '{"name": "test", "existing_cluster_id" : "'"$(db_clusterid)"'", "notebook_task ": {"notebook_path": "'"$(nbpath)"'"}}')
    echo "##vso[task.setvariable variable=db_job_id;]'"$job_id"'"
  env:
    DB_HOST: $(db_host)
    DB_TOKEN: $(db_token)
  displayName: 'Create Job'

当我在下一步中回显变量时,它看起来符合预期:

- script: |
    echo $DB_JOB_ID
  env:
    DB_JOB_ID: $(db_job_id)
    DB_HOST: $(db_host)
    DB_TOKEN: $(db_token)
  displayName: 'Echo Job ID'

来自回显的输出:

'{ "job_id": 123 }'

但是,当我尝试 运行 作业时,如下所示:

- script: |
    databricks jobs run-now --job-id $DB_JOB_ID
  env:
    DB_JOB_ID: $(db_job_id)
    DB_HOST: $(db_host)
    DB_TOKEN: $(db_token)
  displayName: 'Run Job'

出现以下错误信息:

Error: Got unexpected extra arguments ("job_id": 123}')

我没有提供 $DB_JOB_ID,而是尝试了 "$DB_JOB_ID""'"$DB_JOB_ID"'",但都没有用。

正确的说法是什么?

您的问题是您要放入返回的整个 JSON,而 run-now 只需要作业 ID,即数字。您可以将 --job-id $DB_JOB_ID 替换为 --job-id $(echo $DB_JOB_ID||sed -e 's|^.*:[ ]*\([0-9][0-9]*\)[ ]*.*$||') - 它只会提取所需的作业 ID。

P.S。而不是 databricks jobs create 作为一步,然后 运行 宁 databricks jobs run-now,最好使用 databricks jobs submit(或使用 Run Submit REST API)——它只会 运行 作业而不创建它。

您还可以查看在 Databricks 内部开发的 dbx package - 它可能会简化您如何安排作业、等待结果等的方式。