Jenkinsをインストールしたら入れるプラグイン18個


## Overview

備忘録としてJenkinsをインストールした後大抵入れているプラグインを列挙 & 軽く解説

## Build

### [Docker plugin](https://wiki.jenkins-ci.org/display/JENKINS/Docker+Plugin)

Dockerコンテナを使い捨てのスレーブとして起動出来るようになる。
ジョブ起動ごとにコンテナが起動するのでクリーンなビルド環境を維持、他環境への影響を抑えられる。
使い捨てのビルドに使ったり、使い捨てのテストに使ったり、CMツール(Chef, Ansible等)のCIに使ったり用途色々。

スレーブで利用するイメージはランタイムごとにタグを分けてDockerHubでAutomation Buildしておけばジョブごとに好きなランタイムでビルド出来て良い感じになる。
例). [shufo/jenkins-slave-ubuntu](https://hub.docker.com/r/shufo/jenkins-slave-ubuntu/) (phpとnodejsのランタイムは作ってある)をスレーブとして使うとすると、JenkinsのDocker Pluginの設定で `shufo/jenkins-slave-ubuntu:php`、`shufo/jenkins-slave-ubuntu:nodejs`を指定すればそれぞれphpとnodejsがランタイムのスレーブコンテナが起動する。

### [CloudBees Docker Build and Publish plugin](https://github.com/jenkinsci/docker-build-publish-plugin/blob/master/README.md)

Dockerfileのビルドやレジストリへのプッシュが選択式で簡単に出来るようになる


### [Build Token Root Plugin](https://wiki.jenkins-ci.org/display/JENKINS/Build+Token+Root+Plugin)

リモートからトークンを使用してジョブを叩けるようになる。
例). `RevolutionTest`というジョブで`TacoTuesday`というtokenを使ってビルドしたい場合

→ジョブ設定画面よりtokenを指定し外部からエンドポイントにリクエストを送る

```
curl -X GET http://jenkins.example.com/buildByToken/build?job=RevolutionTest&token=TacoTuesday
```

### [Conditional-Buildstep](https://wiki.jenkins-ci.org/display/JENKINS/Conditional+BuildStep+Plugin)

ビルドステップに条件を追加し複雑な条件でビルドが出来るようになる
例). pushされたgitのブランチがmasterのときのみ特定の下流ビルドを実行など

### [Dynamic Parameter Plug-in](https://wiki.jenkins-ci.org/display/JENKINS/Dynamic+Parameter+Plug-in)

Groovyスクリプトで外部APIを叩いてビルド時に動的にパラメータを生成することが出来るようになる
例). docker registryのタグ一覧を取得しパラメータとして生成

```
import groovy.json.*

String result = ['/bin/bash', '-c', "/usr/bin/curl -X GET http://${registry_url}/v1/repositories/namespace/image_name/tags"].execute().text
def json = new JsonSlurper().parseText(result)
def list = json.keySet()
List tags = []
tags.addAll(list)
```

この場合`tags`に入ったタグの一覧がパラメータのオプションとして利用出来るようになる。
外部APIと連携して動的にタスクを実行したい場合などに使える。

### [EnvInject Plugin](https://wiki.jenkins-ci.org/display/JENKINS/EnvInject+Plugin)

環境変数をビルドプロセスに注入出来るようになる。
パスワードを環境変数として注入することも出来るので、AWSのシークレットキー等ハードコーディングしたくないけど色々なタスクで共有して使いたい場合はこれを使う。

### [Flexible Publish Plugin](https://wiki.jenkins-ci.org/display/JENKINS/Flexible+Publish+Plugin)

ビルド後の処理プロセスで条件付きビルドステップを作れるようになる
Jenkinsデフォルトで出来てもよさそうだけどなぜか出来ないので入れる

### [GIT plugin](https://wiki.jenkins-ci.org/display/JENKINS/Git+Plugin)

Gitを使うなら必須

### [ShiningPanda Plugin](https://wiki.jenkins-ci.org/display/JENKINS/ShiningPanda+Plugin)

ビルドごとに独立したvirtuelenv環境を作ることが出来る。既存のPython環境を壊したくない場合などに。

## Appearance

### [Categorized Jobs View](https://wiki.jenkins-ci.org/display/JENKINS/Categorized+Jobs+View)

ビューを正規表現でグルーピング出来る。

### [HTML5 Notifier Plugin](https://wiki.jenkins-ci.org/display/JENKINS/HTML5+Notifier+Plugin)

ビルドの成功や失敗の通知をHTML5のNotificationとして出してくれるようになる。

### [PegDown Formatter Plugin](https://wiki.jenkins-ci.org/display/JENKINS/PegDown+Formatter+Plugin)

ジョブの説明欄をMarkdown形式で入力出来るようになる

### [Build Trigger Badge Plugin](https://wiki.jenkins-ci.org/display/JENKINS/Build+Trigger+Badge+Plugin)

ビルドの原因をジョブの実行履歴にアイコンとして表示出来るようになる
流し見でビルドの原因が分かるようになるのでおすすめ

## Utility

### [Job Configuration History Plugin](https://wiki.jenkins-ci.org/display/JENKINS/JobConfigHistory+Plugin)

ジョブ設定のAuditがあると後で何かと役に立つので入れておく

## Authentication & Authorization

### [Role Strategy Plugin](https://wiki.jenkins-ci.org/display/JENKINS/Role+Strategy+Plugin)

ロールを定義しユーザに割り当てることで詳細な権限管理が出来るようになる

例). 「example-.*」という正規表現に該当するプロジェクトのジョブのread, write権限を「example-read-write」と定義し、user1とauthenticatedグループに割り当て

というようなことが出来るようになる。

ビルトインのグループとして「authenticated」というログイン済みユーザのグループと「anonymous」という未ログインユーザを指すグループがあるがLDAP pluginを使っていればLDAPのグループ名をRole Strategy Pluginのグループ名として利用出来る。

### [Google Login Plugin](https://wiki.jenkins-ci.org/display/JENKINS/Google+Login+Plugin)

Googleアカウントでログイン出来るようになる。Appsを使っている場合は対象ドメインを制限することも可能。

## Theme

### [Simple Theme Plugin](https://wiki.jenkins-ci.org/display/JENKINS/Simple+Theme+Plugin)

テーマを追加出来るようになる。

個人的には [ModernJenkins-Theme](https://github.com/mikepenz/ModernJenkins-Theme) がシンプルでスタイルの崩れもなくてよかった。
CDNで配信されていないファイルの場合は `$JENKINS_HOME/userContent` 以下にファイルを配置して読み込む。

例).
URL of theme CSS

```
https://jenkins.example.com/userContent/ModernJenkins-Theme/master.css
```

URL of theme JS

```
https://jenkins.example.com/userContent/ModernJenkins-Theme/master.js
```

## Backup

### [ThinBackup](https://wiki.jenkins-ci.org/display/JENKINS/thinBackup)

軽量バックアッププラグイン。
設定ファイル類のみ等に絞ってバックアップを設定、またスケジューリングで定期バックアップを設定出来る。

## Chrome拡張

プラグインではないけどChromeに入れることで便利になる拡張

### [Jenkins Terminal Colors](https://chrome.google.com/webstore/detail/jenkins-terminal-colors/njhooapdhhjehkemlbobcdenmdbiooml)

コンソール出力に色がつく