概要
下図のシステムを docker-compose を使って構築する手順.
・Jenkins Master は Docker コンテナで稼働する
・Jenkins Slave は物理ホスト上 (192.168.1.100 と 200 の 2台) で稼働する
手順
1. Jenkins Master の構築
1-1. docker-compose.yml の作成
次の内容で docker-compose.yml を作成する.
使用する Dockerイメージは「jenkins/jenkins:latest」としているが、
トラブルを回避させたければ動作実績がある版を指定した方が良いかと思う.
なお、タイムゾーンの指定方法については自信が無い.
私の場合は下記で成功した、というだけである. 恐らくハマりポイントになりそうな気がする.
version: '3.7'
services:
jenkinsmaster:
container_name: jenkinsmaster
user: root
image: jenkins/jenkins:latest
ports:
- 8080:8080
environment:
JAVA_OPTS: "-Duser.timezone=Asia/Tokyo"
TZ: "Asia/Tokyo"
volumes:
- ./PV/jenkinsmaster/jenkins_home:/var/jenkins_home
- /etc/timezone:/etc/timezone:ro
- /etc/localtime:/etc/localtime:ro
1-2. 永続ボリュームを作成する
$ mkdir -p PV/jenkinsmaster
1-3. Jenkins Master を稼働させる
$ docker-compose up -d
1-4. Jenkins Master の初期セットアップをする
WEB-UI から Plugin インストールなどを済ませる.
1-5. コンテナにログインして秘密鍵・公開鍵を作成する
jenkins アカウントで操作すること
## jenkins アカウントでコンテナにログインする
$ docker-compose exec -u jenkins jenkinsmaster bash
## 以下コンテナ内での作業
## 秘密鍵と公開鍵をパスフレーズなしで作成する
$ cd $HOME
$ ssh-keygen -t rsa -N '' -f .ssh/id_rsa
## 下記で表示される公開鍵の内容をダンプしてコピーしておく
$ cat .ssh/id_rsa.pub
## コンテナからログアウトする
2. Slave マシンのセットアップ
192.168.1.100 (Linux) でのセットアップ例.
192.168.1.100 にはユーザアカウント foo
が存在しているものとする.
2-1. Master からの公開鍵認証による接続を許可しておく
## 192.168.1.100 にアカウント foo でログインして、次の操作をする
$ mkdir -p /home/foo/.ssh
$ sudo chmod 755 /home/foo
$ sudo chmod 700 /home/foo/.ssh
$ echo '上述の id_rsa.pub の内容' >> /home/foo/.ssh/authorized_keys
2-2. Slave の workspace を作成する
## 192.168.1.100 にアカウント foo でログインして、次の操作をする
$ mkdir $HOME/workspace
3. Jenkins WEB-UI で Slave を定義する
「Jenkinsの管理」-「Manage Credentials」より、下表のように入力して「保存」を押す.
(同時実行数を 1 にしているが、変更しても良い)
(1)
「種類」に「SSHユーザー名と秘密鍵」を指定する.
「ユーザー名」には「foo」を入力する.
「直接入力」にチェックを入れて、./PV/jenkinsmaster/jenkins_home/.ssh/id_rsa の中身を貼り付ける.
(2)
「高度な設定」より、「Javaのパス」を開いて「/usr/bin/java」を入力する.
(正確なパスは which java で調べること)
4. Jenkins Master から Slave へ SSH 接続できるかを検証する
## Jenkins Master コンテナにログインする
$ docker-compose exec -u jenkins jenkinsmaster bash
## 以下、コンテナ内での操作である
$ ssh -o 'StrictHostKeyChecking=no' foo@192.168.1.100
## このときパスワードなしでログインできれば成功である
5. Jenkins Slave 192.168.1.200 のセットアップをする
上記 192.168.1.100 と同じ要領でセットアップすれば良い
6. Jenkins Master コンテナを再起動すれば完了
$ docker-compose restart
以上