概要
次のように同一物理マシン上に、Jenkins Master と Slave (共に Docker) を構築する.
この環境は Pipeline を書くときの動作検証などに便利である.
役割 | マシン名 | ホスト側ポート | コンテナ側ポート | 補足 |
---|---|---|---|---|
Jenkins Master | jenkinsmaster | 43080 | 8080 | |
Jenkins Slave(1) | slave001 | - | - | Docker on Docker 可能である |
Jenkins Slave(2) | slave002 | - | - | Docker on Docker 可能である |
手順
1. docker-compose.yml を作成する
version: '3.7'
services:
jenkinsmaster:
container_name: jenkinsmaster
user: root
image: jenkins/jenkins:latest
ports:
- 34080:8080
volumes:
- ./PV/jenkinsmaster/jenkins_home:/var/jenkins_home
slave001:
container_name: slave001
user: root
image: jenkinsci/ssh-slave
volumes:
- ./PV/jenkinsslave/slave001:/var/jenkins_home
environment:
- JENKINS_SLAVE_SSH_PUBKEY= # 🛑今は空で良い
slave002:
container_name: slave002
user: root
image: jenkinsci/ssh-slave
volumes:
- ./PV/jenkinsslave/slave002:/var/jenkins_home
environment:
- JENKINS_SLAVE_SSH_PUBKEY= # 🛑今は空で良い
2. docker-compose up -d を実行する
Master と slave001、slave002 を稼働させる.
ただし、この時点では Master と slave001、slave002 は通信できていない.
$ docker-compose up -d
3. Master のセットアップをする
http://IP:34080/
にアクセスして、管理者権限を作成したり Plugin をインストールしたりする.
4. Master で RSA 公開鍵・秘密鍵ペアを作成する
4-1.
以下を実行すると、コンテナ内に公開鍵と秘密鍵がパスフレーズなしで作成される.
$ docker-compose exec -u jenkins jenkinsmaster \
bash -c 'ssh-keygen -t rsa -N "" -f /var/jenkins_home/.ssh/id_rsa`
4-2.
下記で表示される公開鍵の内容をコピーしておく.
$ docker-compose exec -u jenkins jenkinsmaster \
bash -c 'cat /var/jenkins_home/.ssh/id_rsa.pub`
ssh-rsa AAAAB3NnnE4xa3EAAAADAQABAAABAQDAsJmu753NXhjEtkzMLLAxBs55/nSFJ/SqGooBDrSb06Q1lLRmRUdhj11SjHCTzoMwDt9kL7LE4VuxvVPsXxjU6tc31rAznEqj5i471y08mS94D4CUwsHOQvuo8wJiQOC8TAGyRIgKqaW5RKlDuMjlU6T2GdVRco1AAqSk5f+d0p3kAvYGVXmw7x4HX6fcjZZPVcK+xsDLVYy/073KBPDmsyost57OGeYrxDqzczoL79xQ3klPrqs/ZaO5bojEG6hhILCkqCHVv73eM24iUfxQAAnuIV0FXSahQ4keQrtd3YMbyVDK0iwwAxfmdIyLL+onfoPM8n4TFNWpJ9Gb7ZoV jenkins@be4702aeaecc
表示された内容を、上述の docker-compose.yml の「JENKINS_SLAVE_SSH_PUBKEY=」に定義してやる. (下記参考)
version: '3.7'
services:
jenkinsmaster:
container_name: jenkinsmaster
user: root
image: jenkins/jenkins:latest
ports:
- 34080:8080
- 34000:34000 #! slave との通信ポート
volumes:
- ./PV/jenkinsmaster/jenkins_home:/var/jenkins_home
slave001:
container_name: slave001
user: root
image: jenkinsci/ssh-slave
volumes:
- ./PV/jenkinsslave/slave001:/var/jenkins_home
environment:
- JENKINS_SLAVE_SSH_PUBKEY=ssh-rsa AAAAB3NnnE4xa3EAAAADAQABAAABAQDAsJmu753NXhjEtkzMLLAxBs55/nSFJ/SqGooBDrSb06Q1lLRmRUdhj11SjHCTzoMwDt9kL7LE4VuxvVPsXxjU6tc31rAznEqj5i471y08mS94D4CUwsHOQvuo8wJiQOC8TAGyRIgKqaW5RKlDuMjlU6T2GdVRco1AAqSk5f+d0p3kAvYGVXmw7x4HX6fcjZZPVcK+xsDLVYy/073KBPDmsyost57OGeYrxDqzczoL79xQ3klPrqs/ZaO5bojEG6hhILCkqCHVv73eM24iUfxQAAnuIV0FXSahQ4keQrtd3YMbyVDK0iwwAxfmdIyLL+onfoPM8n4TFNWpJ9Gb7ZoV jenkins@be4702aeaecc
slave002:
container_name: slave002
user: root
image: jenkinsci/ssh-slave
volumes:
- ./PV/jenkinsslave/slave002:/var/jenkins_home
environment:
- JENKINS_SLAVE_SSH_PUBKEY=ssh-rsa AAAAB3NnnE4xa3EAAAADAQABAAABAQDAsJmu753NXhjEtkzMLLAxBs55/nSFJ/SqGooBDrSb06Q1lLRmRUdhj11SjHCTzoMwDt9kL7LE4VuxvVPsXxjU6tc31rAznEqj5i471y08mS94D4CUwsHOQvuo8wJiQOC8TAGyRIgKqaW5RKlDuMjlU6T2GdVRco1AAqSk5f+d0p3kAvYGVXmw7x4HX6fcjZZPVcK+xsDLVYy/073KBPDmsyost57OGeYrxDqzczoL79xQ3klPrqs/ZaO5bojEG6hhILCkqCHVv73eM24iUfxQAAnuIV0FXSahQ4keQrtd3YMbyVDK0iwwAxfmdIyLL+onfoPM8n4TFNWpJ9Gb7ZoV jenkins@be4702aeaecc
4-3.
下記で表示される秘密鍵の内容をコピーしておく.
$ docker-compose exec -u jenkins jenkinsmaster \
bash -c 'cat /var/jenkins_home/.ssh/id_rsa`
略
5. Slave のセットアップをする
slave002 の場合を例にする (slave001
も同じ要領で作成すれば良い)
5-1.
WEB-UI より、「新規ノード作成」で下図のように入力する.
「認証情報」より次のように入力する.
下図中の「リモートFSルート」は “Slave コンテナ内でのパス” である.
5-2.
次の要領で上記 4-3 でコピーした秘密鍵の内容を貼り付ける
5-3.
「高度な設定」より Java のパスを設定する.
パスの確認方法は、Slave コンテナにログインをして which java
をすれば良い.
6. Slave 用の永続ボリュームの権限を 1000:1000 に変える
コンテナ内の UID, GID 1000 は jenkins である.
$ sudo chown -R 1000:1000 PV/jenkinsslave/slave002
7. Master を再起動する
$ docker-compose restart jenkinsmaster
8. Slave と通信できていれば OK
WEB-UI から次のようになっていれば OK.
9. PV を丸ごとバックアップしておく
PV を丸ごとコピーしておけば、今後、別 PC でも即座に構築できる
|-- docker-compose.yml
`-- PV/
|-- jenkinsmaster
| `-- jenkins_home
`-- jenkinsslave
|-- slave001
`-- slave002
以上