4/19あたりからCircleCIでまたこのエラーがでるようになりました。
session not created exception: Chrome version must be >= 65.0.3325.0
多分、Gemfile
に入れていたchromedriver-helper
とDockerイメージに入っているChromeのバージョンが衝突しているのが原因だと思います。以前の調査記事でも書いた内容です。
テスト周りの設定は何も変更していない中でこれが起きました。Dockerイメージが怪しいので見てみました。
すると、こんな感じで最終更新が11 hours agoになっています。これ、怪しいかも?(これ書いてるのは4/19の夜です)
Docker側のChromeのバージョンが上がったような気がします。先日のエラーのときはChrome version must be >= 64.0.3282.0
でしたから。
以前まではたまたまgem 'chromedriver-helper'
とDocker側が一致していたのだと思います。なので前記事でも試したように、CircleCI側ではchromedriver-helper
を使わないように分岐してあげ、CircleCI側でRebuild without Cache
したところビルドが通るようになりました。
group :test do
gem 'chromedriver-helper' unless ENV.key?('CIRCLECI')
end
この分岐は基本入れておいたほうが良さそうです。
また、CI側ではcacheを使わずに毎回bundle install
するのが無難です。Gemfile
にunless
による条件分岐があるせいで、キャッシュを使うとリポジトリのGemfile.lock
を見る(=chromedriverが入っている状態になる)なので、結局バージョンの不整合が起こり得ます。
追記
もうちょっと詳細にバージョンを調べてみました。
今回使ってたイメージはcircleci/ruby:2.4.3-node-browsers
です。
google-chrome
circleci@6fb99568c11a:~$ google-chrome --version
Google Chrome 64.0.3282.186
chromedriver
circleci@6fb99568c11a:~$ chromedriver
Starting ChromeDriver 2.38.551591 (bcc4a2cdef0f6b942b2bb8049068f65340fa2a69) on port 9515
ChromeDriverの対応
リリースノートには、
----------ChromeDriver v2.38 (2018-04-17)----------
Supports Chrome v65-67
とあるので、このバージョンの食い違いが原因でした。もしかするとChromeDriver gem側で入るバージョンが変わったのかもしれないです。
イメージ側のchromeに合わせるのであれば、CIでテストを流す前にchromedriver-update
でダウングレードさせればいけそうでした(ローカルのCircleCIで確認済)。
- run:
name: Downgrade chromedriver
command: |
bundle exec chromedriver-update 2.37
だけど、Rubyのバージョンアップなんかでイメージ側を変えるときにここの指定バージョン変えるのも面倒ですよねー。なのでひとまずはunlessで逃げることにして、問題でたら考えます。