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_KEYsonar.pullrequest.branch传入提取到的PR_SOURCE_BRANCHsonar.pullrequest.base传入提取到的PR_TARGET_BRANCH
内容的提问来源于stack exchange,提问作者Vahid
相关产品推荐
相关产品推荐

