我正在尝试将 Jenkins 用作 docker 容器。为此,我使用官方 docker 镜像。由于我们有一些基于 Selenium(实际上是 Vaadin Workbench)的集成测试,因此我需要以无头方式运行 phantomjs。测试执行正确,与 dockerized 之前一样。我的 Web 应用程序(服务器)执行正确,phantomjs 稍后作为客户端启动并正确执行所有测试。这是预期的行为。
现在我喜欢在高山系统。一般来说,我在其他 docker 容器中使用 alpine,因为它体积小。Jenkins docker 官方镜像中也有基于 alpine 的镜像,我可以使用它。一般来说,我需要安装的其他工具(ansible,...)都没有问题。它们在 alpine 版本中运行良好。但我遇到了 phantomjs 的问题。
首先,我从一个有 alpine 编译的 github 项目中安装了 phantomjs。下面是我使用的命令:
RUN apk --no-cache add fontconfig && \
mkdir -p /usr/share && \
curl -L https://github.com/Overbryd/docker-phantomjs-alpine/releases/download/2.11/phantomjs-alpine-x86_64.tar.bz2 | tar xj --directory /usr/share && \
chmod +x /usr/share/phantomjs/phantomjs && \
ln -s /usr/share/phantomjs/phantomjs /usr/bin/phantomjs
看起来运行正常。如果我使用 访问 docker 容器docker exec -it jenkins sh
,我可以从命令行执行 phantomjs。但是当 jenkins 执行测试时,我出现此错误:
WebDriverException: Timed out waiting for driver server to start
在任何测试开始之前。应用服务器正在运行(我可以从浏览器连接到它),但 jenkins 无法启动 phantomjs 来连接它。我已检查phantomjs 日志看看这是否是问题所在,但它具有写入权限(但文件仍然为空)。我仍然可以从命令行执行 phantomjs,但 jenkins + selenium 不能。
当然,在 alpine 机器上运行 jenkins 不是强制性的,现在我回到基于 openjdk 的标准 docker 镜像。但现在我对这个问题很好奇,我不确定这是 phantomjs 问题还是 alpine 问题。或者也许我需要一些额外的配置或数据包才能在 alpine 中运行 phantomjs。
使用 jenkins + alpine + selenium (或同等产品) 时,有人遇到同样的问题吗? 有什么线索可以导致此错误吗?