togatttiのエンジニアメモ

過度な期待はしないでください.

JenkinsをDocker環境にリプレイスする

JenkinsサーバをDockerコンテナとしてリプレイスする手順を示す。

前提

Dockerコンテナとして、Jenkinsを稼働

docker-machine を使いDockerホストを立ち上げる。

ドライバーはVirtualBoxを使う。

$ brew install docker-machine
$ docker-machine create --driver virtualbox dev
$ docker-machine ssh dev

IPは、後々使うので、メモしておく。

docker@dev:~$ ifconfig eth1 | grep 'inet addr'
          inet addr:192.168.99.100  Bcast:192.168.99.255  Mask:255.255.255.0

Jenkinsサーバをコンテナとして、起動させる。

この記事が参考になった。

knjname.hateblo.jp

Jenkinsのデータを永続させるためのディレクトリをDockerホストに作成して、起動させる。

$ mkdir /var/lib/jenkins
$ docker run -p 8080:8080 -v /var/lib/jenkins/:/var/jenkins_home jenkins

起動できると、http://192.168.99.100:8080 でブラウザからアクセスできる。

確認したら、Ctrl+Cで、抜ける。

Jenkinsのバックアップデータ移行

${JENKINS_HOME} は、jenkinsのホームディレクトリのパスを示す。

コンテナにはいる。

$ docker run -v /var/lib/jenkins/:/var/jenkins_home -it jenkins bash

Jenkinsサーバのバックアップデータの移動手順は、割愛する。

Dockerコンテナにリプレイスする際に、以下のバックアップデータが必要なので、Dockerコンテナの /tmp に配置する。

  • ThinBackupプラグインで、作成する FULL-${yyyy}-${mm}-${dd}_${HH}-${MM}のディレクトリ
  • ${JENKINS_HOME}/plugins ディレクトリ

データをDockerコンテナ内の ${JENKINS_HOME} に展開する。

$ cp -pr /tmp/FULL-2016-03-08_12-00/* /var/jenkins_home/
$ cp -pr /tmp/plugins /var/jenkins_home/

以上で、データ移行が完了。

ただし、過去のビルド履歴が残っている場合、ビルド時にエラーが出る。

SEVERE: Unexpected executor death
java.lang.IllegalStateException: /var/jenkins_home/jobs/test_job/builds/2 already existed;

この場合は、ビルド履歴は削除しておく必要がある。

$ rm -rf /var/jenkins_home/jobs/test_job/builds
$ echo '1' > /var/jenkins_home/jobs/test_job/nextBuildNumber

コンテナをCtrl+Cで抜けてから、デーモンとして、Jenkinsを起動させる。

$ docker run -d -p 8080:8080 -v /var/lib/jenkins/:/var/jenkins_home jenkins

以上で、リプレイス完了。

参考

kakakikikekeのブログ: Jenkinsでビルド履歴をすべて削除する方法