pluginsインストール済&ユーザ作成済のJenkins用Dockerイメージを作る手順

 

Jenkinsのdockerイメージを作成する手順を構築していたのですが、毎回プラグインのインストールをするのもなんだよね。。。

ということで、プラグインがあらかじめインストールされたdockerイメージを用意することにしました。

また、毎回jenkinsのユーザをつくるのもなんだよね。。。

ということで、ユーザも同時に作成するようにしています。

なお、開発環境がproxy背後なので、proxyの設定も入ったスクリプトになっていますが、そうでない方はproxyの記載は必要ないです。

 

 

Preinstalling pluginなjenkinsを作成する

「Suggested plugins」だけでなく、任意のプラグインがインストールされた状態のjenkinsを作るには、公式のgithubの情報がすごくためになります。

あ、公式と言っても、jenkinsの公式の方です。この記事にも書きましたが、jenkinsのイメージには似ているけど異なるものが2つあるので、混同しないようにしましょう。

今回は、jenkins/jenkinsの方です。

さて、この公式イメージには「/usr/local/bin/install-plugins.sh」という、プラグインを依存関係も含めてインストールしてくれるシェルが用意されているので、これを使います。

使い方は

FROM jenkins/jenkins:lts

RUN /usr/local/bin/install-plugins.sh docker-slaves github-branch-source:1.8

 

のように、シェルにプラグイン名をスペースで区切って渡します。

ただ、結構たくさんのプラグインがあるので、

 

FROM jenkins/jenkins:lts
COPY plugins.txt /usr/share/jenkins/ref/plugins.txt
RUN /usr/local/bin/install-plugins.sh < /usr/share/jenkins/ref/plugins.txt

 

のように、あらかじめインストールしたいプラグインを書いた「plugins.txt」を用意しておき、それをイメージのbuild時にシェルに渡すことで、preinstallできます。

で、この「plugins.txt」に記載するプラグイン名ですが、

スクリプトコンソール(http://localhost:8080/script)に以下のgroovyスクリプトを入力して実行すると取得できます。

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

}

 

Jenkins Login

 

デフォルトのユーザをあらかじめ作成しておく

プラグインインストール以外にも、あらかじめ環境をセットアップしたいという要望があるハズです。

この目的の実現のために、以下のような仕組みが用意されています。

/usr/share/jenkins/ref/init.groovy.d/

配下にgroovyスクリプトを配置しておくと、初回run時にそのスクリプトを実行してくれるのです。

今回は、前もってjenkinsのコンソールを利用できるユーザを作成しておくことにします。

 

「custom.groovy」

import jenkins.model.*
Jenkins.instance.setNumExecutors(0)

 

「default-user.groovy」

import jenkins.model.*
import hudson.security.*

def env = System.getenv()

def jenkins = Jenkins.getInstance()
if(!(jenkins.getSecurityRealm() instanceof HudsonPrivateSecurityRealm))
    jenkins.setSecurityRealm(new HudsonPrivateSecurityRealm(false))

if(!(jenkins.getAuthorizationStrategy() instanceof GlobalMatrixAuthorizationStrategy))
    jenkins.setAuthorizationStrategy(new GlobalMatrixAuthorizationStrategy())

def user = jenkins.getSecurityRealm().createAccount(env.JENKINS_USER, env.JENKINS_PASS)
user.save()
jenkins.getAuthorizationStrategy().add(Jenkins.ADMINISTER, env.JENKINS_USER)

jenkins.save()

 

これらを記載したDockerFileは以下のようになります。

 

DockerFile

FROM jenkins/jenkins:2.184

ENV https_proxy "http://proxy_server:8080/"
ENV http_proxy "http://proxy_server:8080/"

MAINTAINER koji


# セットアップウィザードを無効化する
# (Suggested pluginsのインストールをスキップできる)
# proxy背後の場合は必要かも
# ENV JAVA_OPTS="-Djenkins.install.runSetupWizard=false -Dhttp.proxyHost=proxy_server -Dhttp.proxyPort=8080 -Dhttps.proxyHost=proxy_server -Dhttps.proxyPort=8080"
ENV JAVA_OPTS="-Djenkins.install.runSetupWizard=false"

# rootユーザでplugins.txtに記載されたプラグインをインストールする
# install-plugins.shは公式イメージに同梱されているインストール用スクリプト
USER root

COPY plugins.txt /usr/share/jenkins/ref/plugins.txt
RUN /usr/local/bin/install-plugins.sh < /usr/share/jenkins/ref/plugins.txt


ENV JENKINS_USER admin
ENV JENKINS_PASS admin


COPY custom.groovy /usr/share/jenkins/ref/init.groovy.d/
COPY default-user.groovy /usr/share/jenkins/ref/init.groovy.d/

 

このDockerFileでイメージを作成しrunすると、プラグインがインストールされ、あらかじめユーザが作成された状態でjenkinsが起動します。

 

docker build -t myimg/jenkins_plugin:1.0 .

 

docker run --name con_jenkins -p 8080:8080 -p 50000:50000 -v /jenkins_home:/var/jenkins_home --env JAVA_OPTS="-Dhttp.proxyHost=proxy_server -Dhttp.proxyPort=8080 -Dhttps.proxyHost=proxy_server -Dhttps.proxyPort=8080" -d myimg/jenkins_plugin:1.0

 

 

 

こんな記事も読まれています


コメントを残す

サブコンテンツ

このページの先頭へ