如何判断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
相关产品推荐
相关产品推荐

