kakakakakku blog

Weekly Tech Blog: Keep on Learning!

依存パッケージを更新するサービス「Dependabot」で Dockerfile の更新をチェックする

Dependabot は依存パッケージの更新を定期的にチェックし,更新があった場合にプルリクエストを作成してくれるサービスで,現時点で「Ruby, JavaScript, Python, PHP」など,多くのプログラミング言語がサポートされている.他にも「Go, .NET」などは BETA & ALPHA 版でサポートされている.依存パッケージの更新が重要なのはわかっていても,月に1回など,定期的なイベントとして実施しているチームも多いと思うので,Dependabot を使うメリットがある.

dependabot.com

Dependabot 以外だと GreenkeeperTachikoma.io を使っているチームもあるし,CircleCI などと組み合わせて独自実装で実現しているチームもある.あえて自動化はせず「チームメンバーの教育目的で手動で依存パッケージを更新する」というチームの話も聞いたことがある.

Docker サポートとは?

Dependabot がサポートしているプログラミング言語の中に「Docker」があり,具体的に何をしてくれるんだろう?と興味があったので,実際に試してみた.結論から言うと「Dockerfile のベースイメージに更新があったら Dockerfile を更新するプルリクエストを作成してくれる機能」だった.これは便利では!?

f:id:kakku22:20181012190403p:plain

インストール & 設定

Dependabot は GitHub Marketplace からインストールし,次にリポジトリを登録しておく.パブリックリポジトリなら無料で使えるので,すぐに試すことができる.あとはチェック設定をするだけで,今回は以下のように Dockerfile を管理しているリポジトリを登録してみた.Docker の場合,以下のオプションを追加で指定することができる.

  • Directory (optional)
  • Target branch (optional)
  • Automatic PR merging
    • Runtime dependency PRs to merge automatically
    • Development dependency PRs to merge automatically

なお,スケジュールは以下の3種類から選ぶことができる.

  • Daily updates
  • Weekly updates
  • Monthly updates

f:id:kakku22:20181012190354p:plain

プルリクエスト

以下のように alpine:3.7alpine:3.8 に更新するプルリクエストが作成された.常に最新バージョンを確認しているわけではないので,Dependabot が定期的にチェックしてくれるのは便利だった.常に最新という意味で alpine:latest を指定しているのであれば,プルリクエストは出ないと思う.

github.com

f:id:kakku22:20181012190342p:plain

ChatOps

Dependabot は ChatOps に対応しているので,プルリクエストのコメントで以下のようなメンションをすると,トリガーすることができる.今回は自分でプルリクエストをマージするのではなく @dependabot merge を使ってマージした.

  • @dependabot rebase
  • @dependabot merge
  • @dependabot cancel merge
  • @dependabot reopen
  • @dependabot ignore this [patch|minor|major] version
  • @dependabot ignore this dependency
  • @dependabot use these labels
  • @dependabot use these reviewers
  • @dependabot use these assignees
  • @dependabot use this milestone
  • @dependabot badge me

Flexible monorepo support

サイトには Flexible monorepo support と書いてあるけど,実際にディレクトリ / で登録しようとすると Repo must contain a Dockerfile. とエラーが出て使えなかった(なぜ?).今回はディレクトリごとに登録をした.

Using a monorepo? No problem - you can specify one or many directories within a repo for Dependabot to look for Dockerfiles in.

まとめ

  • 依存パッケージの更新を定期的にチェックしてくれる Dependabot は便利
  • Dependabot は Dockerfile もサポートしているので,ベースイメージの更新をチェックできる
  • すごく便利なので Dependabot がもっと人気になれば良いな!