読者です 読者をやめる 読者になる 読者になる

Jenkinsが不安定になってきたので分けた

Jenkinsが不安定

  • 最近どうも職場のSlaveを認識しないことが不定期に発生する。
  • remoting.jarが見つからないとかいうエラーも以前からたまに出てたり。
  • Jobが増えすぎて見づらくなっていたので新しくMaster/Slaveのセットを作って一部のJobを分けてみることにした。

環境を用意

  • ESXiにVMを作るが、イントラ環境なのでURLを集約しておくと色々と便利。
    • よって、nginxのリバースプロキシが入っているVMとは別のVMを3つ用意してJenkinsのMaster/Slaveとする。
  • Jenkins構成

Jenkinsセットアップ

Master
  • 基本的にroot(sudo -s)で作業してます。
  • aptでJenkinsを入れる。
# cd /etc/apt/sources.list.d
# vi jenkins.list
deb http://pkg.jenkins-ci.org/debian binary/
  • Keyをインポート
# wget -q -O - http://pkg.jenkins-ci.org/debian/jenkins-ci.org.key | apt-key add -
OK
  • インストール
    • updateしてからinstallで。
    • updateすると、Jenkinsのリポジトリ設定が読み込まれてます。
    • 依存関係を解決してJava(OpenJDK)も入るので簡単ですね。
# aptitude update
Ign http://jp.archive.ubuntu.com trusty InRelease
Ign http://jp.archive.ubuntu.com trusty-updates InRelease
Hit http://jp.archive.ubuntu.com trusty Release.gpg
(snip)
Ign http://pkg.jenkins-ci.org binary/ Translation-ja_JP
Ign http://pkg.jenkins-ci.org binary/ Translation-ja
Ign http://pkg.jenkins-ci.org binary/ Translation-en
Ign http://security.ubuntu.com trusty-security/main Translation-ja_JP
Ign http://security.ubuntu.com trusty-security/main Translation-ja
Ign http://security.ubuntu.com trusty-security/multiverse Translation-ja_JP
Ign http://security.ubuntu.com trusty-security/multiverse Translation-ja
Ign http://security.ubuntu.com trusty-security/restricted Translation-ja_JP
Ign http://security.ubuntu.com trusty-security/restricted Translation-ja
Ign http://security.ubuntu.com trusty-security/universe Translation-ja_JP
Ign http://security.ubuntu.com trusty-security/universe Translation-ja
Fetched 198 B in 16秒 (12 B/s)

# aptitude install jenkins
(snip)
jenkins (1.562) を設定しています ...
 * Starting Jenkins Continuous Integration Server jenkins
   ...done.
  • 初期設定
    • 元のMasterサーバでは以前OutOfMemoryが出たことがあるのでメモリを多めにとっている。今回もそれに従って増やしておくことにする。
# cd /etc/default
# vi jenkins
JAVA_ARGS="-Xms512m -Xmx1024m -XX:MaxPermSize=256m"
PREFIX=/jenkins

JENKINS_ARGS="--webroot=/var/cache/jenkins/war --httpPort=$HTTP_PORT --ajp13Port=$AJP_PORT --prefix=$PREFIX"
  • 起動
    • このまま起動すると組み込みのJettyが8080であげてくれる。
# service jenkins start
  • 社内では色々と面倒なことがあるので、サーバを集約するために使っている別のWebサーバ(nginx)にリバースプロキシの設定をする。
    • server xxx.xxx.xxx.xxx はJenkinsをインストールしたサーバのIPを指定。
# cd /etc/nginx/sites-available
#vi default
upstream jenkins_server {
        server xxx.xxx.xxx.xxx:8080 fail_timeout=0;
}

server {
        listen 80;

        location /jenkins {
                proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
                proxy_set_header Host $http_host;
                proxy_redirect off;

                if (!-f $request_filename) {
                        proxy_pass http://jenkins_server;
                        break;
                }
        }
}

# service nginx reload
Slave
  • LinuxのSlaveはsshで接続。
  • Windows7のSlaveはjnlpで接続。
  • まあ、このへんは画面の説明を見たりググったりしながらやればすぐできます。
Job移行
  • Job Import Plugin を使ってみました。
    • 旧JenkinsのURLを入れれば大丈夫なはずなのですが、何故か無反応。ログを見てみたら読み込んだXMLがパースエラーになってた。_| ̄|○
  • ところが移行したJobがことごとく動かない。動かないからってSlave直接弄って強引にJob動かしちゃダメだよー。
    • しょうがない、Jobを綺麗にするいい機会ってことで・・・(´Д`)