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

Windows自托管流水线Runner中BITBUCKET_BUILD_NUMBER取值为空

问题根因

Fork仓库提交触发分支流水线时,BITBUCKET_BUILD_NUMBER返回空字符串是Bitbucket的默认安全机制导致的:所有来自Fork仓库的流水线运行在受限安全上下文,默认不会注入全量内置变量、密钥,避免外部贡献者通过提交恶意PR窃取流水线敏感信息。

解决方法

方案1:放开Fork流水线的变量访问权限

如果所有向你仓库提交PR的Fork贡献者都是可信的,可以直接修改仓库配置放开权限:

  • 进入目标仓库的「Repository settings > Pipelines > Settings」页面
  • 找到Fork pull request workflows配置段
  • 选中Allow access to all variables and secrets选项
  • 保存配置后重新触发流水线,即可正常读取BITBUCKET_BUILD_NUMBER变量

风险提示:放开该权限后,Fork PR中的任意执行脚本都可以访问你配置的所有流水线密钥、内置变量,请确认信任所有贡献者后再操作。

方案2:脚本增加兜底逻辑生成构建编号(更安全)

如果不想放开全局变量权限,可以在执行脚本中增加兜底判断:当BITBUCKET_BUILD_NUMBER为空时,用一定会注入的基础变量组合生成唯一构建编号,适配你当前Windows自托管runner的配置示例如下:

image: atlassian/default-image:3

pipelines:
  branches:
    feature/*:
      - step:
          name: 'Build and Test'
          runs-on:
          - 'self.hosted'
          - 'windows'
          - 'aio'
          script:
            # PowerShell适配:优先用内置构建号,为空则用PRID+提交短哈希生成唯一编号
            - $env:BUILD_NUMBER = if ($env:BITBUCKET_BUILD_NUMBER) { $env:BITBUCKET_BUILD_NUMBER } else { "fork-$($env:BITBUCKET_PR_ID)-$($env:BITBUCKET_COMMIT.Substring(0,7))" }
            - echo "Build and test"
            - ant -buildfile ReportGen/build.xml jar
            - echo "Deploying artifacts to /denver/integration/${env:BUILD_NUMBER}/"
            - jf rt u out/dist/* "test-generic-local/denver/integration/${env:BUILD_NUMBER}/"

说明:BITBUCKET_COMMIT(当前提交哈希)、BITBUCKET_PR_ID(PR编号)属于基础上下文变量,即使是受限的Fork流水线也会默认注入,组合生成的编号可以保证全局唯一,满足制品路径区分需求。

方案3:单独拆分PR流水线规则

可以把Fork PR触发的流水线和本仓库分支推送触发的流水线拆分配置,单独为pull-requests事件配置流水线规则,仅对PR流水线做变量兜底或者权限配置,不影响本仓库内分支推送的原有流水线逻辑。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 11:21:43