ビルドする度に毎回、Jenkinsの設定でビルド対象のブランチを変更するのがめんどくさい。
こんな感じで、ビルドボタンを押したあと、ブランチ一覧が出てきて、それを選択して指定できたら便利だなあ…。
ブランチ一覧も、Gitリポジトリから自動的に生成できたらいいなあ…。
ということでJenkinsの環境を整えた。
以下、Gitで管理されたプロジェクトをJenkinsでビルドするとき、リモートリポジトリ(中央リポジトリ)から動的にブランチ一覧を生成し、一覧からブランチを指定してビルドする方法です。
こんな感じで、ビルドボタンを押したあと、ブランチ一覧が出てきて、それを選択して指定できたら便利だなあ…。
ブランチ一覧も、Gitリポジトリから自動的に生成できたらいいなあ…。
ということでJenkinsの環境を整えた。
以下、Gitで管理されたプロジェクトをJenkinsでビルドするとき、リモートリポジトリ(中央リポジトリ)から動的にブランチ一覧を生成し、一覧からブランチを指定してビルドする方法です。
やりたいこと
- ビルドボタンを押したあと、どのブランチでビルドするか選びたい
- ブランチ一覧はGitリポジトリから自動的に生成したい
前提
- Git pluginを使って、Gitプロジェクトのビルドができる
使ったプラグイン
- Extended Choice Parameter Plug-In (version 0.30)
似た名前のプラグインで、Extensible Choice Parameter pluginというものがあるので注意。こちらも便利だけど、本題から外れるので紹介しない。
1-1. ブランチ一覧ファイルのフォーマット
以下のようなフォーマットでブランチ一覧ファイルを生成することで、ビルド時に選択肢として使用することができる。
フォーマットは次のようになっている:
フォーマットは次のようになっている:
- 一行は次のように構成される
- キー名 = [カンマ区切りで要素を羅列]
- 右辺の要素が選択肢を構成する
- 左辺のキー名は、選択肢を呼び出すときに使用する
1-2. ブランチ一覧ファイルの生成
肝心のブランチ一覧ファイルは `git ls-remote` コマンドを使用してブランチ一覧を取得し、 `sed` と `tr` で加工して生成する。
本題から外れるので、各コマンドの説明は省略する。
このコマンドをJenkinsのジョブで「定期的に実行」させておく。別に定期的に実行でなくてもいいけど、定期的に実行することで、意識せずにブランチ一覧を最新状態に保てる。
自分のチームの場合、スケジュールは `H/15 10-21 * * 1-5` としている。(月-金曜日の10-21時台で、15分ごとに実行)
本題から外れるので、各コマンドの説明は省略する。
このコマンドをJenkinsのジョブで「定期的に実行」させておく。別に定期的に実行でなくてもいいけど、定期的に実行することで、意識せずにブランチ一覧を最新状態に保てる。
自分のチームの場合、スケジュールは `H/15 10-21 * * 1-5` としている。(月-金曜日の10-21時台で、15分ごとに実行)
2-1. ビルド時に選択肢を提供する
ブランチ一覧ファイルが生成できたら、これをExtended Choice Parameter Plug-Inで利用する。- ビルドのパラメータ化にチェックを入れる
- パラメータの追加からExtended Choice Parameterを選択
- Name, Property File, Property Keyを適切に入力する
このとき、Nameはビルド時に環境変数として利用できる
- Property Fileは、ブランチ一覧ファイルのパスを指定する
- Property Keyは、ブランチ一覧ファイルの中のキー名を指定する
ここでどの選択肢を使用するか指定できる - Nameは何でもいい
2-2. 選択肢に応じてビルドするブランチを変える
続いてGit Pluginの方を設定する。
GitのBranches to buildの項目に、Extended Choice Parameterで指定したNameを入力する。例えば `${target_branch}` のように入力する。
これで全ての設定は完了。
ビルドすると次のように選択肢が現れ、どのブランチをビルドするか選べるようになる。
補足
`hotfix/~` とか `feature/~` を表示したくないって場合は、ブランチ一覧ファイルを生成する段階で、適当に `grep -v` したりして除外してください。
うちのプロジェクトでは、リモート上の不要なブランチは随時削除しているので全て表示しても問題ない感じです。