run jenkins in ibm containers

17
1 Blue Jenkins IBM Containers Jenkins を動かす 2016/4/11 S.Hanai

Upload: shisei-hanai

Post on 17-Feb-2017

408 views

Category:

Software


2 download

TRANSCRIPT

1

Blue Jenkins

IBM Containersで Jenkinsを動かす

2016/4/11S.Hanai

2

おことわり本資料の記載内容は、私が個人的に調べた内容であり、正式な日本 IBMのテストやレビューを受けておりません。内容について、できる限り正確を期すよう努めてはおりますが、いかなる明示または暗黙の保証も責任も負いかねます。本資料の情報は、使用先の責任において使用されるべきものであることを、あらかじめご了承ください。

3

モチベーション

Bluemixには、 Build & Deployがあるけど、使い慣れた Jenkinsを使いたい

現在のところ IBM Containersは、 365 GB 時間 /月まで無料なので、メモリを抑えればタダでJenkins様を雇える(* 1 )

(* 1 )料金情報は常に最新を確認してください: https://console.ng.bluemix.net/pricing/

4

Docker版 Jenkins

公式https://hub.docker.com/_/jenkins/

5

IBM Containersでの注意

Dockerだから、そのまま動いちゃうのでは?

残念ながら、そのままではうまくいかない ボリュームの権限の問題

ボリュームのスピードの問題

6

権限の問題

IBM Containersのボリュームは、 NFSで実装されており、デフォルトでは rootユーザでないと書き込めないが、 Jenkinsの Docker版はセキュリティを考慮して、 jenkinsユーザで起動している

一度、 jenkinsユーザを rootグループに入れて、ディレクトリをボリューム上に作ってから、 jenkinsユーザを rootグループから外すという hackが必要参考 : http://stackoverflow.com/questions/31290202/can-i-change-owner-of-directory-that-is-mounted-on-volume-in-ibm-containers/32666280#32666280

7

スピードの問題

IBM Containerのボリュームは、 IOP=0.25に制限されている。お金を払えば IOP=4まで上がるが、上限はそこまで

root@instance-0020f249:/mnt/volume/jenkins# dd if=/dev/zero of=/mnt/volume/ttt bs=1M count=11+0 records in1+0 records out1048576 bytes (1.0 MB) copied, 32.7045 s, 32.1 kB/sroot@instance-0020f249:/mnt/volume/jenkins# dd if=/dev/zero of=/mnt/volume/ttt bs=100k count=11+0 records in1+0 records out102400 bytes (102 kB) copied, 0.600598 s, 170 kB/s

sshで入って、速度を測ってみた結果

参考:自分の PC(一世代前の SATA-SSD)

$ dd if=/dev/zero of=/tmp/xxx bs=1M count=100 oflag=dsync,sync100+0 レコード入力100+0 レコード出力104857600 バイト (105 MB) コピーされました、 1.23954 秒、 84.6 MB/秒

単純に jenkinsディレクトリをボリュームに割り当てたところ、起動の際のWAR展開が 1時間たっても終わらないので諦め。

8

作戦変更

IBM Containers(jenkins)

jenkinsディレクトリ

速度の観点から、 jenkinsディレクトリは、ボリューム上に置かない

ボリューム(バックアップ)rsync

アプリケーション起動時に、ボリュームから、 jenkinsディレクトリに内容を復元する

su -c "rsync -av $JENKINS_VOLUME/backup/_jenkins /var" jenkins

rsync -auv --delete --include jobs/*/config.xml --exclude war --exclude jobs/*/* /var/_jenkins /var/jenkins_home/backup

定期的に rsyncでボリュームにバックアップ。初回は遅いが、次からは差分コピーなので速い。更にワークスペース、ビルドディレクトリは対象から外すことで高速化

9

動かしてみる

以下に材料を置きましたhttps://github.com/ruimo/blue-jenkinsgit cloneするなりブラウザで Download ZIPするなりしてください

Bluemixのアカウント登録とか、 cf tools/pluginの設定などは省略します。以下のドキュメントなどを参照してくださいhttp://www.slideshare.net/unokichi/bluemixdocker-50127214

10

ボリュームを作る

以下のコマンドでボリュームを作成します$ cf ic volume create jenkins

11

イメージを作成する

build.sh.sampleというファイルが入っているので、これを build.shに変更して中身を自分用に書き換えます$ cf ic build -t YOUR_DOCKER_NAMESPACE/blue-jenkins .

YOUR_DOCKE_NAMESPACEのところを、自分の Bluemix上の Docker registryの名前空間名に変更します。 chmod +x build.shで実行ビットを立てたら実行してください。これでイメージができます

12

イメージの作成

cf ic imagesを実行すると、イメージを確認できます$ cf ic imagesREPOSITORY TAG IMAGE ID CREATED SIZEregistry.ng.bluemix.net/ruimo/blue-jenkins latest eb3d733d3c19 4 hours ago 720.5 MB

13

実行

run.sh.sampleを run.shにリネームして中を書き換えますcf ic group create --name YOUR_HOST_NAME -p 8080 -m 2048 -v jenkins:/var/jenkins_home --min 1 --max 1 --desired 1 -n YOUR_CONTAINER_NAME -d mybluemix.net registry.ng.bluemix.net/YOUR_DOCKER_NAMESPACE/blue-jenkins

YOUR_HOST_NAMEは、 urlの先頭部分でBluemix内で一意である必要がありますYOUR_CONTAINER_NAMEは任意の名前ですYOUR_DOCKER_NAMESPACEは、 build.shの時と同じですbuild.shの時と同様、実行ビットを立てて実行すれば containerが上がりますなおメモリは 2GB(-m 2048)になっているので、課金を避けたい場合は適宜修正(減らして ) ください

14

実行

cf ic psコマンドで状況を確認します$ cf ic ps -aCONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMESefd502f8-1bf registry.ng.bluemix.net/ruimo/blue-jenkins:latest "" 4 hours ago Running 4 hours ago 10.142.187.57:8080->8080/tcp ru-pbpl-iqpv5ivzc4fq-sysmt5rpefcw-server-kzgunlpyk3hq

ステータスが Runningになれば起動していますhttps://HOST_NAME.mybluemix.net/ をブラウザで開いてください。 HOST_NAMEのところは、 run.shの中で指定した YOUR_HOST_NAMEです初回は割と速いと思いますが、次回以降はボリューからのリストアが実行されるため、 10分くらい起動に要すると思います

15

バックアップジョブ

Jenkinsが起動したら、バックアップジョブを作っておきましょう。 Jenkinsのジョブの作成方法は省略します

最初の実行には時間がかかります(全部をボリュームにコピーするので)

rsync -auv --delete --include jobs/*/config.xml --exclude war --exclude jobs/*/* /var/_jenkins /var/jenkins_home/backup

16

注意

cf ic runの自動リカバリ・オプション (--auto)は使わないでください。起動の際のボリュームからのリストアに時間がかかるため、ハングしたと誤認され、削除、開始の無限ループになってしまいます

Jenkins設定を変更した後、バックアップが走る前に何らかの原因でコンテナが再起動されると、変更内容は失われます

17

まとめ

(半ば無理矢理) Jenkinsを IBM Containersで動かしてみました

自分で証明書を取らなくても httpsで動くので、その点は良いかもしれません

誰か Jenkins2動かしてください ...