Top / Docker / Jenkins

まずはMasterサーバの構築。

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/jenkins:lts  --logfile=/var/jenkins_home/jenkins.log

http://DockerのIP:8080/jenkins でアクセス可能になりました。

初回アクセス時に Administrator password を入れろと出ますが、

# cat /docker/hostvolumes/jenkins/secrets/initialAdminPassword
xxxx

この値を入れればOKです。

Slaveの追加。

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

また、おなじDocker上のコンテナは、--linkとかを使わない限り、基本的には他のコンテナを参照できないし、また、おなじDocker上のコンテナを追加してもスケールアウトにならないので、ココでは別Docker上のコンテナをMasterに追加してみます*1

Slave用Linuxコンテナを準備。

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 ですね。くわしくは こちら

別サーバの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ノードを追加。

認証情報 >> System >> グローバルドメイン >> 認証情報の追加

で表示される認証情報の設定画面で下記の通りに設定します。

直接入力する秘密鍵は、下のキャプチャでは省略してますが、実際は先ほど作成した秘密鍵(id_rsa)のファイル内容をそのまま全部コピペしてください。 パスフレーズは、キーペアを作成した時に入力した passphrase のことです。

key_add.png

つぎに

Jenkinsの管理 >> ノードの管理 >> 新規ノード作成

で表示されるノード設定画面で下記の通りに設定します

リモートFSルートは Slaveノードを作成した時にマウントしている /jenkins/workspace を指定、ホスト名はSlaveノードが配置されたDockerのIP、ポート番号はSlaveノードにPortフォワードされる10022を指定します。 Host Key Verification Strategy は、どうもデフォルトではエラーが出るっぽくて、その場合はManually trusted key Verification Strategyにしておきます。

slave_add.png

以上で、SlaveノードがMasterサーバに追加されました。

slave_add_finish.png

もっとSlaveを増やしたい場合は、主に01って指定されていた箇所を02,03...としていけばOKですね。

関連リンク


この記事は

選択肢 投票
おもしろかった 0  
そうでもない 0  

Top / Docker / Jenkins

現在のアクセス:4767


*1 というか参考にさせていただいたサイトのやり方だと、こちらの環境ではDockerを分けないとうまくいかないんですよね、、、

添付ファイル: fileslave_add_finish.png 929件 [詳細] filekey_add.png 1121件 [詳細] fileslave_add.png 986件 [詳細]

トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2018-08-13 (月) 16:17:27 (2082d)