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

如何判断Bitbucket新分支流水线是否为首次运行?

Bitbucket Pipelines 分支首次构建判断方案

Bitbucket Pipelines 没有提供像 Jenkins BUILD_NUMBER 那样按分支递增的构建序号环境变量,它的全局构建号是跨所有分支唯一递增的。要实现仅在新功能分支首次构建时执行特定逻辑,有以下几种可行方案:

方案1:调用Bitbucket API查询分支构建历史

通过Bitbucket的API查询当前分支的已完成构建数量,以此判断是否为首次构建:

  • 用环境变量 BITBUCKET_BRANCH 获取当前分支名
  • 用curl调用API,传入仓库信息和分支名,统计该分支的构建次数
  • 若构建次数为1(包含当前运行的构建),则执行特定逻辑

示例代码:

# 获取当前分支的构建次数
BUILD_COUNT=$(curl -s -u "${BITBUCKET_USERNAME}:${BITBUCKET_APP_PASSWORD}" \
  "https://api.bitbucket.org/2.0/repositories/${BITBUCKET_REPO_OWNER}/${BITBUCKET_REPO_SLUG}/pipelines/?target.branch.name=${BITBUCKET_BRANCH}" \
  | jq '.size')

# 判断并执行首次构建逻辑
if [ "$BUILD_COUNT" -eq 1 ]; then
  echo "执行首次构建专属逻辑..."
  # 在这里添加你的特定代码
fi

注意:需要提前配置具有仓库读取权限的App Password,作为环境变量BITBUCKET_APP_PASSWORD传入流水线。

方案2:在仓库中记录分支构建状态

首次构建时往仓库的状态文件里写入分支标记,后续构建检查该文件即可:

  • 流水线步骤中先拉取最新代码,确保能读取到状态文件
  • 检查当前分支是否在状态文件中有记录
  • 无记录则执行特定逻辑,再把分支名写入文件并推送到仓库

示例代码:

# 检查分支是否已被记录
if ! grep -q "^${BITBUCKET_BRANCH}$" .branch-build-states 2>/dev/null; then
  echo "执行首次构建专属逻辑..."
  # 添加你的特定代码

  # 标记该分支已完成首次构建
  echo "${BITBUCKET_BRANCH}" >> .branch-build-states
  git add .branch-build-states
  git commit -m "Mark ${BITBUCKET_BRANCH} as first built"
  git push origin "${BITBUCKET_BRANCH}"
fi

注意:要确保流水线有仓库推送权限,同时处理可能的并发构建冲突。

方案3:用缓存存储分支构建次数

利用Bitbucket Pipelines的缓存功能,存储每个分支的构建次数:

  • 首次构建时缓存中无对应分支记录,执行逻辑后将次数设为1存入缓存
  • 后续构建读取缓存次数,大于1则跳过特定逻辑

示例配置:

pipelines:
  default:
    - step:
        name: 检查首次构建
        script:
          - mkdir -p cache
          - BUILD_COUNT=$(cat cache/${BITBUCKET_BRANCH}-build-count 2>/dev/null || echo 0)
          - if [ "$BUILD_COUNT" -eq 0 ]; then
              echo "执行首次构建专属逻辑..."
              # 添加你的特定代码
              echo 1 > cache/${BITBUCKET_BRANCH}-build-count
            fi
        caches:
          - build-counts
definitions:
  caches:
    build-counts: cache/

注意:缓存存在被清理的可能,适合对准确性要求不高的场景。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 11:01:35