Docker を使って Jenkins サーバーをローカルに構築する (プラグイン導入済み)

Jenkins

Jenkins on Docker

最近では Jenkins サーバーを Docker 上で構築するケースが増えてきています。CI 環境は、簡単に作り直したり複製したりすることができる Docker のメリットを活かせる環境であると言えます。

ということで、Docker を使って Jenkins サーバーをローカルに構築する方法をご紹介したいと思います。また Jenkins にはプラグインをインストールして使うことが多いと思うので、プラグインがインストール済みの Docker イメージをビルドする方法も併せてご紹介します。

Docker のインストール

まずはローカルに Docker が実行できる環境を作りましょう。以下のドキュメントを参考にしてください。Mac では Docker Toolbox をインストールする方法と Docker for Mac をインストールする方法の2通りがあります。

Docker イメージのビルド

Jenkins 公式の Docker イメージがいくつか公開されており、その中の jenkinsci/jenkins を使うと非常に簡単に構築することができます。これを元にしながら、プラグインを導入するところを Dockerfile に書きます。

FROM jenkinsci/jenkins:2.11

# install via apt
USER root

# install jenkins plugins
COPY plugins.txt /usr/share/jenkins/plugins.txt
RUN /usr/local/bin/plugins.sh /usr/share/jenkins/plugins.txt

# drop back to the regular jenkins user - good practice
USER jenkins

インストールしたいプラグインは plugins.txt にまとめておき、Dockerfile と同じディレクトリに置いておきます。ここでは、Android アプリの CI に必要そうなプラグインをいくつか入れています。なお、インストールしたいプラグインが他のプラグインに依存している場合、そのプラグインも記述する必要があります。

javadoc 1.4
dashboard-view 2.9.10
analysis-core 1.78
matrix-project 1.7.1
token-macro 1.12.1
maven-plugin 2.13
android-lint 2.3
aws-device-farm 1.13
checkstyle 3.46

ここまで出来たら docker build コマンドで Docker イメージをビルドします。

$ docker build -t jenkins-master .
Sending build context to Docker daemon 279.2 MB
Step 1 : FROM jenkinsci/jenkins:2.11
2.11: Pulling from jenkinsci/jenkins

...省略...

Digest: sha256:c4c04de0e9341fa477752923ec94014d28a13254bebe49fcefd4098e71e8344f
Status: Downloaded newer image for jenkinsci/jenkins:2.11
 ---> fb476c24b4d7
Step 2 : USER root
 ---> Running in 03da3f79976c
 ---> 40691b3404a4
Step 3 : COPY plugins.txt /usr/share/jenkins/plugins.txt
 ---> 2e4ffac862ff
Removing intermediate container f27e39712071
Step 4 : RUN /usr/local/bin/plugins.sh /usr/share/jenkins/plugins.txt
 ---> Running in 9d971d474e58
Analyzing war: /usr/share/jenkins/jenkins.war
Downloading javadoc:1.0
Downloading dashboard-view:2.9.10
Downloading analysis-core:1.78
Downloading matrix-project:1.7.1
Downloading token-macro:1.12.1
Downloading maven-plugin:2.9
Downloading android-lint:2.3
Downloading aws-device-farm:1.13
Downloading checkstyle:3.46
---------------------------------------------------
INFO: Successfully installed 9 plugins.
---------------------------------------------------
 ---> 463dbb2b92ad
Removing intermediate container 9d971d474e58
Step 5 : USER jenkins
 ---> Running in 70729142c3fa
 ---> 9a48ce137609
Removing intermediate container 70729142c3fa
Successfully built 9a48ce137609

Docker コンテナの起動

次に、ビルドした Docker イメージを元に Docker コンテナを起動しましょう。Jenkins の設定やジョブ設定を永続化するため、-v オプションを使って Data Volume をマウントしています。

$ docker run -p 8080:8080 -p 50000:50000 \
-v `pwd`/jenkins_home:/var/jenkins_home -d jenkins-master

Jenkins の起動

Docker コンテナが起動できたら、ブラウザでアクセスしてみます。

$ open http://$(docker-machine ip):8080

Jenkins 2.0 からは、Initial Admin Password が必要になります。

jenkins-on-docker-01

これは /var/jenkins_home/secrets/initialAdminPassword にあります。/var/jenkins_home-v オプションを使って Data Volume をマウントしているので、マウントしているディレクトリを開くと参照できます。

$ cat `pwd`/jenkins_home/secrets/initialAdminPassword
e45cf4e679114e738710a30efded90c0

Jenkins 2.0 では初期設定でプラグインをインストールできます。ここでは「Install suggesed plugins」を選択します。

jenkins-on-docker-02

プラグインのインストールが進みます。

jenkins-on-docker-03

インストールが終わったら、管理者のアカウントを作成します。

jenkins-on-docker-04

Jenkins を利用する準備が整いました。

jenkins-on-docker-05

いつもの Jenkins の画面が表示されます。

jenkins-on-docker-06

インストール済みのプラグイン一覧を見てみると plugins.txt で指定したプラグインがインストール済みであることが確認できます。

jenkins-on-docker-07

以上です!お疲れさまでした。

まとめ

Jenkins on Docker の事始め的な内容でした。本記事ではローカルで構築しただけなので、ECS などにデプロイするにはもう少し設定が必要です。これはまた別の機会にご紹介したいと思います。

参考