Selenium 和 Chrome buildpack 安装可以缓存在 HerokuCI 上吗?
Posted
技术标签:
【中文标题】Selenium 和 Chrome buildpack 安装可以缓存在 HerokuCI 上吗?【英文标题】:Can Selenium and Chrome buildpack installs be cached on HerokuCI? 【发布时间】:2019-04-18 00:14:18 【问题描述】:我刚刚开始使用 HerokuCI。我有一些 Selenium 测试,所以我在 app.json
中添加了构建包。
"buildpacks": [
"url": "heroku/ruby"
],
"environments":
"test":
"addons": ["heroku-postgresql:in-dyno", "heroku-redis:in-dyno"],
"buildpacks": [
"url": "heroku/ruby" ,
"url": "https://github.com/notvad/heroku-buildpack-selenium" ,
"url": "https://github.com/heroku/heroku-buildpack-chromedriver" ,
"url": "https://github.com/heroku/heroku-buildpack-google-chrome"
],
"env":
"REDIS_PROVIDER": "REDIS_URL",
"RAILS_ENV": "test",
"RACK_ENV": "test",
"MALLOC_ARENA_MAX": 2,
"LANG": "en_US.UTF-8",
"TEST_API": 1
,
"scripts":
"test-setup": "./bin/setup-cc-test-reporter",
"test": "./bin/test-with-cc-test-reporter"
这些与所有依赖项一起不断重建。
-----> Selenium app detected
bash: /tmp/buildpacks/b5ae60a477f2ba582d00a4ba23348059d40dea69cea6d982947f7c6afa72d2b8d69252449d43cbcf97a23341fd57300a3fef3224ace95482e1c0deaf8a844e4d/export: No such file or directory
bash: /tmp/buildpacks/b7af5642714be4eddaa5f35e2b4c36176b839b4abcd9bfe57ee71c358d71152b4fd2cf925c5b6e6816adee359c4f0f966b663a7f8649b0729509d510091abc07/export: No such file or directory
-----> Updating apt caches
Hit:1 http://apt.postgresql.org/pub/repos/apt bionic-pgdg InRelease
Hit:2 http://archive.ubuntu.com/ubuntu bionic InRelease
Hit:3 http://archive.ubuntu.com/ubuntu bionic-security InRelease
Hit:4 http://archive.ubuntu.com/ubuntu bionic-updates InRelease
Reading package lists...
-----> Fetching .debs for xserver-xorg-core libgl1-mesa-dri xvfb libglide3 xfs unzip
Reading package lists...
Building dependency tree...
Package xfs is not available, but is referred to by another package.
This may mean that the package is missing, has been obsoleted, or
is only available from another source
E: Package 'xfs' has no installation candidate
-----> Installing adwaita-icon-theme_3.28.0-1ubuntu1_all.deb
-----> Installing at-spi2-core_2.28.0-1_amd64.deb
...and so on...
-----> Downloading and installing Selenium
-----> Writing profile script
-----> chromedriver app detected
bash: /tmp/buildpacks/b5ae60a477f2ba582d00a4ba23348059d40dea69cea6d982947f7c6afa72d2b8d69252449d43cbcf97a23341fd57300a3fef3224ace95482e1c0deaf8a844e4d/export: No such file or directory
bash: /tmp/buildpacks/b7af5642714be4eddaa5f35e2b4c36176b839b4abcd9bfe57ee71c358d71152b4fd2cf925c5b6e6816adee359c4f0f966b663a7f8649b0729509d510091abc07/export: No such file or directory
bash: /tmp/buildpacks/f55d0db8af2b8c70f2c0e028ef5430955852d9e4f07a06e333e54eb5264a81b9d1e77d1cc02851b4c7da30f6da47b13959e18a24c630212b899920d05f32a566/export: No such file or directory
-----> Looking up latest chromedriver version...
-----> Downloading chromedriver v2.43...
Archive: /tmp/chromedriver.zip
inflating: /app/.chromedriver/bin/chromedriver
-----> Creating chromedriver export scripts...
-----> Google Chrome app detected
bash: /tmp/buildpacks/b5ae60a477f2ba582d00a4ba23348059d40dea69cea6d982947f7c6afa72d2b8d69252449d43cbcf97a23341fd57300a3fef3224ace95482e1c0deaf8a844e4d/export: No such file or directory
bash: /tmp/buildpacks/b7af5642714be4eddaa5f35e2b4c36176b839b4abcd9bfe57ee71c358d71152b4fd2cf925c5b6e6816adee359c4f0f966b663a7f8649b0729509d510091abc07/export: No such file or directory
bash: /tmp/buildpacks/f55d0db8af2b8c70f2c0e028ef5430955852d9e4f07a06e333e54eb5264a81b9d1e77d1cc02851b4c7da30f6da47b13959e18a24c630212b899920d05f32a566/export: No such file or directory
bash: /tmp/buildpacks/27353aa3b5edb2f8361186206e863f5d481f02805d02f0efdec439f3d30349a4fbdad2951af33a0492023fb0d90d26dafda6fe76f1b2d34f68564a98545f7022/export: No such file or directory
-----> Installing Google Chrome from the stable channel.
-----> Updating apt caches
Hit:1 http://archive.ubuntu.com/ubuntu bionic InRelease
Hit:2 http://apt.postgresql.org/pub/repos/apt bionic-pgdg InRelease
Hit:3 http://archive.ubuntu.com/ubuntu bionic-security InRelease
Hit:4 http://archive.ubuntu.com/ubuntu bionic-updates InRelease
Reading package lists...
-----> Fetching .debs for gconf-service
...and so on...
这占用了大部分测试运行时间。
可以缓存这些安装吗?
【问题讨论】:
你用什么 CLI 来启动进程? @Bsquare 对不起,我不确定我明白你在问什么。 我的意思是,你启动什么命令来获得这种行为? @Bsquare 我没有直接控制权。它是作为 Heroku 提供的 Github PR hook 启动的。我不直接控制配置 CI dyno。相反,它是通过指定buildpacks in a configuration file。见devcenter.heroku.com/articles/… 好的,我来分析一下;) 【参考方案1】:经过各种搜索和尝试,我带来了好消息。
关键问题是您在日志文件中的错误,例如:
bash: /tmp/buildpacks/b5ae60a477f2ba582d00a4ba23348059d40dea69cea6d982947f7c6afa72d2b8d69252449d43cbcf97a23341fd57300a3fef3224ace95482e1c0deaf8a844e4d/export: No such file or directory
这个自动生成的目录显然是一个缓存目录,不固定时自动生成的。
例如,这可以在您的 app.json 文件中定义的 heroku-buildpack-selenium buildpack 中确认:
# parse and derive params
BUILD_DIR=$1
CACHE_DIR=$2
LP_DIR=`cd $(dirname $0); cd ..; pwd`
通过我找到的这个official documentation确认:
CACHE_DIR 的内容将在构建之间持久化。你可以 在这里缓存像依赖解析这样的长过程的结果 加快未来的构建速度。
所以关键的解决方案是在您的安装中定义这个 CACHE_DIR 变量;所以我猜它要么直接在您的 app.json 文件中,要么直接在您的 GitHub Hook 中。
如果您需要进一步的帮助,请告诉我。
【讨论】:
看起来CACHE_DIR
不是环境变量,而是bin/compile
内部的变量,它是从其第二个参数填充的。我对此无能为力。我所做的只是提供 buildpack URL。我想我可以尝试定义一个 CACHE_DIR 环境变量,看看会发生什么。我也 purged the cache 只是想看看是否有帮助。我会通知你下一次部署,我会重新获得赏金。
是的,它是启动 bin/compile 时使用的第二个参数,但根据文档,我认为是 Heroku 使用具有相同名称的环境变量指定此参数。
你能复制/粘贴你的存储库克隆中 .git/hook 下的没有示例文件吗?
这个项目中没有 Git 钩子。参与 Git 和 Github 的唯一方法是通知 Heroku,master 上有一个新的提交要部署。
您的问题解决了吗?我仍然 100% 确定它可以在您的 app.json 文件或您的环境中完成。无论如何,你有没有想过:在 *** 上,你可以将up-vote 给人们有用的答案以感谢他们,并选择任何一个答案作为correct answer。【参考方案2】:
如果您按照here 的描述启用了缓存,似乎您可以做更多的事情来缓存安装。如果这是一个严重的问题,您总是可以指向您从远程存储库克隆的本地包以加快处理速度。
【讨论】:
我认为我没有办法启用缓存,我的理解是它们应该可以正常工作。我不打电话给bin/compile
。我只提供 buildpack URL,我的理解是 Heroku 应该做剩下的事情。 buildpack 有问题吗?
我链接到的文档说If the build pack does intend to use a cache, it should create the CACHE_DIR directory if it doesn’t exist.
我假设如果缓存是有意的,它会缓存它以上是关于Selenium 和 Chrome buildpack 安装可以缓存在 HerokuCI 上吗?的主要内容,如果未能解决你的问题,请参考以下文章
Selenium Headless Chrome 和语言设置
只允许本地连接 Chrome 和 Selenium webdriver