无法在 Jenkins 管道的 docker 容器中运行 jasmine 测试用例

Posted

技术标签:

【中文标题】无法在 Jenkins 管道的 docker 容器中运行 jasmine 测试用例【英文标题】:Could not run jasmine test case in docker container in Jenkins pipeline 【发布时间】:2020-09-14 09:51:23 【问题描述】:

我一直在尝试在基于node:10-alpine 构建的docker 容器中运行jasmine 测试以测试我用Angular 7 编写的UI 代码。我试图运行安装 chromium 和 puppeteer,但我的 chrome headless 似乎没有被捕获。我收到以下错误:

WARN [启动器]:ChromeHeadless 在 210000 毫秒内未捕获,正在杀死。

WARN [launcher]:ChromeHeadless 在 2000 毫秒内没有被杀死,发送 SIGKILL。 WARN [启动器]:ChromeHeadless 在 2000 毫秒内没有被 SIGKILL 杀死,> 继续。 npm 错误!代码生命周期 npm 错误!错误号 1

我也试过了:

增加 captureTimeout 和 browserNoActivityTimeout 添加了除“--no-sandbox”之外的更多标志,如下所示
customLaunchers: 


      ChromeHeadlessNoSandbox:
        base: "ChromeHeadless",
        flags: [
          "--no-sandbox",
          "--no-proxy-server",
          "--disable-web-security",
          "--disable-gpu",
          "--disable-dev-shm-usage",
          '--no-proxy-server',
          '--proxy-bypass-list=*',
          '--window-size=1920,1080',
          '--remote-debugging-port=9222'
        ]
      
    

我也加了

process.env.CHROME_BIN = require('puppeteer').executablePath(); 

在业力配置中

但一点运气都没有。谁能给我最好的解决方案?先谢谢了?

【问题讨论】:

【参考方案1】:

在挣扎了将近一周之后,我不知何故找到了解决办法。在我的 customLaunchers 中使用最少的配置,只有 "--no-sandbox" 标志并且没有 puppeteer,我能够通过正确设置以下环境变量在 docker 容器中运行我的 jasmine 测试用例:

CHROME_BIN=/usr/bin/chromium-browser and CHROME_PATH=/usr/lib/chromium/

以下是我在终端中运行以检查测试是否成功执行的命令:

docker run -e CHROME_BIN=/usr/bin/chromium-browser -e CHROME_PATH=/usr/lib/chromium/ -v path-to-project:/usr/src/app -w /usr/src/app dockerImage sh -c "apk add chromium && npm install && npm rebuild node-sass && npm run test:ci"

在我的 jenkins 文件中,我添加了以下行以在 Jenkins 管道中运行测试用例:

withEnv(["CHROME_BIN=/usr/bin/chromium-browser", "CHROME_PATH=/usr/lib/chromium/"]) 
   sh 'apk add chromium && npm install && npm run test:ci && npm run build'

【讨论】:

以上是关于无法在 Jenkins 管道的 docker 容器中运行 jasmine 测试用例的主要内容,如果未能解决你的问题,请参考以下文章

无法让 Docker 在 Docker 之外与 ECS 中的 Jenkins 一起工作

JENKINS管道部署容器化初探

jenkins 管道脚本中 docker 容器的 if else 条件

带有容器的 Jenkins Docker Sidecar 运行守护程序命令

在 Jenkins Pipeline 中访问本地运行的容器

用于 Jenkins 管道的 Docker 插件 - uid 1005 不存在用户