- 追加された行はこの色です。
- 削除された行はこの色です。
#author("2018-08-13T07:17:27+00:00","default:masatomix","masatomix")
#topicpath
----
** Masterサーバの構築。 [#r9f5d1ae]
#contents
** まずはMasterサーバの構築。 [#r9f5d1ae]
JenkinsのMasterサーバをポート8080でたててみます。その際Jenkinsのホームディレクトリは外から参照可能に設定しておきます。ログも同様、外から見える位置に配置しています。
# mkdir -p /docker/hostvolumes/jenkins && chown 1000:1000 /docker/hostvolumes/jenkins
# docker run --name jenkins \
-d \
-p 8080:8080 \
-p 50000:50000 \
-v /docker/hostvolumes/jenkins:/var/jenkins_home \
-e JENKINS_OPTS="--prefix=/jenkins" \
jenkins --logfile=/var/jenkins_home/jenkins.log
jenkins/jenkins:lts --logfile=/var/jenkins_home/jenkins.log
http://DockerのIP:8080/jenkins でアクセス可能になりました。
初回アクセス時に Administrator password を入れろと出ますが、
# cat /docker/hostvolumes/jenkins/secrets/initialAdminPassword
xxxx
この値を入れればOKです。
** Slaveの追加。 [#m287a3e6]
おなじDocker上のコンテナは、--linkとかを使わない限り、基本的には他のコンテナを参照できないし、また、おなじDocker上のコンテナを追加してもスケールアウトにならないので、ココでは別Docker上のコンテナをMasterに追加してみます。
MasterサーバにSlaveを追加する際、Docker上のLinuxコンテナを指定してみます。SlaveノードをDocker管理下にすることによって、必要な時に必要なぶんSlaveを増やすとか柔軟な対応が可能になりそうです。
また、おなじDocker上のコンテナは、--linkとかを使わない限り、基本的には他のコンテナを参照できないし、また、おなじDocker上のコンテナを追加してもスケールアウトにならないので、ココでは別Docker上のコンテナをMasterに追加してみます((というか参考にさせていただいたサイトのやり方だと、こちらの環境ではDockerを分けないとうまくいかないんですよね、、、))。
***Slave用Linuxコンテナを準備。 [#g80c16cc]
*** Slave用Linuxコンテナを準備。 [#g80c16cc]
SlaveにするコンテナはUbuntuをベースに、JDKとOpenSSHサーバを追加しています。MasterサーバはSlaveに対して公開鍵方式でSSHアクセスするので、SSHの公開鍵も作成して配置しています。
# cat Dockerfile
FROM ubuntu
MAINTAINER masatomix
RUN apt-get update
RUN apt-get install -y openjdk-8-jdk
RUN apt-get install -y openssh-server
ADD dot_ssh /root/.ssh
RUN mkdir -p /var/run/sshd
RUN apt-get install -y gcc graphviz ruby
RUN mkdir -p /jenkins/workspace
CMD ["/usr/sbin/sshd","-D"]
MasterがSlaveにSSHでログインする時に使用するキーペアのうち公開鍵を置いておきます。このファイルはDockerがビルドされる時にイメージ内にコピーされます。
# ls -lrt dot_ssh/authorized_keys
-rw------- 1 root root 745 May 27 11:24 dot_ssh/authorized_keys
ちなみにこの公開鍵と秘密鍵のキーペアは、コマンドで
# ssh-keygen -t rsa -b 4096 -C "masatomix@ki-no.org"
Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /root/.ssh/id_rsa.
Your public key has been saved in /root/.ssh/id_rsa.pub.
... 割愛
# cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
などとして作成します。公開鍵が id_rsa.pub 、秘密鍵が id_rsa ですね。くわしくは [[こちら>Network/ssh]]
別サーバのDockerでビルドして、そしてコンテナを起動します。
# docker build --no-cache -t jenkins-slave .
# mkdir /docker/hostvolumes/jenkins-slave01 && chown 1000:1000 /docker/hostvolumes/jenkins-slave01
# docker run --name \
"jenkins-slave01" \
-d \
-p 10022:22 \
-v /docker/hostvolumes/jenkins-slave01:/jenkins/workspace jenkins-slave
# docker ps
CONTAINER ID IMAGE COMMAND 略 PORTS NAMES
xxxxxxxxxxxxxx jenkins-slave "/usr/sbin/sshd -D" 0.0.0.0:10022->22/tcp jenkins-slave01
起動完了です。
*** MasterのJenkinsのUIで、Slaveノードを追加。 [#t4db03b3]
認証情報 >> System >> グローバルドメイン >> 認証情報の追加
で表示される認証情報の設定画面で下記の通りに設定します。
直接入力する秘密鍵は、下のキャプチャでは省略してますが、実際は先ほど作成した秘密鍵(id_rsa)のファイル内容をそのまま全部コピペしてください。
パスフレーズは、キーペアを作成した時に入力した passphrase のことです。
#ref(key_add.png)
つぎに
Jenkinsの管理 >> ノードの管理 >> 新規ノード作成
で表示されるノード設定画面で下記の通りに設定します
リモートFSルートは Slaveノードを作成した時にマウントしている /jenkins/workspace を指定、ホスト名はSlaveノードが配置されたDockerのIP、ポート番号はSlaveノードにPortフォワードされる10022を指定します。
Host Key Verification Strategy は、どうもデフォルトではエラーが出るっぽくて、その場合はManually trusted key Verification Strategyにしておきます。
#ref(slave_add.png)
以上で、SlaveノードがMasterサーバに追加されました。
#ref(slave_add_finish.png)
もっとSlaveを増やしたい場合は、主に01って指定されていた箇所を02,03...としていけばOKですね。
**関連リンク [#f12ad633]
-[[library/jenkins - Docker Hub>https://hub.docker.com/_/jenkins/]]
-[[DockerでJenkinsサーバ(master/slave)を構築してみる - knjnameのブログ>http://knjname.hateblo.jp/entry/2014/05/03/190842]]
----
この記事は
#vote(おもしろかった,そうでもない)
#comment
#topicpath
SIZE(10){現在のアクセス:&counter;}