1
3

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.

[01] docker-compose を使って同一物理マシン上に Jenkins Master(docker) - Slave(docker) [SSH通信]を構築する

Last updated at Posted at 2021-10-03

概要

次のように同一物理マシン上に、Jenkins Master と Slave (共に Docker) を構築する.
この環境は Pipeline を書くときの動作検証などに便利である.

image.png

役割 マシン名 ホスト側ポート コンテナ側ポート 補足
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 より、「新規ノード作成」で下図のように入力する.

image.png

「認証情報」より次のように入力する.
下図中の「リモートFSルート」は “Slave コンテナ内でのパス” である.

image.png

5-2.

次の要領で上記 4-3 でコピーした秘密鍵の内容を貼り付ける

image.png

5-3.

「高度な設定」より Java のパスを設定する.
パスの確認方法は、Slave コンテナにログインをして which java をすれば良い.

image.png

image.png

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.

image.png

9. PV を丸ごとバックアップしておく

PV を丸ごとコピーしておけば、今後、別 PC でも即座に構築できる

|-- docker-compose.yml
`-- PV/
    |-- jenkinsmaster
    |   `-- jenkins_home
    `-- jenkinsslave
        |-- slave001
        `-- slave002

 

以上

1
3
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
1
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?