- マスター/スレーブ構成のJenkinsをローカル環境にdocker-composeで構築する手順をメモする。
Jenkins 構成
-
マスターノードとスレーブノードの2コンテナで構成する。
-
マスターノード : Jenkinsがインストールされたコンテナ
-
スレーブノード:マスターに操作されるコンテナ
※ビルド/実行環境などを分けたいときに利用する。
-
前提条件
- docker/docker-composeはインストール済みであること。
- 以下の構成のフォルダで作業する。
jenkins ____ jenkins_home # マウント場所。docker-compose up実行時に生成される。
L__ docker-compose.yml
L__ Dockerfile_SLAVE # スレーブ用Dockerfile
作成手順
1. マスターコンテナ作成
-
docker-compose.ymlを用意する。※後でスレーブ用設定を追加する。
version: "3" services: jenkins_master: container_name: jenkins_master image: jenkins/jenkins:latest ports: - 18080:8080 volumes: - ./jenkins_home:/var/jenkins_home
-
マスターコンテナを起動する。
- docker-compose.ymlを配置しているフォルダ内で以下のコマンドを実行する。
docker-compose up -d
-
マスターコンテナに入る。
docker exec -it <コンテナID> /bin/bash
-
管理者パスワードを取得する。
cat /var/jenkins_home/secrets/initialAdminPassword
-
SSH認証キーを作成する。
ssh-keygen -t rsa -C ""
-
jenkins_home/.ssh/
にid_rsa
(秘密鍵)、id_rsa.pub
(公開鍵)が生成される。
-
-
マスターコンテナを停止する。
exit docker-compose stop
2. スレーブコンテナ作成
-
スレーブコンテナ用Dockerfileを作成し、
docker-compose.yml
と同一フォルダに配置する。FROM jenkinsci/ssh-slave RUN ln -s /usr/local/openjdk-8/bin/java /usr/local/bin/java
※Java のパスを通す。
-
docker-compose.yml
を修正する。- スレーブコンテナ用サービス設定を追加する。※以下は最終的な
docker-compose.yml
version: "3" services: jenkins_master: container_name: jenkins_master image: jenkins/jenkins:latest ports: - 18080:8080 volumes: - ./jenkins_home:/var/lib/jenkins_home links: - jenkins_slave01 jenkins_slave01: container_name: jenkins_slave01 build: context: . dockerfile: Dockerfile_SLAVE environment: - JENKINS_SLAVE_SSH_PUBKEY= #前述のid_rsa.pubの値を指定する。
- スレーブコンテナ用サービス設定を追加する。※以下は最終的な
3. 起動
-
コンテナ起動
docker-compose up -d
-
起動確認
docker-compose ps Name Command State Ports --------------------------------------------------------------------------------------------- jenkins_master /sbin/tini -- /usr/local/b ... Up 50000/tcp, 0.0.0.0:18080->8080/tcp jenkins_slave01 setup-sshd Up 22/tcp
-
URL:http://localhost:18080/にアクセスする。
-
新規ノード追加などの設定を行う。
※「[SSH] No Known Hosts file was found at /var/lib/jenkins/.ssh/known_hosts. Please ensure one is created at this path and that Jenkins can read it. Key exchange was not finished, connection is closed.」のようなエラーが出て、上手くスレーブと接続できなかったが、ノード->スレーブ->起動方法の「Host Key Verification Strategy」を「Manually trusted key Verification Strategy」に変更することで接続できた。
-