業務で依存関係の更新を自動化するためにdependabotを導入したが、
絶妙に痒いところに手が届かないところがあってつらいな、と思っていました。
代替案としてrenovateが良さそうだなと思いつつ、 その後触手が伸びてませんでしたが、ちょっと触ってみようかと思い立ちました。
今回は、導入〜実行のはじめの一歩ぐらいの軽い内容を確認してみます。
なんとなく全体感を掴めたら良いな、と。
Renovateとは
公式:URL
プロジェクト内の依存関係の更新を自動化できるツール。
使用中のパッケージを自動で監視して、より新しいパッケージが検出されたパッケージの更新を提示するpr・issueを自動で作成してくれます。
導入方法
以下のいずれかの方法で実行可能だそうです。
- npm package(renovate)
- docker image(renovate/renovate)
- Github App(renovate)
今回はまずRenovateの動作を確認することを目的としておりますが、
「3. Github App」がお手軽そうだったので、こちらで始めてみます。
Github App(renovate)
1. renovate をinstall
Github App > から、アプリケーションをinstallします。
ページ下部に「Install it for free」ボタンがあるので、クリック。
ページ遷移後、設定画面が出てきました。
今回は、Renovateの挙動確認用に用意したリポジトリ(test-renovate)のみに適用したいので、 「Only select rpositories」をチェックして、ブルダウンで上記のリポジトリを選択。
続いて、以下の2点を設定しました。 (スクショと取り忘れました…)
※ 「依存性の管理対象に更新があるかどうか検査すること=スキャン」と呼称しているため、以降では同操作をスキャンと記載する。
まずは、modeの設定
- mode
- silent
- renovate対象Repositoryについて、スキャンするが、issueやpull requestは作成しない。
- interactive
- renovate対象Repositoryについて、スキャンした上で、issueやpull requestを自動作成する。
- silent
ひとまず、pull request も作成して欲しいので、後者の interactive modeを選択。
続いて、Repository onboardingの設定。
- Repository onboarding
- onboarding pull request
- renovate 側がonboarding用のprを自動生成する。
- このprをマージ後、初めてスキャンが開始する
- Scan repos with config file
- renovate 設定ファイル(default:renovate.json ? )が存在するRepositoryのみスキャン対象とする
- Scan all repos
- renovate設定ファイルの有無に応じて挙動が変わるらしい
- 存在する場合
- renovate 設定ファイルを使用して、対象Repository をスキャンする
- 存在しない場合
- renovate 設定ファイルを新規設定して、対象Repository をスキャンする
- 存在する場合
- renovate設定ファイルの有無に応じて挙動が変わるらしい
- onboarding pull request
今回は、初回であり、なおかつonboarding用のprも作成して欲しいので「Onboarding pull request」を選択しました。
💡 上記の設定は「https://developer.mend.io/github/username」の自身のページからいつでも変更可能
まとめると、以下通り初期設定しました。
- Only select repositories
- mode:interactive
- Repository onboarding:Onboarding pull request
上記の設定をした上で、renovateをinstall 完了すると、設定通りonboarding prが作成されました。
onboarding prについて
以下がrenovateにより自動生成されたonboarding prです。
上記prの中身を軽く見てみます。
- Files changed
renovateの設定ファイル(renovate.json)が作成されている。
(ただし、このデフォルトで適用される設定も自由に設定できるらしい。方法はあまり調べていないので、別の機会に譲る)
- Conversation
概要は以下の通り
## 概要
- Renovate を有効するには、このprをマージしてください。
- 無効にするには、closeしてください。
## 検出されたパッケージファイル
- docker-compose.yml (docker-compose)
- docker/nginx/Dockerfile (dockerfile)
- docker/php-fpm/Dockerfile (dockerfile)
- docker/postgres/Dockerfile (dockerfile)
## 設定概要
デフォルトのコンフィグのプリセットに基づき、Renovateは以下のことを行います。
- このPRがマージされた時のみ、依存関係の更新を開始します。
- Renovate 依存性ダッシュボードの作成を有効にする
***
* Renovateが依存関係をアップグレードする方法を変更したい場合、このブランチのrenovate.jsonにカスタム設定を追加してください。
Renovateは次回実行時にPull Requestの記述を更新します。
## 期待されること
現在の設定の場合、以下3つのprが作成されます。
***
* ブランチの作成は1時間に2つまでに制限されるので、CIリソースを圧迫したり、プロジェクトに負担をかけたりすることはありません。詳しくはprhourlylimitのドキュメントを参照してください。
pr の内容をまとめると、
renovateの推奨設定が設定された設定ファイル(renovate.json)が自動生成されて、
このprをマージされ次第、pr説明文記載の設定でrenovateによるスキャンが開始される、ということみたいです。
pr内容の充実さに驚きました。
- 自動的にパッケージファイルが検出される
- 自動生成された設定ファイル(renovate.json)がどのような設定になっているのか、自然言語で説明してくれている
- renovateのスキャンにより作成されるprが提示されている。
等
さらに、
デフォルトの設定が気に入らない場合、上記ブランチのrenovate.jsonにカスタム設定を追加 & renovateを再実行すれば、
prの内容を修正後の設定に応じた内容に書き換えてくれる様です。
ということは、 好みの設定するまで、このprでrenovate.jsonの修正を加えて、デバック・調整が可能ということですね。
とても親切なんですね。
特に修正せずprをマージすると、
しばらく時間をおいた後、以下の通り自動的にrenovateによりパッケージ更新用のprが作成されました!!!
折角なので、prを覗いてみます。
pr を覗いてみる
「Update nginx Docker tag to v1.25.0」のprを覗いてみます。
- Files changed
なるほど、nginxのminor updateが提示されています。
- Conversation
概要は以下の通り
## 概要
このprは以下のupdateを含んでいます。
- nginx: minor version up (1.24.0-bussleye → 1.25.0-bussleye)
## 設定
- スケジュール:ブランチ作成 - 随時(スケジュール定義なし)、自動マージ - 随時(スケジュール定義なし
- オートマージ:コンフィグで無効になっています。問題なければ手動でマージしてください。
- リベース:PRがコンフリクトした場合、またはリベース/リトライのチェックボックスにチェックを入れた場合
- ignore:このPRを閉じれば、二度とこの更新についてリマインドされません
---
✅ prをリベース/リトライ したい場合、ここにチェック
---
なるほど。
onboarding prにおいて、renovete.json > extends > config:recommends
になっていましたが、
その場合、上記「設定」 に書かれているような内容になるということですね。
Dependency dashboard について
実際に運用で使うかどうかはともかく、
便利だなーと思ったDependency dashboardについて。
topページ
renovateがinstallされているRepositoryの一覧が確認できます。
個別Repositoryページ
ここが結構豊富で良いです。
概要は以下の通り
## Recent jobs
renovateによるスキャン履歴一覧
## Renovate Updates
検知された依存性について
### open
検知された依存性のうち、prが作成済のもの。
強制的にリトライ・リベースしたい場合には、チェックした上で「Create/Rebase」をクリック。
### Rate-limited
検知された依存性のうち、レート制限によりprの作成が見送られたもの。
強制的にprを作成したい場合には、チェックした上で「Create/Rebase」をクリック。
---
✅ Create/Rebase
## Detected Dependencies(検出された依存性)
renovateのスキャンにより検出された依存性更新の一覧
renovate履歴がまとまっていて、だいぶ良い感じですね。
Rate-limitedの動きを確認するために、作成済みのpr(nginx)を一つcloseしてみると、
renovateのスキャンが自動で開始された後、以下の様な表記となりました。
Renovate Updates の表示が変わっています。
- open
- Rate-limited
- Ignored or Blocked
「Ignored or Blocked」 の機能が特に良いですね。
まとめ(感想)
renovateの本当に触りの部分を触っただけですが、ここまででも、仕組みの大枠は理解できました。
デフォルトの設定を適用しただけなので、
次は以下の様な実用的な設定を適用してみたい。
- Schedule
- Group
- prではなくdraftを作成
参考
Renovateによるライブラリの定期アップデート|【技業LOG】技術者が紹介するNTTPCのテクノロジー|【公式】NTTPC
コメント