Jenkins Configuration as Code:プラグインをどう扱うか


このブログ記事は、「Jenkins Configuration as Code」に関する6回シリーズの第3回です。

Configuration as Codeを使用すると、Jenkinsマスターの設定を簡潔で宣言的なYAMLファイルとして作成し、コードとしてSCMで管理することができます。しかし、管理が必要なのはJenkinsのコアだけではありません。便利な機能を利用するためにインストールされた多くのプラグインについても同様に管理が必要です。

プラグインのサポート

Jenkins Configuration as Code(JCasC)機能に関してよく訊ねられるのは、プラグインをサポートする方法です。

これは当然予想される質問です。Jenkinsエコシステムを改善しようと思うと、新しいモデルに対応できるよう、個々のプラグインは新鮮で新しいAPIで実装する必要があるからです。JenkinsfileパイプラインDSLが導入されるときなどが典型的です。

しかし、JCasCでは事情は異なります。設計上、JCasCはいくつかの合理的な規則に従ってさえいれば任意のJenkinsコンポーネントを設定できます 。JCasCは、実際には、Web ユーザーインターフェイス(UI)のデータバインディングメカニズムを利用しています。プラグインはこのメカニズムを使用して設定フォームを管理しています。この既存のメカニズムを利用することで、プラグインモデルを最新の状態に保つことができ、特殊なことはせずに、ほとんどのプラグインをサポートしていると言うことができます。このモデルに適合しないプラグインでは、定型的なUIデータバインド規則に合うよう多少の修正が必要になります。私たちは、Jenkinsのエコシステムがすみやかに移行し、これらの開発プラクティスを採用することを期待しています。

小数の極端に互換性のないプラグインへの対応として、JCasCの要件を実際の変則的なプラグインの設計に合わせるための専用のグルーコードを含む「サポート」モジュールも提供しています。

プラグインのインストール

専用のグルーコードなしでプラグインを設定できるのはありがたいことですが、まだプラグインをインストールして依存関係地獄を回避する必要が残っています。

Jenkins Configuration as Codeでは、プラグインのインストールも管理できます他のJenkinsコンポーネントと同様にPlugin Managerも設定可能であり、特殊なシナリオやプラグインのインストールの制約を管理する専用のコンフィギュレーターが含まれています。

Jenkins Configuration as Code 自体もプラグインであるため、最初にインストールする必要があることだけ気をつけてください。プラグインの要件を記述したYAML設定によってインストールをトリガーします。

plugins:
required:
  git: 3.6.0
  chucknorris: 1.0
  myplugin: http://repo.mycompany.com/jenkins/myplugin-1.0.jpi

Jenkins Configuration as Codeは、起動時にアップデートセンターからメタデータを取得し、要求されたプラグインバージョンをインストールします。メタデータをPlugin ManagerのWeb UIと比較し、インストールするプラグインのバージョンを選択することで、再現性を確保します。プラグインのインストールの再現性を考慮しなくてよい場合は、「latest」バージョンを使用することもできます。

Jenkins Configuration as Codeは、プラグインの依存関係を解決し、必要なプラグインをインストールします。ここでもまた、再現性を確保するために、インストールされたプラグインの完全なリストを含むshrinkwrapテキストファイルが作成されるため、同じ設定でJenkins Configuration as Codeを実行すれば、同じプラグインのセットがインストールされます。npmビルドツールからヒントを得たこのメカニズムは、依存関係の高度な宣言的抽象化を実現するだけでなく、プロジェクトが多様なエコシステムで再現性を確保するよう設定された場合でも、shrinkwrapファイルによって依存関係を固定できます。

最後に、インストールするプラグインの「バージョン」属性を完全なダウンロードURLで置き換えることができます。これは、フル機能版のJenkinsアップデートセンターにはホストされていないカスタムプラグインをインストールしたい場合、またはアップデートセンターがプラグインバージョンに関するメタデータを公開せず、最新のものしか公開しないために問題が発生する場合などに便利です。

では、この次は?

Jenkins Configuration as Codeプラグインの詳細については、プロジェクトのGitHubリポジトリをご覧ください。コミュニティやコントリビューターとチャットするには、私たちのgitterチャネルに参加してください。

また、Jenkins Configuration as Codeシリーズの次回もお見逃しなく…

Additional Resources

Part 1: Jenkins Configuration as Code: Look Ma, No Hands

Part 2: Jenkins Configuration as Code: Sensitive Data

(この記事は、CloudBees社 Blog 「Jenkins Configuration as Code: Plugins」2018年9月3日 Nicolas De Loof 投稿の翻訳記事です。)