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

为何Bitbucket流水线在命令返回非零退出码时仍显示绿色?

问题:Docker容器内命令返回非零退出码,但Bitbucket流水线仍显示成功

环境配置

初始Dockerfile

FROM ruby:3.0-slim-buster

WORKDIR /app

# 复制Android项目内容,其中.apk文件位于./android/app/build/outputs/apk/release/app-release.apk
COPY ./android .
RUN rm Gemfile.lock

# 安装Fastlane
RUN apt-get update
RUN apt-get install build-essential -y
RUN gem install bundler
RUN bundle install

# 上传apk文件
ENTRYPOINT bundle exec fastlane upload

docker-compose.yml

version: '3'

services:
  push-android:
    build:
      dockerfile: ./android/Dockerfile
      context: .
    deploy:
      resources:
        reservations:
          memory: 2048M
    networks:
      - internal

networks:
  internal:
    driver: bridge

Bitbucket流水线步骤

- step:
    name: Push APK File
    caches:
      - docker
      - node
    services:
      - docker
    size: 2x
    script:
      - docker-compose up push-android

问题现象

首次执行流水线时,.apk文件成功上传至Google Play Console,流水线显示正常(绿色)。但重新执行流水线时,由于已上传过相同versionCode的.apk,bundle exec fastlane upload命令理应返回非零退出码,流水线应标记为失败(红色),但实际仍显示绿色成功状态。

排查过程

为定位问题,简化Dockerfile进行测试:

测试用Dockerfile(容器运行阶段执行错误命令)

FROM ruby:3.0-slim-buster

# 不存在该名称的shell脚本,应返回非零退出码
ENTRYPOINT ./push-apk.sh

此时容器内命令返回127退出码,但Bitbucket流水线依旧显示绿色成功。

对比测试(镜像构建阶段执行错误命令)

FROM ruby:3.0-slim-buster

# 不存在该名称的shell脚本,应返回非零退出码
RUN ./push-apk.sh

这种情况下,流水线会正常显示红色失败状态。

此外,通过Bitbucket的after-script查看$BITBUCKET_EXIT_CODE,结果为0,说明流水线没有接收到容器内命令的非零退出码。

疑问

根据Bitbucket文档,命令返回非零退出码时构建会失败。但为何容器内执行的命令返回非零退出码时,Bitbucket流水线不显示失败?问题出在哪里?

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.16 10:27:22