JenkinsをDocker環境にリプレイスする
JenkinsサーバをDockerコンテナとしてリプレイスする手順を示す。
前提
- Jenkinsのバックアップは、ThinBackUpプラグインを使用して取得
- Jenkinsのプラグインは、ThinBackupではバックアップされないので、手動で取得
- Dockerホストは、ローカルのMacOSで、docker-machineを使い稼働
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サーバをコンテナとして、起動させる。
この記事が参考になった。
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
以上で、リプレイス完了。