あらしおブログ

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

Jenkins 2 にしたら Parameterized Trigger Plugin が動かなくなった

Jenkins 1.62 から Jenkins 2.23 にアップデートしてみました。 既存のジョブで動作確認したところ、 Parameterized Trigger Plugin というプラグインで、上流プロジェクトから下流プロジェクトに パラメータを渡せなくなっていました。日本語の記事がなかなか見つからなかったので 原因や回避策についてまとめました。

原因

原因は Jenkins のセキュリティポリシーが変更されたためでした。 Jenkins の公式ブログによると、セキュリティ上の理由から、 あるプロジェクトで未定義のパラメータを、上流プロジェクトなど外部から渡すことが できなくなったようです。 これってかなりインパクトがある変更だと思うのですが さらっとやってしまうのですね・・・。

このセキュリティポリシーの変更は以下のバージョンから影響を受けます。

  • Jenkins 1.651.2 以降
  • Jenkins 2.3 以降

影響があるプラグイン

影響を受けるプラグインは Parameterized Trigger Plugin だけではありません。 公式 wiki にまとめられているので、 Parameterized Trigger Plugin 以外にも使っているプラグインがないか確認しておきましょう。 ざっと見た感じでは GitHub pull request builder plugin なども利用者が多いようです。

ちなみに Parameterized Trigger Plugin の場合、パラメータが下流のプロジェクトに 渡らないので、下流プロジェクトでパラメータを参照しても空文字になっています。 空文字の場合ジョブ自体がエラーになるようなジョブ設計の場合はまだ良いのですが、 「空文字なら特定の値を代入する」などの処理があると、エラーにもならずジョブは成功するのに 全然違うものをビルドしていたりするので注意が必要です。

回避策

セキュリティ上のリスクを許容した上で、 今までのプロジェクトの設定を変えずに手っ取り早く回避するには、 システムプロパティでこのセキュリティポリシーを無効にする方法があります。 Jenkins 起動時の JAVA オプションで -Dhudson.model.ParametersAction.keepUndefinedParameters=true を渡してやればよいです。

以下は CentOS での具体例です。  

  1. /etc/sysconfig/jenkins で、JENKINS_JAVA_OPTIONS にシステムプロパティを追記
    JENKINS_JAVA_OPTIONS="-Djava.awt.headless=true -Dhudson.model.ParametersAction.keepUndefinedParameters=true"
  2. Jenkins を再起動
    sudo service jenkins restart