[02] docker-composeを活用して即座にJenkinsを立てて使ってみる ... 1マスタ、3スレーブ


# 留意事項

本手順を実施する場合は、次のように読み替えること.

・アカウント名の「`robozushi10`」を各ユーザのアカウントにする

・ホストIP「`192.168.10.115`」を各ユーザの IP やホスト名にする
　

# 概要

[前回](https://qiita.com/robozushi10/items/5d98d0fce0ab22e4850c) からの発展で、次の構成の Jenkins on Docker のセットアップ手順である.

// 私の場合は Slave が 3つあれば間に合うことが多い

一度構築すれば、他のホスト上でも一部書き換えるだけ※ でセットアップができる.
(※ ホストIP の書き換えのみ)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1246056/4b49fb73-d4b2-b284-ed3c-a4b11ae5c5ac.png)



|役割|ホスト側ポート|コンテナ側ポート|補足|
|:--|:--|:--|:--|
|Jenkins Master|43080|43080||
|Jenkins Slave(1)| - | - |Docker on Docker 可能である|
|Jenkins Slave(2)| - | - |Docker on Docker 可能である|
|Jenkins Slave(3)| - | - |Docker on Docker 可能である|


　

　

# 手順


## 1. 前回起動させたコンテナおよびイメージを一掃する

```bash
$ docker-compose down --rmi all  --volumes --remove-orphans
```

このとき、ホスト上から見たデータは次のようになっている

```bash
.
|-- PV
|   |-- jenkinsmaster
|   |   `-- jenkins_home
|   |       |-- 以下略
|   `-- jenkinsslave1
|       |-- agent
|       |-- agent.jar
|       |-- remoting
|       `-- secret-file
`-- docker-compose.yml
```

　

## 2. 素の Jenkins on Docker を起動させる


### 1. docker-compose.yml を変更する

[前回](https://qiita.com/robozushi10/items/5d98d0fce0ab22e4850c) のコードに対して、次の変更を加える.

```diff
--- a/docker-compose.yml
+++ b/docker-compose.yml
@@ -20,3 +20,21 @@ services:
       - /var/run/docker.sock:/var/run/docker.sock
       - /usr/bin/docker:/usr/bin/docker:ro
     command: /bin/bash -c 'java -jar /home/jenkins/agent.jar -jnlpUrl http://jenkinsmaster:43080/computer/slave1-local/jenkins-agent.jnlp -secret @/home/jenkins/secret-file -workDir "/home/jenkins"'
+  jenkinsslave2:
+    container_name: myjenkinsslave2
+    user: root
+    image: jenkinsci/slave
+    volumes:
+      - ./PV/jenkinsslave2:/home/jenkins
+      - /var/run/docker.sock:/var/run/docker.sock
+      - /usr/bin/docker:/usr/bin/docker:ro
+    command: /bin/bash -c 'java -jar /home/jenkins/agent.jar -jnlpUrl http://jenkinsmaster:43080/computer/slave2-local/jenkins-agent.jnlp -secret @/home/jenkins/secret-file -workDir "/home/jenkins"'
+  jenkinsslave3:
+    container_name: myjenkinsslave3
+    user: root
+    image: jenkinsci/slave
+    volumes:
+      - ./PV/jenkinsslave3:/home/jenkins
+      - /var/run/docker.sock:/var/run/docker.sock
+      - /usr/bin/docker:/usr/bin/docker:ro
+    command: /bin/bash -c 'java -jar /home/jenkins/agent.jar -jnlpUrl http://jenkinsmaster:43080/computer/slave3-local/jenkins-agent.jnlp -secret @/home/jenkins/secret-file -workDir "/home/jenkins"'

```


　

### 2. docker-compose up -d を実行する

```bash
$ docker-compose ps
     Name                    Command               State                                     Ports                                 
-----------------------------------------------------------------------------------------------------------------------------------
myjenkinsmaster   /sbin/tini -- /usr/local/b ...   Up       0.0.0.0:43000->43000/tcp, 0.0.0.0:43080->43080/tcp, 50000/tcp, 8080/tcp
myjenkinsslave1   /bin/bash -c java -jar /ho ...   Up                                                                              
myjenkinsslave2   /bin/bash -c java -jar /ho ...   Exit 1                                                                       
myjenkinsslave3   /bin/bash -c java -jar /ho ...   Exit 1
```

　

　

## 3. WEB-UI で localhost:43080 にログインして「slave2-local」を追加登録する

### 1. 「slave2-local」を登録する

下記 URL にアクセスして、下図の要領で登録する.

`http://localhost:43080/computer/new`

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1246056/edce74cf-c7f1-e63f-ddad-44b81a21ce50.png)

　

### 2. パラメータを設定する

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1246056/4b740cb1-4b95-d858-3641-0a24784862e8.png)![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1246056/f1dc650a-3326-efa3-08f3-dfb703f926f1.png)

　

### 3. 「slave3-local」のパラメータを控えておく

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1246056/166807f5-c418-210e-4a1b-927b4c5044fd.png)

　

### 4. ホストで次を実行する

上記で表示されたシークレットを、./PV/jenkinsslave2/secret-file として書き出す.

```bash
$ cat <<'EOL' | sudo tee PV/jenkinsslave2/secret-file
ca5900b9f1a887405b35d7c52410652326ceb896d4c5b0033c269c43940ba018
EOL
```

　

### 5. Slave上に agent.jar を配置する

ホストで次の操作をして `./PV/jenkinsslave2/agent.jar` として配置する.

```
$ sudo wget http://localhost:43080/jnlpJars/agent.jar -O PV/jenkinsslave2/agent.jar
```

　

　

## 4. WEB-UI で localhost:43080 にログインして「slave3-local」を追加登録する

上記 2 と同じ要領で「slave3-local」を登録する.

　

　

## 5. コンテナ群を再起動する

```bash
$ docker-compose restart
Restarting myjenkinsmaster ... done
Restarting myjenkinsslave1 ... done
Restarting myjenkinsslave3 ... done
Restarting myjenkinsslave2 ... done
```

次のように表示されていれば OK.

```bash
$ docker-compose ps
     Name                    Command               State                                    Ports                                 
----------------------------------------------------------------------------------------------------------------------------------
myjenkinsmaster   /sbin/tini -- /usr/local/b ...   Up      0.0.0.0:43000->43000/tcp, 0.0.0.0:43080->43080/tcp, 50000/tcp, 8080/tcp
myjenkinsslave1   /bin/bash -c java -jar /ho ...   Up                                                                             
myjenkinsslave2   /bin/bash -c java -jar /ho ...   Up                                                                             
myjenkinsslave3   /bin/bash -c java -jar /ho ...   Up   
```

　

　

## 5. Slave 2台が起動していることを確認する

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1246056/f25de921-f59c-3000-c062-5d053b1ea960.png)

　

以上

　

　

# 参考サイトおよび書籍

|URL|
|:--|
|https://www.slideshare.net/miyajan/jenkins-61133952|
|https://qiita.com/sugiyasu-qr/items/85a1bedb6458d4573407|
|[［改訂第3版］Jenkins実践入門](https://gihyo.jp/book/2017/978-4-7741-8928-4)|