ライン

ポイント:*

ライン

 はじめに

CentOS 6.6

 今回は、Jenkinsを動かします。FreeBSDでも良かったのですが、JAVAが必要なので、まずはLinuxで動かすことにしました。
VMware 以下のゲストで、CentOS 6.6になります。

 インストール

 まずは、Javaの更新からしておきました。

# yum install java-1.7.0-openjdk
読み込んだプラグイン:fastestmirror, security
インストール処理の設定をしています
Loading mirror speeds from cached hostfile
 * base: ftp.nara.wide.ad.jp
 * extras: ftp.nara.wide.ad.jp
 * updates: ftp.nara.wide.ad.jp
依存性の解決をしています
--> トランザクションの確認を実行しています。
---> Package java-1.7.0-openjdk.x86_64 1:1.7.0.75-2.5.4.0.el6_6 will be 更新
---> Package java-1.7.0-openjdk.x86_64 1:1.7.0.79-2.5.5.1.el6_6 will be an update
--> 依存性解決を終了しました。

依存性を解決しました

================================================================================
 パッケージ            アーキテクチャ
                                 バージョン                    リポジトリー
                                                                           容量
================================================================================
更新:
 java-1.7.0-openjdk    x86_64    1:1.7.0.79-2.5.5.1.el6_6      updates     26 M

トランザクションの要約
================================================================================
アップグレード       1 パッケージ

総ダウンロード容量: 26 M
これでいいですか? [y/N]y
パッケージをダウンロードしています:
java-1.7.0-openjdk-1.7.0.79-2.5.5.1.el6_6.x86_64.rpm     |  26 MB     00:01
rpm_check_debug を実行しています
トランザクションのテストを実行しています
トランザクションのテストを成功しました
トランザクションを実行しています
  更新                    : 1:java-1.7.0-openjdk-1.7.0.79-2.5.5.1.el6_6.x   1/2
  整理中                  : 1:java-1.7.0-openjdk-1.7.0.75-2.5.4.0.el6_6.x   2/2
  Verifying               : 1:java-1.7.0-openjdk-1.7.0.79-2.5.5.1.el6_6.x   1/2
  Verifying               : 1:java-1.7.0-openjdk-1.7.0.75-2.5.4.0.el6_6.x   2/2

更新:
  java-1.7.0-openjdk.x86_64 1:1.7.0.79-2.5.5.1.el6_6

完了しました!

 こんな感じで完了。次に、Jenkinsですが、通常のyumでそのまま入らないらしいので、レポジトリを入れて導入します。

# wget -O /etc/yum.repos.d/jenkins.repo http://pkg.jenkins-ci.org/redhat/jenkins.repo
--2015-04-29 17:53:08--  http://pkg.jenkins-ci.org/redhat/jenkins.repo
pkg.jenkins-ci.org をDNSに問いあわせています... 199.193.196.24
pkg.jenkins-ci.org|199.193.196.24|:80 に接続しています... 接続しました。
HTTP による接続要求を送信しました、応答を待っています... 200 OK
長さ: 75 [text/plain]
`/etc/yum.repos.d/jenkins.repo' に保存中

100%[======================================>] 75          --.-K/s 時間 0s

2015-04-29 17:53:09 (16.2 MB/s) - `/etc/yum.repos.d/jenkins.repo' へ保存完了 [75/75]
# rpm --import http://pkg.jenkins-ci.org/redhat/jenkins-ci.org.key 
# yum install jenkins
読み込んだプラグイン:fastestmirror, security
インストール処理の設定をしています
Loading mirror speeds from cached hostfile
 * base: ftp.nara.wide.ad.jp
 * extras: ftp.nara.wide.ad.jp
 * updates: ftp.nara.wide.ad.jp
jenkins                                                  |  951 B     00:00
jenkins/primary                                          |  31 kB     00:00
jenkins                                                                 283/283
依存性の解決をしています
--> トランザクションの確認を実行しています。
---> Package jenkins.noarch 0:1.611-1.1 will be インストール
--> 依存性解決を終了しました。

依存性を解決しました

================================================================================
 パッケージ        アーキテクチャ   バージョン          リポジトリー       容量
================================================================================
インストールしています:
 jenkins           noarch           1.611-1.1           jenkins            60 M

トランザクションの要約
================================================================================
インストール         1 パッケージ

総ダウンロード容量: 60 M
インストール済み容量: 66 M
これでいいですか? [y/N]y
パッケージをダウンロードしています:
jenkins-1.611-1.1.noarch.rpm                             |  60 MB     00:02
rpm_check_debug を実行しています
トランザクションのテストを実行しています
トランザクションのテストを成功しました
トランザクションを実行しています
  インストールしています  : jenkins-1.611-1.1.noarch                        1/1
  Verifying               : jenkins-1.611-1.1.noarch                        1/1

インストール:
  jenkins.noarch 0:1.611-1.1

完了しました!
# chkconfig --list|grep jenkins
jenkins         0:off   1:off   2:off   3:on    4:off   5:on    6:off

導入完了です。

サービス起動

 動かせるみたいなので、サービスをあげます。

# service jenkins start
Starting Jenkins                                           [  OK  ]
# netstat -lnt|grep 80
tcp        0      0 :::8009                     :::*                        LISTEN
tcp        0      0 :::8080                     :::*                        LISTEN

あがりました。イントラで試しているので、面倒なのでFirewallを停止してウェブ確認します。
http://192.168.XXX.YYY:8080/

動きました。もろもろのアカウントの設定などは、ウェブ検索して追加を行いました。CSRF対策は有効で良いです。
/etc/sysconfig/jenkinsにJnekinsのポート番号を変更したい場合には、修正してサービスの再起動が必要になります。

 スレーブでの動作

スレーブ側にはJenkinsは不要

 自サーバではなく、他のホストを動作させたい場合には、sshで接続できれば良い。
実際に試してみることにします。

 サーバの「認証情報の管理」を選択。

Jenkinsサーバ側のユーザにssh用の鍵を作成します。

$ ssh-keygen -t rsa
Generating public/private rsa key pair.
Enter file in which to save the key (/home/kimura/.ssh/id_rsa):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /home/foo/.ssh/id_rsa.
Your public key has been saved in /home/foo/.ssh/id_rsa.pub.
The key fingerprint is:
--..-- foo@jenkins.local
The key's randomart image is:
+--[ RSA 2048]----+
|         +       |
..
|       .  ..oo.++|
+-----------------+
$ cat id_rsa.pub

これを接続される側に追加します。

$ echo "〜" >> authorized_keys

「ノードの管理」→「新規ノード作成」で接続先を設定します。
今回は、スレーブ側からサーバに接続して利用する方法にしました。
(SSH経由でマスターからスレーブエージェントを起動する方法がいまいちうまくできなかったので、まずはこっち…という理由だったりしますが)
ノード名を決め、ダムスレーブにクリックをして[OK]を押すと次の画面になります。

「JNLP」とは、Java Web Startのファイルだとのこと。
接続されるスレーブ側にアカウントを作成。

# useradd -d /home/jenkins -u 600 -m jenkins

まずは、接続したいので、slaveで作業。

$ wget http://192.168.xxx.yyy:8080/jnlpJars/slave.jar
--2015-04-29 20:48:28--  http://192.168.xxx.yyy:8080/jnlpJars/slave.jar
192.168.xxx.yyy:8080 に接続しています... 接続しました。
HTTP による接続要求を送信しました、応答を待っています... 200 OK
長さ: 478472 (467K) [application/java-archive]
`slave.jar' に保存中

100%[======================================>] 478,472     --.-K/s 時間 0.006s

2015-04-29 20:48:28 (77.7 MB/s) - `slave.jar' へ保存完了 [478472/478472]

$ java -jar slave.jar -jnlpUrl http://192.168.xxx.yyy:8080/computer/slave/slave-agent.jnlp
 -secret c48cb5d19f66ddf18ccc1cfdc9d78afa40045316f30afefbf37516e94b51df4a
4 29, 2015 8:51:15 午後 hudson.remoting.jnlp.Main createEngine
情報: Setting up slave: slave
4 29, 2015 8:51:15 午後 hudson.remoting.jnlp.Main$CuiListener <init>
情報: Jenkins agent is running in headless mode.
4 29, 2015 8:51:15 午後 hudson.remoting.jnlp.Main$CuiListener status
情報: Locating server among [http://192.168.161.174:8080/]
4 29, 2015 8:51:15 午後 hudson.remoting.jnlp.Main$CuiListener status
情報: Handshaking
4 29, 2015 8:51:15 午後 hudson.remoting.jnlp.Main$CuiListener status
情報: Connecting to 192.168.161.174:56815
4 29, 2015 8:51:15 午後 hudson.remoting.jnlp.Main$CuiListener status
情報: Trying protocol: JNLP2-connect
4 29, 2015 8:51:15 午後 hudson.remoting.jnlp.Main$CuiListener status
情報: Connected

状態を確認すると、

接続できていました。

これを毎回入れてから使うのは面倒。
CentOS を Jenkins のスレイブマシーンに追加する方法 - Qiitaのページよりスクリプト等をいただいてきました。
/etc/sysconfig/jenkins-slaveに設定ファイルを追加。

JENKINS_WORKDIR="/home/jenkins"
JENKINS_USER="jenkins"
JENKINS_URL="http://192.168.xxx.yyy:8080/"
JENKINS_NODENAME="slave"
JENKINS_SECRET="c48cb5d19f66ddf18ccc1cfdc9d78afa40045316f30afefbf37516e94b51df4a"
JENKINS_OPTION="-noCertificateCheck"

そして、起動スクリプトを配置して、自動動作するように設定。
サービスをあげて接続できていることを確認。

リモートで実行するジョブを試してみることにしました。

こんな感じにして実行してみました。

コンソール出力
上流プロジェクト"---"の#1が実行 
元の原因: 
 ユーザーfooが実行
slave でビルドします。 ワークスペース: /home/jenkins/workspace/slave_ls/label/slave
[slave] $ /bin/sh -xe /tmp/hudson163686884477594478.sh
+ uname -n
SLAVE
+ pwd
/home/jenkins/workspace/slave_ls/label/slave
+ ps aux
USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
root         1  0.0  0.0  19356  1544 ?        Ss   19:02   0:00 /sbin/init
...

ちゃんと動いているようです。
ただし、これだとroot権限で実行したいような場合にはどうするのだろう。
sudoで昇格できるようにして実行するのは問題なかったです。

とりあえずは、今日はここまで。


【改訂履歴】作成:2015/04/29


【参照ページ】

VagrantのCentOS6.5にJenkinsをインストール - Qiita
JenkinsをCentOS6にインストールしてユーザー認証設定 EasyRamble*

 
Copyright © 1996,1997-2006,2007- by F.Kimura,