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

Bitbucket Pipeline中Docker构建失败时触发POST请求失败问题排查

Docker构建失败时触发API通知的可行性与修复方案

需求可行性

该需求完全可行,Bitbucket Pipeline支持通过Shell的||语法捕获命令执行失败的场景,进而触发后续的API请求操作。

问题排查

现有配置可能存在以下问题导致功能失效:

  • 环境变量未正确配置:$IMAGE_NAMESPACE、$IMAGE_NAME、$ERROR_API_URL这些变量如果未在Bitbucket仓库的Repository Variables中定义,会导致docker build命令提前失败,或curl请求的目标URL无效。
  • JSON格式拼接错误:手动拼接JSON字符串时,引号嵌套容易出现语法问题,导致curl发送的JSON格式不合法,API无法解析。
  • 无调试信息:未给curl添加调试参数,无法确认请求是否发送成功、是否存在网络连通性问题。

修复方案

针对上述问题,按以下步骤修改Pipeline配置:

1. 确认环境变量配置

在Bitbucket仓库的Settings > Repository variables中添加以下变量(确保值正确):

  • IMAGE_NAMESPACE:DigitalOcean容器仓库的命名空间
  • IMAGE_NAME:Docker镜像名称
  • ERROR_API_URL:接收通知的API地址
  • DO_API_TOKEN:DigitalOcean的API令牌

2. 优化失败处理逻辑

修改dev分支的script部分,优化JSON生成方式,添加调试信息:

pipelines:
  branches:
    dev:
      - step:
          name: Build and Push Docker Image
          services:
            - docker
          script:
            # Set up variables
            - IMAGE_ENV_TAG="dev"
            - REPO_NAME="${BITBUCKET_REPO_SLUG}"
            - BUILD_ID="${BITBUCKET_BUILD_NUMBER}"
            - WORKSPACE="${BITBUCKET_WORKSPACE}"

            # Log in to DigitalOcean Container Registry
            - echo "$DO_API_TOKEN" | docker login registry.digitalocean.com -u "doctl" --password-stdin

            # Build the Docker image & SEND POST REQUEST on failure
            - docker build -t "registry.digitalocean.com/$IMAGE_NAMESPACE/$IMAGE_NAME:$IMAGE_ENV_TAG" . || {
                echo "Build failed. Sending error to API.";
                # 使用printf生成合法JSON,避免引号嵌套问题
                JSON_DATA=$(printf '{"env":"%s","repo":"%s","buildId":"%s","workspace":"%s"}' "$IMAGE_ENV_TAG" "$REPO_NAME" "$BUILD_ID" "$WORKSPACE");
                # 添加-v参数调试,稳定后可移除
                curl -v -X POST -H "Content-Type: application/json" -d "$JSON_DATA" "$ERROR_API_URL";
                # 确保步骤以失败状态结束
                exit 1;
              }

            # Push
            - docker push "registry.digitalocean.com/$IMAGE_NAMESPACE/$IMAGE_NAME:$IMAGE_ENV_TAG"

          artifacts:
            - build/**

3. 额外优化建议

  • 如果API需要身份验证,在curl命令中添加对应的请求头(比如-H "Authorization: Bearer $API_TOKEN")。
  • 可将失败处理逻辑封装成脚本放在仓库中调用,提升配置可读性。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.16 20:10:10