2018年08月01日
Docker for Mac を使って WordPress の...
2018年07月29日
Docker for Mac のインストール
2018年07月08日
Docker 便利コマンドあれこれ
2018年07月08日
オライリーの Docker 本(Docker Up &...
2018年07月05日
iPad mini 2 を購入しました
2018年07月04日
Docker で Jenkins するときのあれこれ

HOME > カテゴリ(Docker, サーバー)の記事

Docker で Jenkins するときのあれこれ



Jenkins も Docker で立ち上げればめっちゃ簡単。しかも使わなくなったらコンテナ(とイメージ)を破棄するだけ。便利すぎます。

取りあえず公式イメージで Jenkins を立ち上げる

JenkinsDocker コンテナで起動するのは、公式イメージがあるので簡単。

$ docker run -p 8080:8080 -it jenkins 

とすればコンテナが起動して http://IPアドレス:8080 で Jenkins のダッシュボードにアクセスできる。

データの永続化

データが永続化されないと困るので JENKINS_HOME 以下をホスト OS 側にマウントしておく。Docker の公式イメージの JENKINS_HOME は /var/lib/jenkins ではなくて /var/jenkins_home なので注意。

$ docker run -p 8080:8080 -v $(pwd):/var/jenkins_home 

コンテナのタイムゾーンをホスト OS のタイムゾーンに合わせる

ホスト OS のタイムゾーンが JST だった場合、コンテナのタイムゾーンも JST になります。/etc/localtime をマウントするだけ。

$ docker run -p 8080:8080 -v /etc/localtime:/etc/localtime:ro -it jenkins 

Jenkins(Java) のタイムゾーンを変更する

Jenkins の時刻表示で使われるのはホスト OS のタイムゾーンではなくて Java のタイムゾーン。なので Jenkins ログなどの時刻のタイムゾーンを変更する場合は Java の起動オプションを設定する。 Jenkins 公式イメージの場合は、JAVA_OPTS に設定した値が Java の起動オプションとなるので、

$ docker run -p 8080:8080 -e JAVA_OPTS="-Duser.timezone=Asia/Tokyo" -it jenkins 

とすればタイムゾーンは JST になる。

Jenkins のログとかの日本語対応

Jenkins のログが文字化けする場合がある。これも Java の起動オプションで明示的にエンコードを指定すれば文字化けないので一応、設定しておく。

$ docker run -p 8080:8080 -e JAVA_OPTS="-Dfile.encoding=UTF-8 -Dsun.jnu.encoding=UTF-8" -it jenkins 

Jenkins コンテナから Docker コンテナを起動する

例えば Chef レシピの CI をする場合、Docker コンテナを起動して、それに対してレシピの適用 & Serverspec をしてコンテナ破棄、みたいなことをやってますが、その場合には Jenkins コンテナから Docker コンテナが起動できないといけないので、Jenkins コンテナから Docker コンテナを起動できるようにする必要があります。 ホスト OS の /var/run/docker.sock と docker バイナリをコンテナにマウントすることで Jenkins コンテナから Docker コンテナを起動することができるようになります。

$ docker run -p 8080:8080 -v /var/run/docker.sock:/var/run/docker.sock:ro -v $(which docker):/bin/docker:ro -it jenkins 

docker-compose を使いたい場合は、$(which docker-compose):/bin/docker-compose:ro もマウントしちゃってください。 ここまでの設定をしても「共有ライブラリが見つかりません」的なエラーが出る場合は、対象の共有ライブラリをマウントする必要があります。 私の場合、docker のファイルシステムを overlay にしているせいか、livdevmapper.so が見つからない、とエラーが出ました。なので、

-v /usr/lib64/libdevmapper.so.1.02:/usr/lib/x86_64-linux-gnu/libdevmapper.so.1.02:ro 

を追加でマウント。

docker-compose にしてみる

これまでの設定を全て docker コマンドで実行しようとすると大変なので、コンテナは一個だけしかありませんが、docker-compose を使うと楽チン。

jenkins: image: jenkins:1.651.3 environment: - JAVA_OPTS="-Duser.timezone=Asia/Tokyo -Dfile.encoding=UTF-8 -Dsun.jnu.encoding=UTF-8" volumes: - $(pwd):/var/jenkins_home - /var/run/docker.sock:/var/run/docker.sock:ro - $(which docker):/bin/docker:ro - $(which docker-compose):/bin/docker-compose:ro - /usr/lib64/libdevmapper.so.1.02:/usr/lib/x86_64-linux-gnu/libdevmapper.so.1.02:ro - /etc/localtime:/etc/localtime:ro ports: - "8080:8080" - "50000:50000" 

まとめ

今回は Jenkins コンテナを立ち上げる時の設定をあれこれ書いてみましたが、ほとんどの設定は他のコンテナでも同じことができます。 例えば、私は ホスト OS のタイムゾーンとコンテナのタイムゾーンを合わせたり、とかは全てのコンテナで設定してたりします。 ってことで、Docker で Jenkins が便利すぎるので、じゃんじゃん Docker Jenkins で CI しちゃってください。

でわでわ。





この記事にコメントする





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