Bitbucket Pipeline无法显示Yarn build完整输出及日志截断问题
解决Bitbucket Pipeline日志截断问题
1. 强制刷新命令输出(通用方案)
CI环境下多数命令的标准输出默认采用块缓冲模式,程序结束前未主动刷新缓冲区会导致日志截断,可通过以下方式解决:
方法A:使用unbuffer禁用缓冲
unbuffer属于expect工具包,能强制命令输出实时刷新。先在镜像中安装依赖,再包裹目标命令:
image: node:latest pipelines: branches: staging: steps: - step: name: Build caches: - node script: - apt-get update && apt-get install -y expect - yarn install - unbuffer yarn build
方法B:用tee强制行缓冲
tee会将输出同时写入文件和控制台,默认启用行缓冲,避免截断:
script: - yarn install - yarn build | tee build-output.log
执行后可将build-output.log作为工件保存,方便后续回溯完整日志。
2. React Scripts专属调整
react-scripts的build命令在CI环境下存在输出缓冲特性,可通过环境变量或直接调用脚本强制实时输出:
script: - yarn install - CI=true yarn build
或直接修改Node.js的输出缓冲设置:
script: - yarn install - node -e "process.stdout._handle.setBlocking(true); require('react-scripts/scripts/build')"
3. 修复atlassian/ssh-run日志截断
针对ssh-run的输出截断,可通过添加-tt参数强制分配伪终端,确保输出实时刷新:
script: - pipe: atlassian/ssh-run:0.6.0 variables: SSH_USER: 'your-user' SERVER: 'your-server' COMMAND: 'echo "Hello, World!"' SSH_OPTIONS: '-tt'
验证
修改配置后重新执行Pipeline,检查yarn build的输出是否包含完整的文件大小列表、部署提示;同时确认ssh-run的echo命令能正常显示完整消息。
内容的提问来源于stack exchange,提问作者Daniel Loureiro
相关产品推荐
相关产品推荐

