あらしおブログ

技術ネタ中心の粗削りブログ

Jenkins のパイプラインでは従来のプラグインは使えない

Jenkins 2 のパイプラインを使い始めました。 いろいろ試してみて私が一番驚いたのは、これまでのプラグインはどうやら基本的に使えないということです。

この記事は下のような方を対象にしています。

  • Jenkins 1.x で簡単なジョブ設計の経験がある
  • パイプラインは未経験もしくはチュートリアルを終えたくらい

なお、私自身パイプラインに触れて間もないので間違いなどがあればご指摘いただけるとうれしいです。

パイプラインジョブ

パイプラインを使った経験が全くない方のために少し説明すると、 パイプラインジョブは、新規にジョブを作成するときに「パイプライン」という専用のジョブを選択して作成します。 それ以外の例えばフリースタイルジョブなどを選択すると、パイプラインを使うことはできません。 従来のジョブとは明確な違いがあります。

Pipeline as Code

パイプラインでは、Jenkinsfile と呼ばれるスクリプトに、 ジョブの設定も含めて全てコードでフローを記述するような設計思想 (Pipeline as Code) があります。 パイプライン用のプラグインというのは、Jenkinsfile から実行できる API を提供するかたちになります。 というわけで、これまでジョブ設定のページ(GUI)でポチポチ挙動を設定していた従来のプラグインAPI を提供していない限り使うことができません。

パイプライン用のプラグイン

パイプライン用のプラグインには、 〇〇 Pipeline Plugin とか 〇〇 Workflow Plugin などの名前がついていることが多いです。 メジャーなプラグインはすでにパイプライン用のプラグインも公開されている場合が多いでしょう。 数は少ないですが、有名なプラグインのパイプライン対応状況は以下で紹介されています。

pipeline-plugin/COMPATIBILITY.md at master · jenkinsci/pipeline-plugin · GitHub

その他のプラグインについてはプラグインの公式 wiki を参照するなどして、対応状況を確認するしかありません。 ややこしいことに、プラグインの名前からは元のプラグインのパイプライン版なのか、別物なのか判断できません。 例えば Docker PluginDocker Pipeline Plugin というプラグインがあります。 一見、前者のパイプライン版が後者のように見えますが、この 2 つは機能が違う別物です *1

プラグインの公式ページでパイプラインに対応しているか、必要な機能を実現するプラグインなのか、注意して確認しましょう。

パイプラインへの移植は慎重に

1.x の非パイプラインジョブをパイプラインに書き直すときは、プラグインの対応状況などを調査して そもそも実現可能か慎重に検討する必要があります。 Jenkins 2.x は 1.x と後方互換があるとされています *2 ので、無理して書き換える必要もないですが、 Pipeline as Code の波にのりたい方は心得ておいたほうがよさそうです。

それからパイプラインはまだまだ発展途上の技術といった印象で、 後方互換が失われるようなパイプラインスクリプトの仕様修正も見受けられます。 本格的な導入はもう少し枯れてからでも遅くないと思いました。

*1:詳細はまた別に機会に書きたいと思いますが、簡単にいうと、

Docker Plugin: Docker コンテナ自体をスレーブノードとして動的に立ち上げるプラグイン
Docker Pipeline Plugin: すでに登録済みのノード上で Docker を操作するプラグイン

*2:こちらに書いたように一部のプラグインが使えなくなる場合もあるようです・・・