【Jenkins】「このビルドはパラメータが必要です。」を消す

「[Applibot Advent Calendar 2023](https://qiita.com/advent-calendar/2023/applibot)」 20日目の記事になります。
前日は [@Hato_Levanca](https://twitter.com/hato_levanca) の [IUnityLinkerProcessorでCodeStrippingからコードを守る](https://zenn.dev/hatopopo_0113/articles/279d3b89c791d1) という記事でした。

# はじめに

私は普段の業務で Jenkins と戯れる事がしばしばあるのですが、いつも気になっている事がありました。

それは……

![スクリーンショット 2023-12-20 8.53.29.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/191059/dab67a40-64cb-f250-332c-b246a63595f0.png)

**「このビルドはパラメータが必要です。」の文言要らなくない？？？**
ということです。

これはビルドをパラメータ化した際に必ず表示されるものなのですが……

![スクリーンショット 2023-12-20 8.36.55.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/191059/de5a76b8-2d93-291a-b523-3a3ae603e0db.png)

そもそもパラメータのないビルドはこのように、パラメータの設定画面が表示されません。つまり、あの画面が表示されている時点で、パラメータが必要なことは自明なのです。

無駄な情報は省くことで、認知負荷が下がり本当に必要な事が伝わりやすくなります…よね？

ならばそう、消してしまおう！となるわけです。

# 案1： ブラウザ拡張機能で消す

さて問題の文言ですが、当然Jenkinsの設定にはあの文言を消すようなオプションは存在しません……

ではどうするか？まず一番手っ取り早いのは、ブラウザ側で非表示にしてしまうというものです。

https://www.tampermonkey.net/

これにはユーザーサイドスクリプトを使うのが良いでしょう。いわゆる Greasemonkey スクリプトです。指定ドメイン・URLにアクセスした際に任意の Javascript を実行することができます。

https://chromewebstore.google.com/detail/tampermonkey/dhdgffkkebhmkfjojejmpbldmpobfkfo?hl=ja

Chrome の場合は上記拡張機能を入れておきます。そして以下のスクリプトを設定します。

```javascript
// ==UserScript==
// @name         Jenkinsビルド画面シンプル化
// @version      2023-12-20
// @description  「このビルドはパラメータが必要です。」を消します
// @match        http://localhost:8080/job/*/build*
// @run-at       document-end
// ==/UserScript==

(function() {
    document.querySelector(".jenkins-description").style.display='none';
})();
```

該当の文言には `jenkins-description` というクラスが指定されているので、それを対象に CSS で非表示にしています。

また `@match` には対象としたい Jenkins のビルドパラメータ設定画面の URL をワイルドカードを使い全てのビルドを対象に指定しています。

`@run-at` は `document-end` を指定するのが良さそうです。（他のタイミングだと、Javascript 実行前に一瞬見えてしまったりする。）

![スクリーンショット 2023-12-20 9.02.58.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/191059/34713d64-cb64-11de-7a6f-283f25357518.png)

すると、このように「このビルドはパラメータが必要です。」の文言が非表示になります！やったぜ。

# 案2: Jenkins のソースコードを書き換える

しかし、このままでは文言が非表示になるのは自分のブラウザでのみですね……

他のチームメンバーにもこの幸せを届けたいけど、毎回拡張機能を入れてもらうのは手間もかかってしまう……

ならばどうするか？そう、 **Jenkins 側で文言を消してしまえばいい** ですね。

## Jenkinsのソースを読む

https://github.com/jenkinsci/jenkins

Jenkins は OSS ですので、当然ソースコードが公開されています。まずは該当の文言はどのように設定されているかを調べてみます。

![スクリーンショット 2023-12-20 9.13.39.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/191059/636600f4-8bc7-1a98-39e3-6aeaedc7c690.png)

Github 上で `「このビルドはパラメータが必要です。」` で検索をかけました。どうやら `model/ParametersDefinitionProperty/index_ja.properties` で定義されているようですね。該当のディレクトリを見ると、他の言語の設定も一緒に存在するようです。

![スクリーンショット 2023-12-20 9.18.10.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/191059/2c42e393-a4ee-2cca-1528-98eb41e8d1b4.png)

また、そのディレクトリには `index.jelly` というファイルも存在します。

https://commons.apache.org/proper/commons-jelly/

これは Apache Jelly という XML ベースのスクリプトエンジンのファイルですね。歴史を感じます。

どうやらこれがパラメータ付きビルドの設定画面を作るテンプレートであり、文言を参照しているようです。つまり、ここの記述を書き換えれば「このビルドはパラメータが必要です。」の文言を消すことができそうです。

## Jenkinsをビルドする

さて、やるべきことはわかったので、Jenkins をソースコードからビルドしていきましょう。

ビルド方法は [CONTRIBUTING.md](https://github.com/jenkinsci/jenkins/blob/master/CONTRIBUTING.md) に書いてあるので、読みながら進めて行きます。

まずは適当な場所に git clone を行います。

```bash
git clone git@github.com:jenkinsci/jenkins.git
cd jenkins
```

また Jenkins は maven を使っているので、無ければインストールしておきます。Mac なら brew で入れられます。

```bash
brew install maven
```

そしてビルドするのですが、その前に `index.jelly` の例の箇所を適当にコメントアウトしておきます。

```
-      <p class="jenkins-description">${%description}</p>
+      <!-- <p class="jenkins-description">${%description}</p> -->
```

ソースコードを書き換えたら、満を持して Jenkins をビルドします。[CONTRIBUTING.md](https://github.com/jenkinsci/jenkins/blob/master/CONTRIBUTING.md) にある通り、テストを行わずビルドのみ実行するには以下のコマンドを実行します。

```bash
mvn -am -pl war,bom -Pquick-build clean install
```

ビルドが成功すると `war/target/jenkins.war` に実行可能 jar が生成されるので、これを実行します。

```bash
java -jar ./war/target/jenkins.war
```

初回起動時の諸々が終わったら、実際にビルド設定を行って確認してみます。

![スクリーンショット 2023-12-20 9.02.58.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/191059/34713d64-cb64-11de-7a6f-283f25357518.png)

晴れて「このビルドはパラメータが必要です。」の文言を消すことができました！😄✌️

# おわりに

というわけで、「このビルドはパラメータが必要です。」を消す方法を２通り紹介しました。みなさんもやってみたくなりましたか？

……もちろん分かっていると思いますが

**こんなことのためだけに fork して改変することはおすすめしません！！！**

特に実務で使う場合は絶対 NG です。脆弱性が見つかった際のアップデートなど、保守も大変になりますし良いことありません。

とはいえ既存 OSS のコードを書き換えて遊ぶのは、色々知見もあるためオススメです。みなさんも気になる事があれば、気軽にコードを書き換えて試してみてください。

以上「[Applibot Advent Calendar 2023](https://qiita.com/advent-calendar/2023/applibot)」 20日目の記事でした。
明日は [@Tigger0414](https://qiita.com/Tigger0414) さんです。