如何获取Playwright退出码以在流水线中终止失败构建?
解决Playwright测试失败后流水线不终止的问题
问题根源
你的Shell脚本最后执行了rm -rf node_modules,这条命令只要执行成功就会返回退出码0,覆盖了yarn run uiTests的退出码——无论测试是否失败,脚本最终都返回0,导致流水线无法感知测试失败进而终止。另外,后台启动的yarn run local进程未被正确管理,可能遗留进程影响后续步骤。
修复方案
修改playwright.sh脚本,捕获测试命令的退出码并在脚本末尾返回该值,同时清理后台启动的本地服务进程:
#!/usr/bin/env bash # 安装依赖 apt-get update apt-get install -y gnupg2 gnupg1 wget docker pull mcr.microsoft.com/playwright/python:v1.27.0-focal yarn install yarn playwright install yarn playwright install-deps # 启动本地服务并记录进程ID yarn run local & LOCAL_SERVER_PID=$! # 可选:等待本地服务启动完成(避免测试因服务未就绪失败) wait_for_local_server() { echo "等待本地服务启动..." until curl -s http://localhost:3000 > /dev/null; do sleep 1 done echo "本地服务已启动" } wait_for_local_server # 执行测试并捕获退出码 yarn run uiTests TEST_EXIT_CODE=$? # 停止本地服务进程 kill $LOCAL_SERVER_PID # 清理依赖 rm -rf node_modules # 返回测试的退出码,传递给上层Makefile和流水线 exit $TEST_EXIT_CODE
验证逻辑
- 脚本执行
yarn run uiTests后,将其退出码存入TEST_EXIT_CODE变量 - 无论后续的
kill和rm命令是否成功,脚本最终都会返回TEST_EXIT_CODE的值 - Makefile调用该脚本时,若脚本返回非0(测试失败),Makefile会终止并将退出码传递给流水线,触发构建终止
内容的提问来源于stack exchange,提问作者Doctor Who
相关产品推荐
相关产品推荐

