Promoted Builds Plugin

# 概要
このプラグインには、「ビルドを昇格させる」という考え方がある。
ここでいう「昇格」とは、例えば上流・下流で依存関係があるビルドにおいて、各ビルド単体が成功しただけでなく、依存するビルドも全て成功したら、ビルドを昇格させる (スターを付ける)。みたいな感じ。


例えるなら、リレー競争で各走者が走り終えたらゴールではなく、すべての走者が走り終えたらゴールとする。みたいな感じ。え、違う？！(笑)

では「昇格」することで何が嬉しいか？
例えば、ある単体のビルドではなく、上流・下流通して安定している (e.g. テストが通った) 場合などに、上流のビルドを昇格させることによって、ビルドを分割しているような場合でも、本当にそのビルド (依存するビルド全て) が安定しているのかどうかを判断することが出来る。

もし、「昇格」などが無い場合、仮に上流のビルドが通っていても、もしかしたら依存している下流のビルドでテストが失敗してしまうかもしれない。
しかし、上流のビルドが成功しているので、あたかもビルド OK と思ってしまう恐れがある。とか。

また「昇格」をトリガーに、何かコマンドを実行したり、デプロイやメール送信をしたりなどの使い方が可能。


では、早速使い方を。

# インストール
Jenkis のプラグイン管理から、以下のプラグインをインストール。
『promoted builds plugin』
![pbp_1(plugin).jpg](https://qiita-image-store.s3.amazonaws.com/0/76368/eebb5082-c97f-8ef6-7da3-1dfa04671365.jpeg)


# サンプルジョブの全体像
ちなみにサンプルのジョブ構成はこんな感じ。

- build (上流ビルド)
 - ⇒ unit_test (下流ビルド1)
 - ⇒ integration_test (下流ビルド2)

上流ビルドでターゲットとなるプロダクトをビルドして、それに対する単体テスト (UT) と結合テスト (IT) を並行して実行する。


# 設定内容
![pbp_3(setting).jpg](https://qiita-image-store.s3.amazonaws.com/0/76368/a0f30b9e-d8c8-c3ca-1923-9e2653acfa05.jpeg)

では早速設定内容を見ていく。

Promoted Build Plugin を導入すると、ジョブ設定に「Promote builds when...」という項目が増える。
ここで、このジョブ (ビルド) を昇格 (promotion) させる条件等を設定していく。

## Promotion process
- Name: この Promotion の名前
- Icon: このビルドが昇格したときにつけるアイコン (スターの種類)
- Restrict where this promotion process can be run ？(試してみたがイマイチ意味が分からなかった...)


## Criteria (条件)
- Only when manually approved: ビルド完了後に手動で「Approve (承認)」ボタンが押下された場合に昇格する
 - Approvers: 承認者 (Jenkins においてユーザ管理を行っている場合に便利。ここで指定したユーザ以外、「Approve」ボタンが表示されない。未指定の場合は誰でも「Approve」ボタンを押下可能)
 - Approval Parameters: 昇格時に実行される処理に指定することが出来るパラメータ (通常のパラメータと同じ扱いが可能)

 - Promote immediately once the build is complete: ビルド完了後に昇格
  - Trigger even if the build is unstable: ビルドが不安定 (UNSTABLE) でも実行

- Promote immediately once the build is complete based on build parameters: 指定したパラメータ値を含んだビルドが完了した場合に昇格
 - Trigger even if the build is unstable: ビルドが不安定 (UNSTABLE) でも実行

- When the following downstream projects build successfully: 指定した下流のビルドが全て成功したら昇格
 - Trigger even if the build is unstable: ビルドが不安定 (UNSTABLE) でも実行

- When the following upstream promotions are promoted: 上流のビルドが昇格したら (このビルドも) 昇格
 - Promotion names: 上流の Promotion の名前

## Actions
昇格時のアクションを選択できる。選択できるのは、ビルド手順とビルド後の処理の追加と同じ

- Add another promotion process: 別の promotion process を定義 (promotion process は一つのジョブに対して複数定義可能)




# ジョブの設定 (上流ジョブ)
今回は「When the following downstream projects build successfully」にチェックを入れ、下流の 2 つのビルドが成功したら昇格するように設定。
![pbp_4(setting).jpg](https://qiita-image-store.s3.amazonaws.com/0/76368/705af29e-66c2-8770-3538-18acf4c1412d.jpeg)

## いざ実行。
上流のビルド実行後、下流のビルドが共に成功した場合、下記のようにビルド履歴に「★」のアイコンが表示される。これが昇格した証。
逆に下流のビルドが一方でもコケてしまうと、「★」は付かない。
![pbp_5(result).jpg](https://qiita-image-store.s3.amazonaws.com/0/76368/37f04b28-7681-0fb1-fb27-c6d24eeadac7.jpeg)

# 承認 (手動昇格の場合)

ちなみに、手動昇格 (承認者を設定) した場合は下記のような感じ。
承認者に指定されたユーザ (ここでは naotawool) 以外のユーザでログインしている場合、「Approve」(承認) ボタンが表示されない。
![pbp_6(not_approve).jpg](https://qiita-image-store.s3.amazonaws.com/0/76368/9c1a822a-1060-e52b-48da-b54c709486db.jpeg)

しかし、承認者に指定したユーザでログインしている場合、「Approve」ボタンが表示される。
![pbp_7(ok_approve).jpg](https://qiita-image-store.s3.amazonaws.com/0/76368/6ad39ba3-8173-1f3c-f933-80adebb4ea29.jpeg)


# さいごに
今回はとても簡単な例でしかなかったが、ビルドの依存関係が複雑であれば、このプラグインはより効果を発揮すると思う。
皆さんもビルドを昇格させたくなったら、ぜひ Promoted Builds Plugin を試してみてはいかがだろうか。