TeamCity中Angular测试构建失败但代理终端可运行的原因排查
TeamCity中Angular Karma测试ChromeHeadless启动失败问题排查与解决
问题场景
在TeamCity环境下运行Angular项目的Karma测试时出现异常:
- 在代理终端直接执行命令
ng test --watch=false --browsers=ChromeHeadless,测试可正常运行 - 将相同命令放到TeamCity构建步骤中执行,却报错无法启动ChromeHeadless
已尝试的无效方案
- 使用
xvfb-run -a ng test --watch=false --browsers=ChromeHeadless命令包装执行 - 在Karma配置文件中自定义ChromeHeadless启动器,配置如下:
customLaunchers: { ChromeHeadlessNoSandbox: { base: 'ChromeHeadless', binary: '/usr/bin/google-chrome', // 路径来自调试输出 flags: [ '--no-sandbox', '--disable-gpu', '--disable-dev-shm-usage', '--disable-setuid-sandbox' ] } },
问题根源
TeamCity构建步骤使用的是buildAgent.properties中配置的自定义临时目录,而终端环境默认使用/tmp目录。ChromeHeadless启动依赖默认的/tmp目录,因此在构建步骤中无法正常初始化。
解决方法
- 临时方案:在TeamCity构建步骤中添加环境变量配置,设置
TMPDIR=/tmp,强制ChromeHeadless使用默认临时目录 - 永久方案:修改TeamCity代理的
buildAgent.properties配置文件,将临时目录设置为/tmp,确保所有构建步骤都使用该目录
内容的提问来源于stack exchange,提问作者Joe Vogel
相关产品推荐
相关产品推荐

