概要
前述の「01」では、次のように Slave 2台を構築した.
これを所望の台数に複製するバッチである.
今回は 8台へと増やす.
役割 | マシン名 | ホスト側ポート | コンテナ側ポート | 補足 |
---|---|---|---|---|
Jenkins Master | jenkinsmaster | 43080 | 8080 | |
Jenkins Slave(1) | slave001 | - | - | Docker on Docker 可能である |
Jenkins Slave(2) | slave002 | - | - | Docker on Docker 可能である |
手順
1. バッチを準備する
dup-slave.sh
3つの 🛑 の箇所を変更する
・7行目を追加したいマシンの開始番号にする. 今回は 003 とする.
・8行目を追加したいマシンの終了番号にする. 今回は 008 とする.
・14行目付近の PUBKEY の値を、環境に応じて変更すること.
#!/bin/bash
#--------------------------------------------------------------------------------------------------
# 概要:
# slave001 として登録しておいた ssh slaveノードを複製して、新規の ssh slave ノードを立ち上げる
#--------------------------------------------------------------------------------------------------
# slaveノードの開始番号 🛑
SB=003
# slaveノードの終了番号 🛑
EB=008
# Jenkins Master で作成した SSH公開鍵 🛑
PUBKEY='ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDAsJmu753NXhjEtkzMLLAxBs55/nSFJ/SqGooBDrSb06Q1lLRmRUdhj11SjHCTzoMwDt9kL7LE4VuxvVPsXxjU6tc31rAznEqj5i471y08mS94D4CUwsHOQvuo8wJiQOC8TAGyRIgKqaW5RKlDuMjlU6T2GdVRco1AAqSk5f+d0p3kAvYGVXmw7x4HX6fcjZZPVcK+xsDLVYy/073KBPDmsyost57OGeYrxDqzczoL79xQ3klPrqs/ZaO5bojEG6hhILCkqCHVv73eM24iUfxQAAnuIV0FXSahQ4keQrtd3YMbyVDK0iwwAxfmdIyLL+onfoPM8n4TFNWpJ9Gb7ZoV jenkins@eb4672becefc'
echo "DEBUG:"
echo "DEBUG:----------------------------------------------------------------"
echo "DEBUG: docker-compose.yml に対して、新規に slaveノードを追加する"
echo "DEBUG:----------------------------------------------------------------"
# docker-compose.yml に対して、新規に slaveノードを追加する
for N in `seq -w $SB $EB`
do
grep -q "slave$N:" docker-compose.yml && continue # すでに登録済みの slaveノードの場合
echo "DEBUG: docker-compose.yml に slave$N の情報を追記します"
cat <<EOL >> docker-compose.yml
slave$N:
container_name: slave$N
user: root
image: jenkinsci/ssh-slave
volumes:
- ./PV/jenkinsslave/slave$N:/var/jenkins_home
environment:
- JENKINS_SLAVE_SSH_PUBKEY=$PUBKEY
EOL
done
echo "DEBUG:"
echo "DEBUG:----------------------------------------------------------------"
echo "DEBUG: 作成した slave を稼動させる"
echo "DEBUG:----------------------------------------------------------------"
echo "DEBUG: docker-compose up -d"
docker-compose up -d
echo "DEBUG:"
echo "DEBUG:----------------------------------------------------------------"
echo "DEBUG: 既存の slaveノード情報を複製して、新規 slaveノードを立ち上げる"
echo "DEBUG:----------------------------------------------------------------"
for N in `seq -w $SB $EB`
do
test -d PV/jenkinsslave/slave$N && {
# 作成した slave の永続ボリュームの所有権を「1000:1000」にする
echo "DEBUG: sudo chown -R 1000:1000 PV/jenkinsslave/slave$N"
sudo chown -R 1000:1000 PV/jenkinsslave/slave$N
# Jenkins Master に slave ノード情報を作成する
echo "DEBUG: sudo mkdir -p PV/jenkinsmaster/jenkins_home/nodes/slave$N"
sudo mkdir -p PV/jenkinsmaster/jenkins_home/nodes/slave$N
# Jenkins Master に作成した slave ノード情報の所有権を「1000:1000」にする
echo "DEBUG: sudo chown -R 1000:1000 PV/jenkinsmaster/jenkins_home/nodes/slave$N"
sudo chown -R 1000:1000 PV/jenkinsmaster/jenkins_home/nodes/slave$N
# 個々の slave の設定を作成する
echo "DEBUG: sudo cp -p PV/jenkinsmaster/jenkins_home/nodes/slave001/config.xml PV/jenkinsmaster/jenkins_home/nodes/slave$N/config.xml"
sudo cp -p PV/jenkinsmaster/jenkins_home/nodes/slave001/config.xml PV/jenkinsmaster/jenkins_home/nodes/slave$N/config.xml
echo "DEBUG: sudo sed -i -r -e \"s%<name>(.*)</name>%<name>slave$N</name>%g\" \\
-e \"s%<host>(.*)</host>%<host>slave$N</host>%g\" \\
-e \"s%<label>(.*)</label>%<label>slave$N</label>%g\" PV/jenkinsmaster/jenkins_home/nodes/slave$N/config.xml"
sudo sed -i -r -e "s%<name>(.*)</name>%<name>slave$N</name>%g" \
-e "s%<host>(.*)</host>%<host>slave$N</host>%g" \
-e "s%<label>(.*)</label>%<label>slave$N</label>%g" PV/jenkinsmaster/jenkins_home/nodes/slave$N/config.xml
}
done
echo "DEBUG:"
echo "DEBUG:----------------------------------------------------------------"
echo "DEBUG: Jenkins Master を再起動させて、新規に追加した slave ノードのマシン名が認識できるようにする"
echo "DEBUG:----------------------------------------------------------------"
echo "DEBUG: docker-compose restart jenkinsmaster"
docker-compose restart jenkinsmaster
echo "# Jenkins Master から新規 slave ノードに ssh 接続をして、knows_hosts に該当の slave ノード情報を登録する"
for N in `seq -w $SB $EB`
do
echo "DEBUG: docker-compose exec -u jenkins jenkinsmaster bash -c \"ssh -o 'StrictHostKeyChecking=no' slave$N hostname\""
docker-compose exec -u jenkins jenkinsmaster bash -c "ssh -o 'StrictHostKeyChecking=no' slave$N hostname"
done
echo "DEBUG:"
echo "DEBUG:----------------------------------------------------------------"
echo "DEBUG: Jenkins Master を再起動させて、新規に追加した slave ノードに対して ssh 接続をする"
echo "DEBUG:----------------------------------------------------------------"
echo "DEBUG: docker-compose restart jenkinsmaster"
docker-compose restart jenkinsmaster
2. バッチを実行する
$ ./dup-slave.sh
3. slave が複製されていればOK
以上.