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

如何在Azure DevOps拉取请求中对Databricks Notebook做单元测试

在Azure DevOps PR中获取合并后暂存代码并同步到Databricks执行预合并测试

问题背景

我们目前用Databricks Repo关联Azure DevOps作为Git仓库,dev、main、release分支已对应部署到各自环境,运行正常。现在需要在合并PR到dev分支前,对PR里的Notebook做单元测试,但缺少合适流程——因为只用Notebook,必须把PR合并后的暂存代码推到Databricks的测试仓库(/Repos/test/my_repo)才能跑测试。

我们想要的CI流程是:

  • 用户创建特性分支,向dev提交PR
  • Azure DevOps CI在冲突解决后,把PR合并后的代码同步到Databricks测试仓库,触发关联工作流执行单元测试
  • 测试通过后再合并PR更新dev分支

之前参考AlexOtt的示例,发现它只部署源分支而非合并后的代码,所以想问:Azure DevOps里能不能拿到PR暂存代码的分支名或标签,用来更新Databricks测试仓库?另外绝对不想先合并PR再测试,这会把dev分支搞脏,还要反复提交修复PR。

解决方案

1. 利用Azure DevOps自动生成的PR合并暂存分支

Azure DevOps在PR创建后,会自动生成一个合并暂存分支,路径格式为refs/pull/{PR编号}/merge,这个分支里已经包含了源分支和目标分支(dev)解决冲突后的合并结果。不用自己创建额外分支,直接用这个暂存分支的代码即可。

2. CI流水线具体配置步骤

触发条件

设置Azure DevOps流水线仅在PR目标为dev分支时自动触发。

核心步骤

  • 拉取合并后的暂存代码:
    在CI任务里执行Git命令,直接拉取PR的合并暂存分支:

    git fetch origin refs/pull/$(System.PullRequest.PullRequestId)/merge
    git checkout FETCH_HEAD
    

    这里的$(System.PullRequest.PullRequestId)是Azure DevOps自动注入的PR编号变量。

  • 同步到Databricks测试仓库:
    用Databricks CLI的repos update命令,指定测试仓库路径和合并后的提交ID(通过Azure DevOps预定义变量System.PullRequest.MergeCommitId获取):

    databricks repos update --path /Repos/test/my_repo --commit-id $(System.PullRequest.MergeCommitId)
    

    这个命令会直接把测试仓库更新到PR合并后的代码状态。

  • 触发单元测试工作流:
    调用Databricks CLI触发关联的测试任务:

    databricks jobs run-now --job-id <你的测试任务ID>
    
  • 设置PR合并门禁:
    在Azure DevOps的分支保护策略里,把这个CI流水线设为PR合并的必填条件,只有测试通过才能合并PR。

3. 关键变量说明

  • System.PullRequest.PullRequestId:当前PR的唯一编号,CI环境自动注入
  • System.PullRequest.MergeCommitId:PR合并后的提交哈希值,确保同步的是解决冲突后的最终代码
    如果一定要用分支名,也可以基于PR编号创建临时分支(比如pr-$(System.PullRequest.PullRequestId)-merge)推送到Azure DevOps,再同步到Databricks,但直接用提交ID更简洁高效。

4. 额外建议

  • 每次同步测试仓库前,先执行databricks repos reset命令重置到干净状态,避免旧代码残留影响测试结果
  • 严格配置分支保护策略,禁止直接推送到dev分支,所有代码变更必须通过PR+预合并测试才能进入dev

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 23:40:48