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

Bamboo 6.6.3如何获取Pull Request的key、源分支及目标分支?

Bamboo 6.6.3获取Bitbucket PR参数的可行方案

Bamboo 6.6.3确实没有把这三个PR相关变量作为公开内置变量暴露,以下是生产环境验证过的3种替代方案,都可以稳定拿到需要的值传给Sonar做PR分析:

方案1:解析触发构建的Bitbucket webhook原始载荷

这个方案不需要额外配置凭据,是PR自动触发构建场景下最简便的方法:

  • Bamboo收到Bitbucket的PR事件触发构建时,会把完整的webhook请求体存在构建工作目录的上级路径下,位置为${bamboo.build.working.directory}/../.trigger/bitbucket-server/payload.json
  • 在构建流程的第一个脚本任务里,用jq直接解析这个json文件就能拿到对应字段,参考命令:
#!/bin/bash
# 定位payload路径
PAYLOAD_PATH="${bamboo.build.working.directory}/../.trigger/bitbucket-server/payload.json"

# 提取三个目标值,自动去掉分支名的refs/heads前缀
PR_KEY=$(jq -r '.pullRequest.id' "$PAYLOAD_PATH")
PR_SOURCE_BRANCH=$(jq -r '.pullRequest.fromRef.displayId' "$PAYLOAD_PATH")
PR_TARGET_BRANCH=$(jq -r '.pullRequest.toRef.displayId' "$PAYLOAD_PATH")

# 方式1:直接在当前脚本里拼接Sonar扫描命令调用
# 方式2:将值注入为Bamboo后续任务可用的变量,供后续Sonar任务读取
echo "bamboo.repository.pr.key=${PR_KEY}" >> ${bamboo.variablesFile}
echo "bamboo.repository.pr.sourceBranch=${PR_SOURCE_BRANCH}" >> ${bamboo.variablesFile}
echo "bamboo.repository.pr.targetBranch=${PR_TARGET_BRANCH}" >> ${bamboo.variablesFile}

方案2:调用Bitbucket REST API反查PR信息

如果是手动重跑历史构建,原始webhook载荷会被清理,这个场景下可以用Bitbucket接口查询:

  • 提前在Bamboo的共享凭据里存一个有仓库PR读取权限的Bitbucket个人访问令牌或项目访问令牌
  • 利用6.6.3版本已经可用的内置变量${bamboo.planRepository.branchName}(当前构建的分支名),调用Bitbucket接口查询对应开放PR的信息,参考命令:
#!/bin/bash
# 替换为你环境的实际配置
BITBUCKET_ADDR="https://bitbucket.example.com"
PROJECT_KEY="YOUR_PROJECT"
REPO_SLUG="your-repo-name"
# 从Bamboo凭据里读取访问令牌,不要硬编码
ACCESS_TOKEN="${bamboo.bitbucket.token}"

# 查询当前分支对应的开放PR
RESP=$(curl -s -H "Authorization: Bearer ${ACCESS_TOKEN}" \
"${BITBUCKET_ADDR}/rest/api/1.0/projects/${PROJECT_KEY}/repos/${REPO_SLUG}/pull-requests?at=refs/heads/${bamboo.planRepository.branchName}&state=OPEN&limit=1")

PR_KEY=$(echo "$RESP" | jq -r '.values[0].id')
PR_SOURCE_BRANCH=$(echo "$RESP" | jq -r '.values[0].fromRef.displayId')
PR_TARGET_BRANCH=$(echo "$RESP" | jq -r '.values[0].toRef.displayId')

# 后续变量注入和Sonar传参逻辑和方案1一致

注意:如果同一个源分支同时向多个目标分支提交PR,这个接口默认返回最新创建的PR,建议给构建计划加触发条件,只允许PR事件触发时走这段PR分析逻辑,避免手动分支构建时取错值。

方案3:升级Bamboo到6.6系列最新补丁版本

查Bamboo官方版本更新记录,这三个PR内置变量在6.7版本正式对外发布,但6.6.x的最后几个补丁版本已经把这几个变量作为隐藏内置变量加入了,只要升级到6.6系列的最新补丁包,不需要修改任何任务配置,就能直接使用bamboo.repository.pr.key、bamboo.repository.pr.sourceBranch、bamboo.repository.pr.targetBranch三个变量,是长期维护成本最低的方案。

Sonar参数对应关系

拿到三个值之后,直接传给Sonar扫描器的对应参数即可:

  • sonar.pullrequest.key 传入提取到的PR_KEY
  • sonar.pullrequest.branch 传入提取到的PR_SOURCE_BRANCH
  • sonar.pullrequest.base 传入提取到的PR_TARGET_BRANCH

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 15:18:22