nodejsがDockerでいきなりインストールできなくなった話

こんにちは。 エキサイト株式会社の三浦です。

ある日、久々にDockerのイメージを消してビルドした時、以前は普通にビルド出来ていたはずなのにできなくなっていた…。そんな経験はありませんか? 今回は、nodejsに関するそんなお話です。

Jenkinsの掃除と問題の発生

現在弊社の一部のプロジェクトでは、Jenkinsを使ってデプロイ等を行っています。 ただ、長期に渡ってJenkinsを使い続けていると無駄データが少しずつ溜まっていき、ストレージを圧迫して不具合が起きてしまうので、アラートが起きるとJenkins内の不要なDockerイメージ・コンテナの削除等を行うようにしています。

その日もJenkinsの一時停止・掃除を行い、無事再起動が終了してホッとしていたのですが、その後あるプロジェクトのデプロイができなくなる問題が発生しました。 原因究明をしていく中で、Jenkinsの再起動自体に問題があったわけではなく、Jenkins内のあるDockerイメージを削除したことで再ビルドが必要になり、その再ビルドがnodejsのインストール部分で詰まっていることが判明しました。

WARNING: The following packages cannot be authenticated!
  nodejs

当然、以前は普通に動いていたビルドです。 いわゆる、「何もしていないのに動かなくなった」が発生したのでした。

なにが問題だったのか

結論から言うと、これは GPG error と呼ばれる問題でした。 これは、パブリックキーの認証に失敗しているために起きるエラーです。

おそらく以前は自動的にやってくれていたものが、何かしらの環境や仕様の変更等によって自動では認証できなくなったものと考えられます。

解決方法は簡単で、自動で認証してくれないのであれば手動で認証するようにすれば問題ありません。

例えばnodejsのver.13をインストールしたい場合、

こちらを

ENV NODEJS_VERSION 13
RUN curl -sL https://deb.nodesource.com/setup_${NODEJS_VERSION}.x | bash - \
    && apt-get install -y nodejs

このようにすれば

ENV NODEJS_VERSION 13
RUN curl -sL https://deb.nodesource.com/setup_${NODEJS_VERSION}.x | bash - \
    && apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 1655A0AB68576280 \
    && apt-get update \
    && apt-get install -y nodejs

動くはずです。

まとめ

久々に実行してみると動かなかった…というのはたまに起きます。 焦らず、冷静に対応していきたいものです。

参考文献

UbuntuでGPG errorが出た時の対処法の紹介です。