1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

ApplibotAdvent Calendar 2023

Day 20

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

Last updated at Posted at 2023-12-20

Applibot Advent Calendar 2023」 20日目の記事になります。
前日は @Hato_LevancaIUnityLinkerProcessorでCodeStrippingからコードを守る という記事でした。

はじめに

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

それは……

スクリーンショット 2023-12-20 8.53.29.png

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

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

スクリーンショット 2023-12-20 8.36.55.png

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

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

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

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

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

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

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

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

// ==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-atdocument-end を指定するのが良さそうです。(他のタイミングだと、Javascript 実行前に一瞬見えてしまったりする。)

スクリーンショット 2023-12-20 9.02.58.png

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

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

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

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

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

Jenkinsのソースを読む

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

スクリーンショット 2023-12-20 9.13.39.png

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

スクリーンショット 2023-12-20 9.18.10.png

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

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

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

Jenkinsをビルドする

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

ビルド方法は CONTRIBUTING.md に書いてあるので、読みながら進めて行きます。

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

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

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

brew install maven

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

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

ソースコードを書き換えたら、満を持して Jenkins をビルドします。CONTRIBUTING.md にある通り、テストを行わずビルドのみ実行するには以下のコマンドを実行します。

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

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

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

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

スクリーンショット 2023-12-20 9.02.58.png

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

おわりに

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

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

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

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

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

以上「Applibot Advent Calendar 2023」 20日目の記事でした。
明日は @Tigger0414 さんです。

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?