理系学生日記

おまえはいつまで学生気分なのか

プラグインインストール済のJenkins Dockerイメージを作成する

Jenkins には Docker 公式のイメージ があったりして、セットアップが非常に容易になっています。 で、いざ docker run して立ち上げてみたら、いきなり Plugin をインストールしろやみたいな画面になるし、仕方ないなぁお勧めプラグインでもインストールしてやるかみたいな感じでボタン押したら、大量のプラグインのインストールが走ってずいぶん時間待たされることになりました。

f:id:kiririmode:20161207010147p:plain

こんなのは全然軽量じゃない、もっと迅速に Jenkins と遊びたいんや!! というわけで、お勧めプラグインをインストール済のイメージを作りましょう。

お勧めプラグイン一覧の作成

お勧めプラグインをインストールしておくためにはお勧めプラグイン一覧が必要なわけですが、これは Jenkins の Jenkins Script Console で以下のような Groovy スクリプトを書いて実行すれば良いです。 Jenkins Script Console は、http:///script でアクセスできるヤツですね。

Jenkins.instance.pluginManager.plugins.each{
  plugin ->
    println ("${plugin.getShortName()}")
}

この実行結果を、plugins.txt とでもして保存しておきましょう。

Dockerfile の作成

Dockerfile はこんなかんじ。ミソは、install-plugins.sh で、これは Docker 公式の Jenkins イメージに入っているプラグインインストール用のスクリプトです。 引数としてプラグイン名を渡してやれば良い。 ソースを読む限りでは、依存関係も勝手に解決してくれるっぽかった。

FROM jenkins:2.19.4

COPY plugins.txt /usr/share/jenkins/ref/
RUN /usr/local/bin/install-plugins.sh $(cat /usr/share/jenkins/ref/plugins.txt)

Docker を立ち上げましょう

これを以下のようにビルドして立ち上げれば、プラグインインストール済の Jenkins が動き出します。

$ docker build -t kiririmode/jenkins .
$ docker run --rm -p 8080:8080 kiririmode/jenkins

plugins.txt

2.19.4 の plugins.txt はこんなかんじ。

bouncycastle-api
cloudbees-folder
structs
junit
antisamy-markup-formatter
pam-auth
windows-slaves
display-url-api
mailer
ldap
token-macro
external-monitor-job
icon-shim
matrix-auth
script-security
matrix-project
build-timeout
credentials
workflow-step-api
plain-credentials
credentials-binding
timestamper
workflow-api
workflow-basic-steps
resource-disposer
ws-cleanup
ant
gradle
pipeline-milestone-step
workflow-support
pipeline-build-step
jquery-detached
pipeline-input-step
ace-editor
workflow-scm-step
scm-api
workflow-cps
pipeline-stage-step
workflow-job
pipeline-graph-analysis
pipeline-rest-api
handlebars
momentjs
pipeline-stage-view
ssh-credentials
git-client
git-server
workflow-cps-global-lib
branch-api
workflow-multibranch
durable-task
workflow-durable-task-step
workflow-aggregator
github-api
git
github
github-branch-source
github-organization-folder
mapdb-api
subversion
ssh-slaves
email-ext