BitBucket Pipeline使用自定义镜像运行时无执行日志输出如何解决
问题根因
你遇到的无输出问题90%以上是因为hashicorp/terraform官方镜像的默认入口点(ENTRYPOINT)设置为terraform二进制本身,BitBucket Pipelines的自托管runner无法通过默认shell捕获脚本执行的stdout/stderr输出。
修复步骤
- 第一步:在step配置中显式覆盖镜像入口点为空,强制runner使用内置shell执行脚本,修改后的
bitbucket-pipelines.yml如下:
pipelines: branches: master: - step: runs-on: self.hosted image: name: hashicorp/terraform:latest entrypoint: '' name: 'Terraform Version' script: - terraform -v - echo "test output"
- 第二步:如果修改入口点后仍然无输出,可以在script开头添加调试参数强制输出刷新,示例:
script: - set -x - stdbuf -o0 terraform -v - stdbuf -o0 echo "test string"
- 第三步:如果以上操作都无效,检查自托管runner本地运行日志:
- 在本地执行
docker logs <你的runner容器名称>,查看是否有script执行的输出内容 - 确认runner启动时没有设置
DISABLE_LOGGING相关环境变量,日志级别保持默认的info级别即可
- 在本地执行
验证方法
你可以先替换镜像为通用基础镜像做对照测试,如果以下配置可以正常输出内容,就可以确认是原terraform镜像的入口点问题:
- step: runs-on: self.hosted image: alpine:latest script: - echo "test alpine output"
内容的提问来源于stack exchange,提问作者Molenpad
相关产品推荐
相关产品推荐

