Jenkinsプラグイン探訪 - JobConfigHistory

はじめに

「誰かがジョブの設定を誤って変更してしまったため、昨日まで問題なく動いていた自動ビルドが失敗してしまい、問題の特定に時間がかかってしまった」なんてことになると面倒です。
このような場合、「過去の設定」と「現在の設定」が簡便に比較できるようになっていると、問題点を短時間で特定できて助かります。
そこで、この記事では、このような状況の改善策の一手段としてJobConfigHistoryプラグインを紹介したいと思います。

なお、このプラグインは簡潔に述べると、

  • いつ
  • 誰が
  • 何の設定を
  • どのように変更したのか

を調査するための機能を提供します。

インストール

JobConfigHistory Pluginの名称と関連URLは次のとおりです。

プラグイン Wiki URL ダウンロード URL GitHub URL
JobConfigHistory Plugin http://wiki.jenkins-ci.org/display/JENKINS/JobConfigHistory+Plugin http://updates.jenkins-ci.org/download/plugins/jobConfigHistory/ https://github.com/jenkinsci/jobConfigHistory-plugin

機能概要 (デフォルト状態)

JobConfigHistoryプラグインの機能概要は次のとおりです。

  • ジョブの設定を保存すると、保存前の設定がジョブのconfig-historyディレクトリ内に格納されます。
  • ジョブの設定を何度か保存した後に、そのジョブの[Job Config History]メニューを押すと、そのジョブのみの変更履歴が一覧されます。

     

  • 複数のジョブの設定をそれぞれ何度か変更した後に、Jenkinsのトップ画面の[Job Config History]メニューを押すと、複数のジョブの変更履歴がまとめて一覧されます。

     

  • 変更履歴内の[View as XML]または[RAW]を押すと、その時点の設定ファイルの内容が表示されます。

     

  • 比較元と比較先のファイルを、それぞれ[File A]と[File B]で選択して、[Show Diffs]ボタンを押すと、Diff形式の差分情報が表示されます。

     
     

  • システムの設定ファイルは、デフォルト状態のままでは保存されません。

機能詳細

JobConfigHistoryプラグインの機能詳細は次のとおりです。

  • ジョブの設定ファイルを、指定した数だけ保存しておくことができます。
  • システムの設定ファイルを、指定した数だけ保存しておくことができます。
  • 設定が変更されると、変更者と変更時刻が変更後のファイルとともに保存されます。
  • ある時点の設定ファイルの内容を確認/取得することができます。
  • 同じ設定ファイルの任意の2つの時点の差分情報を見ることができます。
  • ジョブの設定ファイルは、ジョブの「config-historyディレクトリ内に保存されます。
  • システムの設定ファイルは、「$JENKINS_HOME/config-historyディレクトリ内に保存されます。
  • システムの設定ファイルを保存する場合は、システム設定で「Save system configuration changes」を選択する必要があります。
  • 例えば、ジョブの設定ファイルは、ジョブの設定画面を開いて[保存]ボタンを押しただけでも新たな履歴として保存されます。このような重複した履歴の保存を避ける場合は、システム設定で「Do not save duplicate history」を選択する必要があります。*1
  • デフォルト状態では、設定ファイルの保存数が制限されていません。保存数を制限する場合は、システム設定で「Save system configuration changes」の値を入力する必要があります。
  • 設定ファイルの格納先を変更することができます。この場合は、システム設定で「Root history folder」に相対パスまたは絶対パスで格納先のルートディレクトリを入力してください。相対パスで指定した場合は、「$JENKINS_HOME/相対パス」が格納先のディレクトリになります。絶対パスで指定した場合は、「絶対パス」そのものが格納先のディレクトリになります。これらのとき、システムの設定は「config-historyディレクトリ、ジョブの設定は「jobs/ジョブ名」ディレクトリに格納されます。
  • システムの設定ファイルのうち、保存しておく必要がないものは、システム設定の「System configuration exclude file pattern」にファイル名の正規表現パターンを記述して除外します。

利用のポイント

  • 重複した変更履歴が保存されてしまうと問題追跡がしにくくなりますので、システム設定で「Do not save duplicate history」を選択しておいた方がよいでしょう。*2
  • 好みによりますが、システム設定で「Save system configuration changes」を選択して、システムの設定ファイルも変更履歴の追跡対象にした方がよいでしょう。この場合、システムが関連する設定ファイルを自動的に変更する可能性があるので、「Do not save duplicate history」も選択しておくことをお奨めします。
  • ユーザ管理を有効にして、設定ファイルの変更者を特定できるようにするべきです。(ユーザ管理については、「操作権限をユーザ/グループ/ロール別に制御する」を参照してください)
  • デフォルト状態では、ジョブが削除されると変更履歴も削除されます。削除したジョブの設定ファイルを残しておきたい場合は、システム設定で「Root history folder」を変更してください。

おわりに

もっとキッチリ管理したい方は、構成管理ツールと連携して設定を保存した方がよいかと思います。しかし、どちらか一方の手段だけを使用するよりも、併用した方が簡便さと厳密さを兼ね備えられるので良いと思います。

また、このプラグインを使用するとJenkins単独で設定ファイルの変更履歴を管理できるので、構成管理ツールとの連携方法について悩む必要がなくなります。

*1:ただし、このシステム設定をJobConfigHistory 1.9で有効にしたところ、java.io.IOExceptionが発生して正常に動作しませんでした。

*2:ただし、JobConfigHistoryにバグがなく、期待どおりの動作をすればの話です。