LoginSignup
5
4

More than 3 years have passed since last update.

CircleCI で Node.js のバージョンが合わない(2019年11月)

Last updated at Posted at 2019-11-07

なにがおきた

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 にしちまえ!!!!

package.json
   "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 でタグの履歴の追い方がわからなかった。わかったら追記する。

.circleci/config.yml
     docker:
-      - image: circleci/ruby:2.6.5-node-browsers
+      - image: circleci/ruby@sha256:7b5eede6785426c86fd08328a2b98b54b7bf67cdbd7d579c9b792e11f6bea8ed

もしくは、自分でdockerfile書く。

5
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
4