#author("2018-08-12T14:11:58+00:00","default:masatomix","masatomix")
#author("2018-08-13T07:17:27+00:00","default:masatomix","masatomix")
#topicpath
----

#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]
MasterサーバにSlaveを追加する際、Docker上のLinuxコンテナを指定してみます。SlaveノードをDocker管理下にすることによって、必要な時に必要なぶんSlaveを増やすとか柔軟な対応が可能になりそうです。

また、おなじDocker上のコンテナは、--linkとかを使わない限り、基本的には他のコンテナを参照できないし、また、おなじDocker上のコンテナを追加してもスケールアウトにならないので、ココでは別Docker上のコンテナをMasterに追加してみます((というか参考にさせていただいたサイトのやり方だと、こちらの環境ではDockerを分けないとうまくいかないんですよね、、、))。

*** 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;}

トップ   編集 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS