2016/05/15

稼働中のJenkins2コンテナに接続する方法

Jenkins2をDocker imageから起動してコンテナ運用している時, そのコンテナにアタッチしてbash操作したい場合があります.

次のようにJenkinsコンテナを起動します.

docker run --name jenkins2.3 --volumes-from j_storage -p 8080:8080 -p 50000:50000 jenkins:2.3

docker psでjenkins2.3が起動していることを確認し, 次のコマンドでコンテナに接続しましょう. bashプロンプトが表示されたら成功です.

docker exec -it <JENKINS CONTAINER NAME> bash

docker attach

docker attachでこのコンテナに接続&bashを試みますがプロンプトは現れません.

docker attach jenkins2.3

JenkinsのDockerfileのENTRYPOINTを見るとjenkins.shを実行するようになっています.
docker runでコマンドも指定していませんので, docker attachはこれに接続することになります.

ENTRYPOINT ["/bin/tini", "--", "/usr/local/bin/jenkins.sh"]

以上です.

Jenkins2のソフトウェアアップデート

Dockerから起動したJenkinsにソフトウェアアップデートがあった場合にそれを適用する方法です.

Jenkinsのアップデート情報はJenkins管理画面で通知されてjenkins.warのダウンロードリンクが示されます.
サーバ上でjenkins.warを指定してJenkinsサーバを起動している場合はこれを置き換えるだけで済みますが, Jenkins公式のDocker imageを使ってコンテナ上にJenkinsサーバを起動している場合は違うアプローチが必要です.

今回のJenkins on Containerは次の内容で起動しています.

// jenkins用のData Volume Containerを用意
docker run -v /var/jenkins_home --name j_storage ubuntu /bin/bash

// jenkins user用にディレクトリのアクセス権限を設定
docker exec j_storage chown 1000 /var/jenkins_home

// jenkinsコンテナをData Volume Container指定して起動
docker run --volumes-from j_storage -p 8080:8080 -p 50000:50000 jenkins:2.0

Jenkinsコンテナの起動方法は何種類かあります.

  • コンテナ内にデータを格納する方法
  • ホスト側のディレクトリをコンテナの/var/jenkins_homeにマウントする方法
  • Data Volume Container(/var/jenkins_home)をマウントする方法

そして, コンテナにあるJenkinsのバージョンをアップデートする方法も何種類かあります.

  • 直接jenkins.warを書き換える
  • 新しいJenkinsバージョンに対応したDocker imageをpullする

コンテナの思想を考えると推奨されるのは後者です. 前者だとコンテナのポータビリティを活かせません.

// 新しいバージョンのjenkins docker imageを取得
docker pull jenkins:2.3

// 新しいバージョンのjenkins containerを起動
// 現行のjenkinsで使用していたData Volumeを指定すること
docker run --name jenkins2.3 --volumes-from j_storage -p 8080:8080 -p 50000:50000 jenkins:2.3

Jenkinsのバージョンアップで注意することは, Jenkinsのコンテナを起動する際にコンテナ内にデータを保存する方法だと, 新しいDocker imageでも使えるようにデータを引き継ぐ必要があるということです.

docker cp $CONTAINER_ID:/var/jenkins_home

ホストディレクトリのマウントやData Volume Containerでデータ部を外からマウントしている場合は, 新しいJenkins バージョンのコンテナを起動する際にそれをマウントするだけで済みます.

Jenkinsの起動についてはこちらもあわせてお読みください.
Yukiの枝折 - Get Started Jenkins2

以上です.