Jenkins 2.0 以降のDockerイメージを1系のパスワード入力不要etcの仕様に戻してみる

Jenkins 2系LTSバージョンのDockerイメージがいよいよ使えるようになりました。

docker pull jenkins:2.7.1

2系も1系と同じように扱える、と思いきやちょいちょい引っかかりポイントはあります。

使ってて気づいたのは以下。

  • クリーンインストール時)最初にadminの認証パスワードを、 自動生成のファイル ${JENKINS_HOME}/secrets/initialAdminPassword or インストール時のログから拾って入力することを強制させられるようになった。またログインが初期状態で強制されるようになった。
    • 1系は初期状態であればログイン無しで使えます。
  • 最初に推奨プラグインのインストール画面が出るようになった。
    • 1系は出ません。
  • LDAP認証がプラグインをインストールしないとできないようになった。
    • 1系はデフォでLDAP認証が可能でしたが、2系から LDAP Plugin をインストールしないとLDAP認証ができません。
    • LDAPにかぎらず、あると思っていたプラグイン(e.g. Subversion Plug-in)が初期インストールされていない状態です。

LDAPやなくなってしまったプラグイン類のことはおいておくとして、基本的に上記の性質はありがたいのですが、環境を自動でセットアップするとかいうことをやっていると、邪魔な性質でもあります。

初期画面・ログイン必須化をスキップする方法

(下記のサンプルは Githubにて入手可能 です。)

1系の動きに退化させたい場合は、下記のようなファイルを /usr/share/jenkins/ref/ にマウントしてしまえばOKです。

  • /usr/share/jenkins/ref/jenkins.install.UpgradeWizard.state にマウント
2.7.1

初期adminパスワード強制ログインは要らないけど、インストール画面だけは出てほしいという場合は、下記のようなGroovyスクリプトをマウントすればセキュリティ設定をOFFにすることができます。

  • /usr/share/jenkins/ref/init.groovy.d/disableSecurity.groovy にマウント
import hudson.model.*
import jenkins.model.*

Thread.start {
    sleep 10000
    File securityInitFile = new File(Jenkins.instance.rootDir, 'badass-security-init')
    if(! securityInitFile.exists()) {
        Jenkins.instance.disableSecurity()
        securityInitFile.setText('initialized', 'UTF-8')
    }
}

まとめ

気に入らない動作があったら /usr/share/jenkins/ref/ にファイルおけばだいたいなんとかなる。( /usr/share/jenkins/ref/ は開始時に JENKINS_HOME の内容を上書きするようになっているようです。 )