0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

[02] 前述[01]で構築した Jenkins Master(docker) - Slave(docker) [SSH通信] の Slave を複製するバッチ

Last updated at Posted at 2021-10-03

概要

前述の「01」では、次のように Slave 2台を構築した.
これを所望の台数に複製するバッチである.
今回は 8台へと増やす.

image.png

役割 マシン名 ホスト側ポート コンテナ側ポート 補足
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

image.png

 

以上.

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?