1. HOME
  2. 開発・ブログ運営
  3. Docker
  4. Jenkins コンテナの初期設定を自動化してみる
2016年07月08日
Docker 便利コマンドあれこれ
2016年07月16日
WordPress 稼働中の Docker コンテナの構成 ...
2016年07月29日
Docker for Mac のインストール
2016年07月09日
MySQL, WordPress, phpMyAdmin コン ...
2016年07月29日
Docker for Mac/Windows で 「Canno ...
2016年07月06日
Jenkins コンテナの初期設定を自動化してみる

Jenkins コンテナの初期設定を自動化してみる

Docker で簡単に Jenkins コンテナを起動できるわけですが、セキュリティ設定やジョブの登録を、WEB ダッシュボードから 毎回手動でやるのはつらい。

コンテナを run するたびにジョブの登録とかプラグインの状態とか、いつも使う環境になってて欲しいわけで。

よくあるのが Jenkins コンテナを一旦立ち上げて、手動で必要な設定とかプラグインのインストールなどをしたら、docker commit でその状態のイメージを作るやり方。

自分の場合はこのやり方は好きじゃない。なぜなら、そのイメージが出来上がるまでの過程がよくわからなくなるから。

ってことで、Jenkins 公式イメージから毎回同じ環境になるようにシェルスクリプトとかで何とかしてみる。


Jenkins のグローバルセキュリティを自動設定する

Jenkins login

Jenkins の公式イメージで Docker コンテナを起動すると、誰でもアクセスできる状態で起動するので、Jenkins コンテナを新規で立ち上げるたびに、[Jenkins の管理] > [グローバルセキュリティの設定] で、ログイン認証の設定をしていましたが groovy を使って グローバルセキュリティを自動設定できました。

Jenkins 公式イメージでは、/usr/share/jenkins/ref/init.groovy.d に配置してある groovy スクリプトがコンテナを起動した際に実行されるようなので、そこに set_global_security.groovy というファイルを追加してみます。ファイルの中身は、


にしてみました。これで、グローバルセキュリティが有効となり、Jenkins アクセス時にはユーザー認証画面が表示されるようになります。また、アドミン権限を持つユーザーとして、ユーザー名が「admin」パスワードが「password」が追加されます。

ユーザー名、パスワードを変更したい場合は、上記スクリプトの admin と password を変更してください。(admin は2か所あります)


プラグインの自動インストール

Jenkins plugins

Jenkins の公式イメージでは、 /usr/local/bin/plugins.sh が用意されていて、インストールしたいプラグインを羅列したテキストファイルを引数で渡すと、羅列されたプラグインがインストールされます。

例えば、/usr/share/jenkins に plugins.txt という名前でファイルを作る。中身は、

git-client
git
github

みたいな感じ。3つのプラグインをインストールしてみる。(実際にはこれらと依存関係のあるプラグインもインストールされる)っで jenkins コンテナの中で、

とすれば、上記 3つのプラグインがダウンロード & インストールされる。


プラグインの自動インストール その2

上記の方法で万々歳のはずなんだけどプラグインが認識されない。。。どして?

ダメじゃん。

なんかよくわからないので、jenkins に付属している jenkins-cli を使ってプラグインをインストールしてみる。ちなみにジョブの登録をする場合にも jenkins-cli が必要なので、プラグインもこちらの方法が良いと思う。最初から jenkins-cli でやっておけばよかった。

早速、jenkins-cli を使えるようにする。なお、ここからの作業は全て Jenkins コンテナの中で実行します。


そしてプラグインのインストール。install-plugin コマンドの後ろにインストールしたいプラグインをスペース区切りで羅列する。


プラグインを有効化するために Jenkins を再起動


インストールしたプラグインが有効化されているかどうか、インズトール済みプラグインの一覧で確認する。


Terminal jenkins plugins

以上で、無事プラグインがインストールされました。よかった。


ジョブを自動で追加する

Terminal config xml

スクリプトでジョブを追加するためにはジョブの設定を書いた xml ファイルを Jenkins-cli の create-job コマンドに渡してあげればジョブが追加されます。

まずは xml ファイルを用意します。xml ファイルの内容は自力で書くのはちょっと大変なので、WEB でJenkins にアクセスして、手動でジョブの設定を行います。

設定が終わったら、ジョブの設定ファイル(config.xml)をホスト側へコピーします。コンテナ内のファイルをローカル(ホスト側)へコピーする場合は、docker の cp コマンドで、

とすれば、docker cp を実行したディレクトリに config.xml が保存されます。

config.xml を入手したら、-v オプションなどでコンテナ内に config.xml をコンテナ内に配置します。場所はどこでも構いません。とりあえず /usr/share/jenkins/config.xml に配置してみます。

あとは jerkins-cli の create-job コマンドに config.xml を渡して実行するだけです。[ジョブ名]に指定した名前でジョブ登録されます。


また、Jenkins アクセスに認証が必要な場合は、「 –username [ユーザー名] –password [パスワード]」を追加します。例えば、ユーザー名が admin でパスワードが admin_pass、でアクセスして TEST_JOB を登録する場合は、


となります。


まとめ

グローバルセキュリティの設定、プラグインのインストール、ジョブの自動追加の 3つが自動で出来ればある程度のことはできます。それ以外の項目も自動設定したい場合は groovy スクリプトを書けばある程度何でもできそうです。

また Jenkins には REST API もあるみたいなので、それ経由でも良いかもしれません。

ただ、Jenkins 以外のコンテナでもそうですが、この手の設定を実行するスクリプトを、コンテナ起動プロセスのどのタイミングでどうやって実行するのか?Dockerfile を拡張? entrypoint.sh ?だったりが重要だったりします。そのあたりのことについてはまた今度記事にしたいと思います。

でわでわ。








この記事にコメントする





Copyright © 2012 - 2014 MacBook Air とWordPressでこうなった All rights reserved
Powered by WordPress.