Hatena::ブログ(Diary)

kuma8の日記 RSSフィード

2011-02-09

[][][] 独自のジョブ失敗通知

はじめに

Jenkins では、ジョブ結果の通知には、既存のE-Mail通知機能がとても有効です。

しかし、メールで通知されたくなく、独自の通知ツールを使いたい場合には、有効なプラグインがない(見つけられていない)です。

やりたいこと

ジョブが失敗したときに、独自の通知ツールを実行させる。

いま運用中の手順

Hudson Post build task を使っています。

  1. 前処理で、Post build task が実行できるようにログを出力し、失敗検知用のファイルを作成します。
  2. ビルド処理を実行させます。
  3. 後処理で、失敗検知用のファイルを削除します。
  4. Post build task は必ず実行され、失敗検知用のファイルが残っている場合は、通知ツールを実行させます。

ビルド処理に失敗すれば、後ジョブが実行されないため、失敗検知用のファイルが残り、通知ツールが実行されるという仕組みです。

前処理

echo "@@@@START $JOB_NAME/$BUILD_NUMBER @@@@"
touch BUILDING

ビルド処理

後処理

rm BUILDING

Post build task

if [ -f BUILDING ];
then
  $HOME/bin/send_xmpp_server.py
fi

理想は、既存のE-Mail通知機能と同じ動きで、メールの代わりに独自通知ツールを実行させたいのですが。

終わりに

もっと良いプラグインがあるよ。 とか、この機能使えばもっと良くなる等ありましたら、教えてください。

2011-02-07

[][][] Jenkins のサービス化 その2

はじめに

Twitter で、rpmで利用している人もいるようでしたので、その手順の紹介です。

rpm でのインストール

Tomcat の他に、Fedora, CentOS は、rpmインストールすることで、サービスとして実行することができます。

インストールから起動までの手順

  1. Jenkins の rpmyum で見つられるようにする。
  2. yum install する。
  3. サービスを実行する。
 # wget -O /etc/yum.repos.d/jenkins.repo http://pkg.jenkins-ci.org/redhat/jenkins.repo
 # rpm --import http://pkg.jenkins-ci.org/redhat/jenkins-ci.org.key
 # yum search jenkins
 # yum install jenkins
 # /sbin/service jenkins start

rpmインストールすると自動設定されること。

  • rpmインストールすると同時に、ユーザ: jenkins、グループ: jenkins が作成されます。
  • JENKINS_HOME は、 /var/lib/jenkins に設定されます。
  • ランレベル3,5 でjenkinsが自動実行されます。
  • ログファイルは、 /var/log/jenkisn に出力されます。
    • *ログローテートされるかは未確認。

いろいろと自動設定されるので、FedoraCentOS では、rpm からのインストールするほうが良さそうです。

2011-02-06

[][][] JenkinsをTomcatで動作させる。

はじめに

nohup を利用した運用でも十分利用できますが、動作ログの管理が面倒になります。

そこで、Tomcatなどのアプリケーションサーバを利用します。

内容は、公式サイトほぼそのままです。

Tomcat を用意する

まずは、Tomcatダウンロードして、解凍します。

Jenkins を実行できるようにする。

Tomcatは、Jenkinsだけを運用するため、解凍したTomcatディレクトリ内のwebapps/* をすべて削除します。

次に、jenkins.war を webapps/ROOT.war にコピーします。

実行前にTomcat 用の環境変数を設定するsetenv.shを作成します。

setenv.sh では、 Jenkins のホームディレクトリとヒープサイズを設定します。

ヒープサイズは、環境にあわせて調整すると良いです。

binディレクトリのファイルに対して、アクセス権を変更し、実行します。

Jenkinsが、ROOT.warとして動作するため、

http://localhost:8080/ のみでアクセスすることができます。

手順

 $ wget http://ftp.kddilabs.jp/infosystems/apache/tomcat/tomcat-7/v7.0.8/bin/apache-tomcat-7.0.8.zip
 $ unzip apache-tomcat-7.0.8.zip
 $ cd apache-tomcat-7.0.8
 $ rm -r webapps/*
 $ vi bin/setenv.sh ## 次の内容を書き込みます。
...
#!/bin/bash
export CATALINA_OPTS="-DHUDSON_HOME=/path/to/hudson_home -Xmx512m"
...
 $ chmod 755 bin/*.sh
 $ ./bin/catalina.sh start

動作ログの管理も Tomcat 側で管理されるので長期的に運用する場合に楽になります。

追記しました

コメントを参考に、setenv.sh を利用する手順に変えました。

2011-02-04

[][][] JenkinsとPythonの連携

はじめに

今回は、Jenkins と Python の連携についてです。

使用するツールは、とても便利なテストフレームワーク nose と

カバレッジ coverage との連携についてです。

nose連携

まず、 nose との連携からです。

nose をそのまま実行したのでは、Jenkinsに取り込めないため、XUnit形式のレポートを出力する必要があります。

XUnit形式のレポート出力には、 unittest-xml-reporting を導入する必要があります。

unittest-xml-reporting がインストールされていると、noseの出力レポートをXUnit形式にすることができます。

インストール

 $ easy_install -ZU nose
 $ easy_install -ZU unittest-xml-reporting

nose の使い方は割愛しますが、コマンドから --with-xunit オプションを付与することで

XUnit形式のレポートを出力させることができます。

レポート結果の集約には、ビルド後の処理に、JUnitテスト結果の集計 へチェックをいれ出力ファイルとなる nosetests.xml を入力します。

f:id:kuma8:20110204231241p:image

coverage 連携

python-coverage を利用するには、 Cobertura Plugin が必要です。

まずは、プラグインインストールします。

ジョブ中に coverage を XML 形式で出力させます。

ビルド後の処理に、Cobertura カバレッジ・レポートの集計を実行し、出力ファイルを読み込ませます。

f:id:kuma8:20110204231242p:image

最後に

f:id:kuma8:20110204231240p:image

実行結果です。

CIを継続するにあたって、テスト件数の増加とカバレッジの増加が

可視化されているのはモチベーションにつながるので是非とも導入しましょう。

2011-02-03

[][][] Jenkins(Hudson) で使っているプラグイン一覧

プラグイン一覧

使い始めて、3日ですが現在使っているインストール済みのプラグインです。

  • Green Ball
    • 青色がなじめなくて。
  • Git Plugin
  • Hudson Post build task
    • ジョブの失敗通知用に利用している。
  • Cobertura Plugin
    • python-coverage用に利用中。
  • Monitoring
    • 入れてみた。
  • Python Plugin
    • 使いどころがいまいちわからず。

TODO

ジョブが失敗したときに、シェルスクリプトを動かしたいけど

どのプラグインがいいのか分からないので調査する。

ジョブ失敗通知の決定版は、まだ調査中。