なにがおきた
CircleCIのruby:2.6.5-node-browsers
を使ったジョブでこんなエラーが出た。
yarn install v1.19.1
[1/5] Validating package.json...
error hogehoge@0.1.0: The engine "node" is incompatible with this module. Expected version "~10.16.0". Got "12.13.0"
error Found incompatible module.
package.jsonでは 10.16.0
が指定されてるけど 12.13.0
が使われてるとのこと。
原因
さっき(2019-11-07現在) CircleCIのdockerイメージの Node のバージョンが軒並み上げられた。 この更新で-node
とかついてるイメージのバージョンが 10.16.3
-> 12.13.0
になった。10月21日に12系がLTSになったかららしい。(Convenience Image Node Variants will be updated to v12.x on November 4th - CircleCI Discuss)
対策
12.13.0
にしちまえ!!!!
"engines": {
- "node": "~10.16.0"
+ "node": "~12.13.0"
},
もしくは、うまくいってた時のdocker image id を指定する
のっぴきならない理由で 10.16
のままにする場合、ベストプラクティス - Pre-Built CircleCI Docker Images にある方法でうまくいった。
また、使用するイメージを特定の SHA に至るまで指定することができます。 これにより、変更が加えられるまでの間、特定のイメージをテストすることができます。
使用するイメージを細かく指定するには、以下の 2つの方法があります。
- タグを使用してイメージのバージョンや OS を指定する
- Docker イメージ ID を使用してバージョンを指定する
うまくいってた時のCircleCIのジョブのログを確認するとその時に使われてたDockerイメージIDが出力されてるのでそれをコピって指定したら古いのが使われた。以下は ruby:2.6.5-node-browsers
の例。しばらくこれでしのいでおいて、その間に12系を使えるようにするのがよさそう。
Dockerhub でタグの履歴の追い方がわからなかった。わかったら追記する。
docker:
- - image: circleci/ruby:2.6.5-node-browsers
+ - image: circleci/ruby@sha256:7b5eede6785426c86fd08328a2b98b54b7bf67cdbd7d579c9b792e11f6bea8ed
もしくは、自分でdockerfile書く。