HEXA BLOG

インフラ

HEXA BLOGその他インフラ2014.11.10

Jenkinsの設定やジョブの設定を覗いてみる

こんにちは。

気づけば11月も中旬。
外はもう冬、3種の神器(コート、マフラー、手袋)が欠かせません。
まぁ私の場合はコートを10月から着用していて、さらに社内でも着ていますけどね
おそらく社内一の寒がりこと、ノブです

 

さて話はガラリと変わりますが、
CIツール(継続的インテグレーションツール)の
Jenkinsは使用していますか?
用途は色々ですが弊社でも使用しています。
今日はそんなJenkinsの設定を少しだけ覗いてみようと思います

 

Q. そもそもJenkinsの設定ってどこにあるの?
A. Jenkinsのホームディレクトリにあります。
基本的にJenkinsをインストールした先がJenkinsのホームディレクトリになります。
確認方法はJenkinsのトップページから[Jenkinsの管理]→[システムの設定]に飛んでいけば
[ホームディレクトリ]が記載しているページに飛んで行けます。
そこに記載されているパスがJenkinsのホームディレクトリとなります。
20141110_JenkinsHome

 

Q. そもそもJenkinsの設定ってなに?
A. 主にJenkinsの設定は2種類ありJenkins.xmlとconfig.xmlがあります。
どちらもJenkinsのホームディレクトリにあります。
Jenkins.xml→Jenkins起動時の設定
ここからポート番号の変更や、Jenkinsのホームディレクトリの変更ができます。
実際に反映させるには、Jenkinsの再起動が必要となります。
(URLに「[Jenkinsのアドレス]/safeRestart」と入力すると再起動できます)
config.xml→Jenkinsのシステム設定(同時ビルド数、スレーブの情報など)
これはJenkinsのブラウザ上から操作できる事が多いので
直接はあまり触りません。

 

Q. こういうのは他にもあるの?
A. ジョブの設定を管理するconfig.xml(さっきのconfig.xmlと別物)があります。
場所は「[Jenkinsのホームディレクトリ]/jobs/[ジョブ名]」にあります。
例えば以下の様な、「FreeStyleJobTest」というジョブを作ったとすると
「[Jenkinsのホームディレクトリ]/jobs/FreeStyleJobTest」にconfig.xmlが出来上がります。
これにはジョブの設定内容やスケジュールなどが記載されています。
20141110_JobsDirectory

 

ざっくりと質問形式で解説しましたが、今回はもう少し踏み込んで
ジョブの設定を管理するconfig.xmlの中身を見てみましょう。

 

さっき作った「FreeStyleJobTest」のconfig.xmlの中身を見ていると以下のようになっています。

===
<?xml version=’1.0′ encoding=’UTF-8′?>
<project>
 <actions/>
 <description></description>
 <keepDependencies>false</keepDependencies>
 <properties/>
 <scm class=”hudson.scm.NullSCM”/>
 <canRoam>true</canRoam>
 <disabled>false</disabled>
 <blockBuildWhenDownstreamBuilding>false</blockBuildWhenDownstreamBuilding>
 <blockBuildWhenUpstreamBuilding>false</blockBuildWhenUpstreamBuilding>
 <triggers>
  <hudson.triggers.TimerTrigger>
   <spec>0 9 * * 1-5</spec>
  </hudson.triggers.TimerTrigger>
 </triggers>
 <concurrentBuild>false</concurrentBuild>
 <builders>
  <hudson.tasks.BatchFile>
   <command>echo Good Morning!!</command>
  </hudson.tasks.BatchFile>
 </builders>
 <publishers/>
 <buildWrappers/>
</project>
===

本当に作っただけなので超最小限の設定しかありません。
このままではジョブを実行しても何もしませんので試しに
「月から金まで毎朝9時に『Good Morning!!』をエコーする」という役に立たない内容のジョブにしてみます。
以下の様なスケジュールとジョブ内容で保存します。
20141110_JenkinsJobSettings

 

もう一度「FreeStyleJobTest」のconfig.xmlの中身を見ていると以下のようになっています。

===
<?xml version=’1.0′ encoding=’UTF-8′?>
<project>
 <actions/>
 <description></description>
 <keepDependencies>false</keepDependencies>
 <properties/>
 <scm class=”hudson.scm.NullSCM”/>
 <canRoam>true</canRoam>
 <disabled>false</disabled>
 <blockBuildWhenDownstreamBuilding>false</blockBuildWhenDownstreamBuilding>
 <blockBuildWhenUpstreamBuilding>false</blockBuildWhenUpstreamBuilding>
 <triggers>
  <hudson.triggers.TimerTrigger>
   <spec>0 9 * * 1-5</spec>
  </hudson.triggers.TimerTrigger>
 </triggers>
 <concurrentBuild>false</concurrentBuild>
 <builders>
  <hudson.tasks.BatchFile>
   <command>echo Good Morning!!</command>
  </hudson.tasks.BatchFile>
 </builders>
 <publishers/>
 <buildWrappers/>
</project>
===

 

しっかりと、<triggers><builders>タグそれぞれに先ほど追記した内容が記載されていますね。
つまり、config.xmlで設定を管理していることがわかります。

 

ということは、このconfig.xmlを定期的にバックアップとっておいたり
SVNなどのバージョン管理ツールで管理しておけば、
前に設定していたジョブの設定に戻したり、
JenkinsPCが壊れた時もジョブを再構築したりが容易にできるわけです。
※config.xmlを直接編集した場合はJenkinsを再起動しないと反映されません。
※後者のほうはJenkinsのプラグインや、Jenkins自体の設定も管理しておく必要があります。

 

更にいえば、「他のJenkinsPCでこのジョブをまるまる使いたい!」なんてときも
config.xmlを別のJenkinsの「[Jenkinsのホームディレクトリ]/jobs/[ジョブ名]」に配置して
Jenkinsを再起動すると他のJenkinsPCでジョブを使いまわすことが可能になります。
※こういったことは大体スレーブを立てて解決するので

 他のJenkinsを別途立てるというのは結構稀なケースではあります。

 

Jenkinsの仕組みが少しだけ見えた感じでしょうか?
私も全く知らないところから学びましたが、
仕組みがわかると使い回し方法や、困ったときはどうすればいいかの手助けになったりしますね。
ちょっと長くなってしまいましたが今回はここまでにしておきます。
次回もこういった感じでJenkinsのお話をしようと思います

 

それではまた~

RECRUIT

大阪・東京共にスタッフを募集しています。
特にキャリア採用のプログラマー・アーティストに興味がある方は下のボタンをクリックしてください

RECRUIT SITE 

NEWS