寒い日が続きますね。
ところで皆さんはGitHubのdependabotは使っていますでしょうか?
リポジトリをスキャンして、使っているライブラリやパッケージの脆弱性をお知らせしてくれるサービスですね。
そのdependabotでちょっとした問題を調べて解決したので記録しておこうと思います。
題して「特定のDockerタグを無視する設定の書き方」です。
dependabotの概要や初期設定などはこの記事ではちょっと飛ばしますのでご了承ください🙇
dependabotはDockerタグにも対応していて、脆弱性対応された新しいバージョンタグがある場合はそれを出すようになっています。
例えばリポジトリの docker/Dockerfile
をスキャン対象にする場合、コミットしておく設定ファイル .github/dependabot.yml
はこのようになります。
version: 2
updates:
- package-ecosystem: "docker"
directory: "/docker"
さて、基本的にはdependabotはメジャーバージョンアップも含めて最新バージョンにアップデートさせるように動作するようです。
そのため、Dokerfileで node:14.x.x
イメージを使っている場合
このように node:15
系にアップデートしなよ!というPRが作成されるのです。
でもNode.jsはバージョン14はLTSで15はLTSじゃない・・・更新するなら14系の最新にしてほしい!
というわけで、「Dockerタグの特定バージョンを無視する設定」を調べて入れてみました。
こちらのドキュメントによると、あるバージョンへの更新を無視するためにはdependabot.ymlにそのバージョンを明記すればいいのですが、
範囲を定義する場合は、パッケージマネージャーの標準パターンを使用します
Dockerタグの標準パターンって何だ・・・?🤔
結局わからなかったのでソースを見てみたところ、判定しているのはおそらくこのあたり。
dependabot-core/update_checker.rb at main · dependabot/dependabot-core · GitHub
バージョンの取り扱いに使っているのは Gem::Versionクラス のようです。
class Gem::Version (Ruby 3.0.0 リファレンスマニュアル)
ということはGemfileでバージョンを指定するのと同じ記法で良さそうですね。
dependabot.ymlはこうなりました。
version: 2
updates:
- package-ecosystem: "docker"
directory: "/docker"
ignore:
- dependency-name: "node"
versions: ["~>15.0"]
# nodeイメージの 15.x 系は無視
これでnodeイメージは 15.x
を対象外にして更新するようになりました。
新しく作られるPRは14系の範囲でバージョンアップするものになっていますね。