これは何
Gitリポジトリ内のディレクトリをJenkins Jobのパラメタで選択したい場面に遭遇したときのメモです。
Jenkins1の設定について記述しています。
前提条件
プラグイン 拡張可能な選択 Extensible Choice Parameter
がインストールされていること。
Extensible Choice Parameter Plugin の File Choice Parameter で実現できそうだけど。。
Extensible Choice Parameter Plugin で選択できる File Choice Parameter は、システム上のファイルやディレクトリを選択肢として設定できます。
しかし、今回の環境では使えませんでした。
理由は、利用しているJenkins環境がJob管理サーバとJob実働サーバで分かれており、Jobを実行すると適宜空いているJob実働サーバに割り振られるため、Job管理サーバにcloneしたリポジトリは保持できませんでした。
今回はGroovyスクリプトで生成する選択肢 System Groovy Script Choice Parameterを利用します。
あらすじ
2つのJenkinsJobを作成します。
- Job1: Gitリポジトリを取得してディレクトリの内容をファイルに吐き出すジョブ。
- Job2: 最終的に動かしたいジョブ。Job1が吐き出したファイルを読み込み、パラメタにプルダウンメニューを表示する。
Job1の設定
- ソースコード管理でGitを選択。取得するリポジトリを設定。
- ビルド > ビルド手順の追加 でworkspaceからlsの出力結果をリダイレクトするシェルを追加
# 選択肢として表示したいディレクトリのパスを指定します
TARGET_PATH=${WORKSPACE}/target_directory
# ディレクトリ名にCHOICEを含むものを出力します。
echo 'ls -a ${TARGET_PATH} | grep ".*CHOICH.*"'
ls -a ${TARGET_PATH} | grep ".*CHOICH.*" > target.log
echo "cat target.log"
cat target.log
- ビルド後の処理 > ビルド後の処理の追加 で Copy files back to the job's workspace on the master node を選択して target.log を指定。
- ビルドトリガに定期的に実行 もしくは SCMポーリング を設定。
Job2の設定
- 拡張可能な選択 > 選択肢の取得方法 で Groovyスクリプトで生成する選択肢 を指定。
- Groovyスクリプトに下記を設定。[PATH_TO_WORKSPACE]の箇所は、Job1実行時のコンソール出力に [copy-to-slave] として出力された内容を設定してください。
def files = new File("/[PATH_TO_WORKSPACE]/target.log").readLines()
return files
以上でJob2のパラメタに選択肢として設定できるはず。