Jenkinsの「Active Choices」プラグインでビルドジョブのパラメーターをダイナミックに変更する

# 概要

Jenkins Pipelineでパラメーターの数が多くなると入力の手間がかかるので、使いやすいようにパラメーターの選択肢をAPIから取得したり、他のパラメーターの値を参照しダイナミックに変更したりしたいと思いました。
「Active Choices」のプラグインを利用すれば、Groovyスクリプトで色々なパラメーター変動が可能になります。

# プラグインのインストール

Manage Jenkins → Manage Plugins → Availableタブを選択 → 「Active Choices」を検索しプラグインをインストールします。
![001.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2980740/4cab404c-3270-b692-94d2-61020c01339c.png)

インストールが完了したら、ビルドジョブの設定画面に新たなパラメーター種類が3つ追加されます。
![002.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2980740/55396403-e273-926e-93af-298c9cc3e36a.png)

**1\. Active Choices パラメーター**
Groovyスクリプトでダイナミックにパラメター選択を表示することができます。

**2\. Active Choices Reactive パラメーター**
「Active Choices」のようにGroovyスクリプトでダイナミックに選択肢を表示することもできる上に、スクリプトの処理でユーザーが入力した他のパラメーターの値を参照することも可能です。

**3\. Active Choices Reactive Reference パラメーター**
機能としては「Active Choices Reactive」と同じですが、見た目をカスタムHTML等で見やすくすることができます。

# ジョブの設定

今回は1と2を利用してみます。

### 1\. Active Choices パラメーター

Add Parameter → Active Choices Parameter でパラメーターを追加します
![003.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2980740/c8cd6a3a-98f9-cfdf-b54d-b4e773f86aa8.png)

とりあえずシンプルなスクリプトを書いてみました。
表示方法も色々ありますが、今回はラジオボタンにします。
![004.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2980740/794ef21c-c059-e265-2239-d9afac501efc.png)

設定が適用されたら、ジョブ実行する時のパラメーター入力画面でラジオボタンが表示されます。
![005.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2980740/394f5558-8641-d59b-6cd1-269ac3f6309a.png)

次のサンプルでは、APIからパラメーターを取得してドロップダウンリストで表示してみたいと思います。

サンプルのために国一覧を返してくれる「REST Countries」APIを利用します。jsonのレスポンスには他のデーターも含まれますが、国名だけ表示したいので、Groovyスクリプトで自由にいじれるのがとても便利です。
![006.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2980740/31b6111a-e010-ddca-ba4d-58ea66ea3158.png)

上記の設定が適用されたら、APIから取得した国名の一覧をパラメーターとして選択できるようになります。
![007.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2980740/bbceaf29-17a6-1695-cb2e-4ce42ab4c530.png)

他に、gitブランチの一覧を取得すること等にもよく利用しています。gitブランチが多くなるとドロップダウンリストが長くなりますが、スクリプトで絞ることも可能ですので色々便利でいじるのも楽しいです。

### 2\. Active Choices Reactive パラメーター

Add Parameter → Active Choices Reactive Parameter でパラメーターを追加します。
先ほど１で追加したCONFIGパラメーターの入力を参照し、サーバー一覧をドロップダウンで表示したいと思います。
![008.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2980740/fd7b036f-e9ac-47bf-aaa2-6492ac231ef8.png)

【大事！】 CONFIGの値を参照するためには、その下部にある「Referenced parameters」という欄に「CONFIG」を入力しなければなりません。
複数パラメーターを参照したい時は「,」で複数パラメーター名を入力すればいけます（例：「CONFIG, COUNTRY, AAA, BBB」
![009.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2980740/36cc4371-59dc-c998-1653-bb5568557238.png)

設定が適応されると以下のようにSERVERのドロップダウンリストの中身が選択されたCONFIGによって変動することになります。
![g001.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2980740/ecf89162-ad86-0f82-fbac-7ec7185939bf.gif)

最後に、国一覧のサンプルも値を参照しActive Choices Reactive Parameterで利用してみます。
選択された国によって言語選択のチェックボックスが変動するようにします。このサンプルのための各国の言語一覧もREST Countries APIから取得します。
![010.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2980740/2bc85d2b-77a4-1833-885a-b05f05c41c1c.png)

忘れずに「Referenced parameters」の欄には参照したいCOUNTRYパラメーターを追加します。
![011.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2980740/5790cb62-1213-642e-f56c-7f957bd990f8.png)

上記の設定が適応されたら、ジョブ実行時のパラメーター入力画面では、国を選択した時に言語のチェックボックス内容が変動するようになります。
![g002.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2980740/32e6f95a-2d25-ffa4-b222-ff44b1108cfa.gif)

# 最後に

「Active Choices」プラグインのスクリプトは自由度が高く、日々の手動入力の手間を削減するために色々できるので便利です。
一方、API取得や他のパラメーター参照などにより画面のロードが長くなることと、パラメーター切り替え時に一瞬フリーズが感じてしまう現象もありますので、不要なパラメーターでは利用しないように気を付けていただければと思います。

# リンク

[Active Choices - Jenkins Plugins](https://plugins.jenkins.io/uno-choice/ "Active Choices Plugin")
[REST Countries](https://restcountries.com/ "REST Countries")