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


# 留意事項

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

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

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

# 概要

次の構成の Jenkins on Docker のセットアップ手順である.

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

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1246056/f8542fb2-0178-31e3-f12d-4aec7b449f7d.png)

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


　

　

# 手順


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


### 1. docker-compose.yml を作成する.

```yaml
version: "3"
services:
  jenkinsmaster:
    container_name: myjenkinsmaster
    user: root
    image: jenkins/jenkins:latest
    environment:
      - JENKINS_OPTS="--httpPort=43080"
    ports:
      - 43080:43080
      - 43000:43000
    volumes:
      - ./PV/jenkinsmaster/jenkins_home:/var/jenkins_home
  jenkinsslave1:
    container_name: myjenkinsslave1
    user: root
    image: jenkinsci/slave
    volumes:
      - ./PV/jenkinsslave1:/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/slave1-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  
```

　

　

## 2. WEB-UI で localhost:43080 にログインする

### 1. 初期ログインパスワードを入手する

```bash
$ docker-compose exec jenkinsmaster bash -c 'cat /var/jenkins_home/secrets/initialAdminPassword'
87e4804b07124cbf934d3c9346378de2
```

　

### 2. 推奨プラグインをインストールする

300MB ほどディスクを喰うが仕方ない.

　

### 3. 管理者アカウントを作成する

「Create First Admin User」で管理者アカウントを作る.
今回は次のアカウントを作成した.

```
アカウント ... root
パスワード ... rootroot
```

　

　

## 3. 開発用アカウントを作成する

### 1. アカウント作成

http://localhost:43080/securityRealm/addUser にアクセスして開発用アカウントを作成する.
今回は次のアカウントを作成した.

```
アカウント ... robozushi10
パスワード ... robozushi10
```

　

### 2. APIキーを作成する

下記にアクセスして「APIトークン」を「生成」してから「保存」する.

`http://localhost:43080/user/robozushi10/configure`

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1246056/c2fa8800-82e2-3d13-9542-8df5ec43b9d6.png)

「APIトークン」生成したら控えておくこと.

`115055bf04f7f0508abacc987625165188`

　

　

## 4. Jenkins Master の設定をする

### 1. Jenkins URL を設定する

「`Jenkinsの管理`」→「`システムの設定`」より、
ホストの IPアドレス「192.168.10.115」を設定する.

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1246056/8c432de3-2cfc-280d-e7c3-e357947b6c99.png)


　

　

## 5. 新規ノード「slave1-local」を立ち上げる

### 1. 「slave1-local」を作成する

http://localhost:43080/computer/new にアクセスして、ノード名で「slave1-local」でノードを作成する.

このとき次のようにする.

|項目|値|補足|
|:--|:--|:--|
|リモートFSルート|「/home/jenkins」と入力する|docker-compose.yml での volumes と合わせている|
|ラベル|「slave1」と入力する||
|用途|「このマシンを特定ジョブ専用にする」を選択する||
|起動方法|「Launch agent by connecting it to the master」を選択する||

　

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

作成したノード「`slave1-local`」の状態確認ページ(下記) を開いて起動パラメータを控える.

`http://localhost:43080/computer/slave1-local/`

次のような情報が表示されているので控えておく.

```
echo 93d7204e5036a10274696a371cb5531747056ec637d50b1aa7691217e8a5ee9b > secret-file
java -jar agent.jar -jnlpUrl http://localhost:43080/computer/slave1-local/jenkins-agent.jnlp -secret @secret-file -workDir "/home/jenkins"
```

　

### 3. Agents のポート番号を 43080 へと変更する

下記「グローバルセキュリティの設定」より、
「`Agents`」のポート番号を「`50000`」から「`43000`」へと変更する.

`http://localhost:43080/configureSecurity/`

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1246056/6e1b2f60-f2e0-5ee5-39f2-655a44004090.png)

　

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

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

```bash
$ cat <<'EOL' | sudo tee PV/jenkinsslave1/secret-file
93d7204e5036a10274696a371cb5531747056ec637d50b1aa7691217e8a5ee9b
EOL
```

　

　

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

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

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

　

　

### 6. Jenkins を再起動させる

```bash
$ sudo docker-compose restart
```

　

以上.

　

　

# デバッグ

## Master と Slave が繋がらない場合

ホストで次のように実行して接続可能かチェックをすれば良い.

```
$ java -jar PV/jenkinsslave1/agent.jar -jnlpUrl http://localhost:43080/computer/slave1-local/jenkins-agent.jnlp -secret 93d7204e5036a10274696a371cb5531747056ec637d50b1aa7691217e8a5ee9b
```

　

# 参考サイト

|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)|