Werclerのプロセスが失敗
連休明けのとある日、いつものようにgit pushすると、CIに使っているWerckerからエラー通知が届いた。
内容を見てみるとspecにたどり着く以前の、テスト用DBを作成するステップでエラーになっていた。
エラーメッセージは「Mysql2::Error: Authentication plugin 'caching_sha2_password' cannot be loaded」。
Mysql2::Error: Authentication plugin 'caching_sha2_password' cannot be loaded: /usr/lib/mysql/plugin/caching_sha2_password.so: cannot open shared object file: No such file or directory
~(略)~
/pipeline/cache/bundle-install/ruby/2.3.0/gems/rake-11.3.0/exe/rake:27:in `<top (required)>'
Tasks: TOP => db:migrate:reset => db:drop => db:check_protected_environments
(See full trace by running task with --trace)
Mysql2::Error: Authentication plugin 'caching_sha2_password' cannot be loaded
エラーメッセージでぐぐってみると、1つのブログに行き着いた。
MySQL8.0.4からはデフォルトの認証方式が"caching_sha2_password"に変わったとのこと。
サーバー側とクライアント側でそれぞれこの認証方式をサポートしていない場合、このエラーが発生するらしい。
このブログではmy.cnfにて"default_authentication_plugin"を設定することでこの問題を解決する
方法が説明されている。
MySQLイメージが更新されていた
DockerのMySQLのレポジトリを見てみると、2日前に更新されたと記載されていた。
最新バージョンは8.0.11。
おそらくこのアップデートでMySQLのデフォルトバージョンが8になったことで、このエラーが発生するようになったのではなかろうか。
wercker.ymlの設定を変更
CIにつかうMySQLのバージョンを以前の5系に指定してやればこの問題を回避できそう。
ということで、werckerの設定を変更。
tagでバージョン情報を明示したことで解決。
services:
- id: mysql
tag: 5.6 #これを追加
env:
MYSQL_USER: testuser
...