【CloudBees CI奮闘記】第4章:プラグインを効率的に管理する


Jenkinsは世界中で人気があるフリーでオープンソースの自動化サーバーです。そのため気軽に運用を開始することができ、Jenkinsの豊富な機能やプラグインを用いることで環境を発展させていくことが可能です。その一方でJenkinsの運用を進めていくうちに課題も発生してくることがあります。
CloudBees CI奮闘記として、Jenkinsを利用していると発生し得る課題の紹介をしながら、それらを解消するエンタープライズ機能を強化した有償版JenkinsであるCloudBees CIの紹介を行っていきます。
本ブログでは、CloudBees CIと区別するためにhttps://www.jenkins.io/のJenkinsをOSS Jenkinsと記載します。

そもそも「CloudBees CIとは?」といったことや、Jenkinsの利用上の課題についてはこちらのブログより確認ください。

はじめに

登場人物

吉田:転職したてのエンジニア。前職では積極的にCIやCDに取り組みながら開発をしていた。CI奮闘記では服部に色々アドバイスを行った。

服部:元々CIやJenkinsについては言葉は聞いたことがある程度であったが、吉田からのサポートをうけつつCI環境の導入担当として日々奮闘している。CI奮闘記では自部署にJenkinsを導入した。

プラグイン管理

あら服部さん、そんな難しい顔してどうしたの?ほかの部署のJenkinsを確認しに行くといっていなかった?

あ、吉田さん。そうなんですが…聞いてくださいよ!Jenkinsの管理画面を確認したら、プラグインが全然更新されてなくって、「Jenkinsの管理」の画面に警告がずらずらと…。

黄色の注意のこと?非推奨になったプラグインが黄色で表示されているのはよく見るけれど…。このプラグインに依存しているプラグインを利用していたりしたら、表示されるのはある程度仕方がないんじゃない?

deprecated扱いになったプラグイン

いや、黄色の注意ではなく赤いセキュリティ警告でした。

赤い警告が出力されている状態。JenkinsのSecurity Advisoriesで公開されたセキュリティ勧告のため、パージョンアップを推奨

それは解消しないといけないわね。セキュリティ脆弱性などは特に早く対応してほしいわ。

あと、僕もよく知らないプラグインも使われていたりもして…。「公式からダウンロードしたから平気だろう」と言っていたのですが、調べてみるとダウンロード数も1000件以下、5年以上メンテナンスされていないプラグインで、ちょっと安全性が気になります。

開発者が自由にプラグインをインストールしてカスタマイズできるのはよいことだけど、あまりに自由になんでもしてしまうのは問題よね。

そうですよね。Jenkinsはツールの特性上ソースコードに深くかかわることが多いので、セキュリティ面は気にしないといけないのに。

それじゃあ今回はCloudBees CIでプラグインに関して管理できる機能が無いか探してみましょう。

プラグイン管理でよくある課題

プラグインに関わる問題点について、以下にいくつか抜粋して記載します。
記載する課題はJenkinsごとに対応する必要があります。例えば以下に記載する「1.アップデート後の安定性・挙動が不安について」に関して、プラグインの組み合わせ毎に条件が変わるため、稼働しているすべてのJenkinsごとに検証が必要です。

1.アップデート後の安定性・挙動が不安

アップデート後に従来と同じ様に安定稼働するかが不安で「現状動作しているし…」と先延ばしにしている方も多くいるのではないでしょうか。Jenkinsに限った話ではありませんが、プラグインのアップデートで「バグが発生するのではないか?」「挙動が安定しなくなるのではないか?」といった不安はつきものです。
検証環境を作成し、アップデート後の環境でも正しく動作するかどうか検証を行ってからアップデートをすればよいですが、Jenkinsにインストールされているプラグインの数が多かったり、管理者側も検証範囲がわかりづらかったり、なかなか検証の工数が確保できなかったり、と後回しになっていることも多いでしょう。

2.アップデート自体を手間と感じる

そもそもアップデート自体が手間と感じる方もいるでしょう。
Jenkinsのプラグインにはプラグイン同士の依存関係やJenkinsの要求バージョンがあります。それぞれ各プラグインの「Dependencies」タブで確認できます。

一見難しそう?

ただ、プラグインをアップデートすると依存関係のあるプラグインもあわせてアップデートされますし、Jenkinsの要求バージョンについても、要求バージョンを満たしていない古いJenkinsを利用している場合、プラグインのアップデート対象として表示されません。そのため、そこまで手間ではないはずですが、仕組みがわかっていない場合、ややこしく感じるかもしれません。

3.自由にプラグインをインストールできる(できてしまう)

Jenkinsの良いところとして豊富なプラグインによるカスタマイズ性の高さが挙げられます。2023/6/29現在,1800を超えるプラグインが公開されており、これらのプラグインは自由にインストールできます。
利用者に応じて機能を拡張できることはメリットですが、その一方でリスクもあります。公開されているプラグインは玉石混交であり、長期間にわたりメンテナンスされていないプラグインや、中にはセキュリティリスクが発見されているプラグイン等もあります。
例えば「File System SCM」はセキュリティ脆弱性が報告されています。

1800を超えるプラグインからインストール可能なプラグインリストを作成するのは手間がかかります。
また、プラグインのインストールの都度、確認や申請をするといったことを行っていては利便性が著しく低下するでしょう。

4.利用されていないプラグインが放置されている

大量にインストールされたプラグインはJenkinsの速度劣化を招きます。
検証目的でインストールし、その後利用しなくなったまま放置されているプラグインは無効化しておいた方が良いでしょう。たた、すべてのJenkinsのプラグインの利用状況の調査を実施するとなった場合、管理者は「どこから手を付けたものか…」と腕を組むに違いありません。

CloudBees CIでの解決

OSS Jenkinsを利用しているとこのような問題に直面します。また、OSS Jenkinsの場合、標準機能でこれらの問題に対応するのは難しいです。単体のJenkinsの管理でも大変ですが、複数Jenkinsにまたがっての管理になると管理しきれない場合も出てくるでしょう。
今回はそれぞれの問題点に対して、CloudBees CIでのプラグイン管理の方法を紹介します。

1.CloudBees Assurance Programによって、事前にCloudBeesで検証済みのプラグインを利用する

CloudBees Assurance Programはプラグインが企業で利用する品質(enterprise-grade)を満たしているかどうかをCloudBeesが検証する仕組みです。
参照元機能ページ:CloudBees Assurance Program
各プラグインをTier1~Tier3の3つの層に分類し、それぞれのサポートポリシーに応じた検証が行われています。

Tier説明
Tier 1 (Verified/proprietary)CloudBees Assurance Programを通じて、重要なユースケースを満たし、サポートされているCloudBees製品と組み合わせて使用した場合に、安心して使用できることが確認されたプラグインです。
Tier 2 (Compatible)品質に定評があるが、サポートされているCloudBees製品でエンドツーエンドのテストを受けていないプラグイン。
Tier 3 (Community-maintained and unknown plugins)CloudBeesが検証していないプラグイン。これらのプラグインは安定性が不明なため、特定のインストールでは注意して使用する必要があります。これらのプラグインは商業的に妥当なベースでサポートされています。これは通常、プラグインの使用と診断に関するガイダンスを意味しますが、CloudBeesサポートSLAの対象ではありません。
CloudBees Assurance Programより引用

各プラグインがどのTierに該当するかはCloudBees CI Pluginsで確認できます。
各プラグインのTierの確認方法についてはFinding the CloudBees support tier for a plugin on Plugin Managerのページをご確認ください。

例えばJenkinsからメールを送信するためによく利用されるEmail ExtensionはTier 2です。

「1.アップデート後の安定性・挙動が不安」ということについてはCloudBees Assurance ProgramのTier1、Tier2のプラグインについては安心してそのままアップデートを行い、Tier3のプラグインに関しては必要に応じて検証ののちアップデートするという対応をとることができます。

2.Beekeeper Upgrade Assistantを用いてアップデートする

Beekeeper Upgrade Assistant機能を用いることで、Jenkinsの再起動時をするだけでプラグインのアップデートをすることが可能です。
参照元機能ページ:Upgrading plugins with Beekeeper Upgrade Assistant

対象のコントローラーにチェックを入れると、OperationsCenterやClientControllerの再起動時に推奨設定より古いバージョンでインストールされているプラグインをすべてアップデートします。そのため、ClientControllerのバージョンアップ時には自動的にプラグインのバージョンも推奨設定のバージョンにアップデートされます。
アップデート対象のプラグインと各プラグインの推奨設定については、上記で紹介したCloudBees Assurance Programで検証済みのバージョンになります。

アップデート対象のプラグインにCloudBees Assurance Program管理対象以外のプラグインを追加したい、CloudBees Assurance Program管理対象のプラグインのバージョンを指定したいという場合は、Plugin Catalogという機能が使えます。
参照元機能ページ:Installing non-CAP plugins with plugin catalogs
作成したPlugin CatalogsはOperationsCenterから管理対象のClientControllerにJenkinsCLIやブラウザ上から配信できます。

OperationsCenterから管理対象のClientControllerにアクセスし設定が可能。

3.CloudBees Assurance Programとplugin catalogsを活用する

CloudBees Assurance Programを用いると、プラグインのインストール画面でTier 1 (Verified/proprietary)、Tier 2 (Compatible)かどうかが一目で分かるようになります。

Tier3のものは「Verified」や「Compatible」のアイコンが表示されません。

運用上、この「Verified」「Compatible」とついているTier1、Tier2のプラグインのみ利用し、Tier3のものはJenkins管理者側で確認し、Plugin catalogに追加するという運用にすれば、例えばプラグインによるセキュリティ上のリスクも軽減できるでしょう。

4.CloudBees Plugin Usage Analyzerを利用し、プラグインの利用状況を確認する

CloudBees Plugin Usage Analyzerはプラグインの利用状況のレポートを週次で作成します。
参照元機能ページ:How to determine if a plugin is in use
レポートファイルはJson形式でのダウンロードも可能です。レポートは以下の項目になります。

  • インストールされているプラ​​グインの名前
  • 検出された使用回数
  • 各プラグインが使用されている場所の名前
  • プロジェクトで使用された場合、最後に使用された日時
レポート例

作成されたレポートを確認することで、プラグインの利用状況の把握にかかる労力の削減ができます。

まとめ

今回はプラグインに関わる機能を4つ紹介しました。

  • 機能名CloudBees Assurance Program
  • 概要:CloudBees社による、プラグインがエンタープライズグレードであることをテストおよび検証する厳密な審査プロセス。
  • 具体的な活用例:Tier1、Tier2のCloudBees Assurance Programで指定バージョンのプラグインを利用することで、安定してプラグインを利用できる。
  • 機能名Plugin Catalog
  • 概要:プラグインとその関連バージョンを指定することができる。CloudBees Assurance Programに登録済みのプラグインについては、対象バージョンを上書きできる。
  • 具体的な活用例:独自で検証したプラグインをCloudBees Assurance Programの管理対象のリストに追加し、プラグインとプラグインのバージョンを制御する。
  • 機能名Beekeeper Upgrade Assistant
  • 概要:管理者がプラグインのバージョンを管理し、CloudBees Assurance Program の推奨プラグインとバージョンのセットへの準拠を強制する。
  • 具体的な活用例:ClientControllerを再起動時、例えばClientControllerのバージョンアップ時に、利用者は意識することなくプラグインが推奨のバージョンにアップデートされる。
  • 機能名CloudBees Plugin Usage Analyzer
  • 概要:インストールされたプラグインがどこで使用されているかを示す週次レポートを自動的に生成します。
  • 具体的な活用例:レポートを確認し、長期間利用されていないプラグインを無効化をする。

今回紹介した機能以外にも、プラグインの管理に便利な機能があります。
Getting started with plugin management
ぜひCloudBees CIを導入し、管理がしやすく安定稼働するJenkins環境を手に入れてください。

CloudBees CI奮闘記一覧

Jenkinsのよくある課題とCIツール比較

Jenkinsのよくある課題とCIツール比較