为何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
相关产品推荐
相关产品推荐

