能否在HerokuCI上缓存Selenium和Chrome Buildpack安装?

11

我刚开始使用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...

这占用了测试运行时间的大部分。

这些安装包能被缓存吗?


@Bsquare 抱歉,我不确定我理解您的问题。 - Schwern
你有什么消息吗?明天我会开始工作的 ;) - Bsquare ℬℬ
@Bsquare 我已经添加了整个app.json。我会在你的回答下面做出评论。 - Schwern
@Bsquare 抱歉,我不能展示给你这个项目。它是私有的。钩子是 https://kolkrabbi.heroku.com/hooks/github,"application/json",和 "Send me everything"。它是由 Heroku 设置的。我怀疑它所做的就是通知 Heroku 有一个新的提交要拉取和部署。 - Schwern
@Shrolox 不,我没有。 - Schwern
显示剩余11条评论
2个回答

0

如果您已按照此处所述启用了缓存,则似乎没有更多可以缓存安装的内容。如果这是一个严重的问题,您可以始终指向从远程仓库克隆的本地软件包以加快速度。


我认为我没有启用缓存的方式,我的理解是它们应该可以正常工作。我不调用 bin/compile。我只提供 buildpack 的 URL,我的理解是 Heroku 应该完成剩下的工作。这个 buildpack 有问题吗? - Schwern
我链接的文档中写道:“如果构建包确实打算使用缓存,则应在CACHE_DIR目录不存在时创建它。” 我认为如果有意使用缓存,它会将其缓存。 - Yehuda Schwartz

-1

经过多次搜索和尝试,我带来了好消息。

关键问题在于您的日志文件中出现了错误,例如:

bash: /tmp/buildpacks/b5ae60a477f2ba582d00a4ba23348059d40dea69cea6d982947f7c6afa72d2b8d69252449d43cbcf97a23341fd57300a3fef3224ace95482e1c0deaf8a844e4d/export: No such file or directory

这个自动生成的目录显然是一个缓存目录,当没有固定时会自动生成。

例如,在heroku-buildpack-selenium构建包中可以确认,该构建包在您的app.json文件中定义:

# parse and derive params
BUILD_DIR=$1
CACHE_DIR=$2
LP_DIR=`cd $(dirname $0); cd ..; pwd`

我找到了官方文档,确认了以下内容:

CACHE_DIR的内容将在构建之间保留。您可以将长时间进程(如依赖关系解析)的结果缓存到此处,以加快未来的构建速度。

因此,关键的解决方案是在安装过程中定义CACHE_DIR变量;所以我猜测它要么直接在您的app.json文件中,要么直接在您的GitHub Hook中。

如果您需要进一步帮助,请告诉我。


看起来 CACHE_DIR 不是一个环境变量,而是在 bin/compile 内部的一个变量,它从第二个参数中填充。我对此没有控制权。我所做的就是提供构建包 URL。我猜我可以尝试定义一个 CACHE_DIR 环境变量,看看会发生什么。我还清除了缓存,只是为了看看是否有帮助。下一次部署时我会告诉你,并重新发布赏金。 - Schwern
是的,这是在启动bin/compile时使用的第二个参数,但根据文档,我认为是Heroku使用具有相同名称的环境变量指定此参数。 - Bsquare ℬℬ
你能否将存储库克隆中.git/hook下的示例文件复制/粘贴? - Bsquare ℬℬ
这个项目中没有 Git 钩子。 Git 和 Github 参与的唯一方式是 Heroku 通知有新的提交在主分支上来部署。 - Schwern
你解决了你的问题吗?我仍然100%确定它可以在你的app.json文件或者你的环境中完成。无论如何,你有没有考虑过:在Stackoverflow上,你可以给予来感谢那些提供帮助的人,并从所有答案中选择任何一个作为正确答案 - Bsquare ℬℬ

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接