JenkinsからIRCへビルド結果を通知する

リアルタイムに通知したいならチャットかなと思って。

ngircd インストール*1

yum install ngircd 

設定の変更

変更箇所のみ抜粋

[Global]
  Ports = 6665
  Listen = ::,0.0.0.0
  MaxConnections = 0
  MaxJoins = 0
[Channel]
  Name = #jenkins
  Modes = tn

Jenkins IRC Plugin をインストールし設定を行う。

f:id:shmztko:20130208152907p:plain

ジョブの設定から、ビルド後の処理にIRC Notificationを追加

f:id:shmztko:20130208153059p:plain

こっちは特に設定しなくて大丈夫。
これでIRCへ通知されるようになる。

*1:epelのリポジトリを追加しとく必要がある

CentOS上のJenkinsからSkypeへビルド結果を通知する

CentOSSkypeインストール
こちらの記事を参考させてもらいインストール。
Install Skype 4.0 for RHEL/CentOS 6.3 and Fedora 17/16

ただ、
yum で依存ライブラリをインストールするときに、ワンライナーだとエラーになったので1行ずつ実行した。
なんでかはわからない。。。

Skypeのデーモン化
こちらの記事を参考にさせてもらい実施
Linux上で動くSkype用のbotを作る方法 - muddy brown thang
HTTPでSkypeにBOT投稿(CentOS5編) - IT 東京 楽しいと思うこと

Jenkinsの skype-notifier plugin を試すも、Skypeに繋がらないとでる…

もう、いっそのこと自分でプラグイン作る。

Skype4java 使えば簡単にできるんでしょ?!

Skype4java Linux動かないあばあば^q^

もうSkype4Py しかない!!

Python Plugin を参考に、Jenkinsプラグイン上からPythonスクリプト実行できるようにして、

# encoding: utf-8
import sys
import Skype4Py

args = sys.argv
if len(args) < 3:
  quit()

chatname = args[1]
message = args[2]

skype = Skype4Py.Skype(Transport='x11')
skype.Attach()
for chat in skype.Chats:
  if chatname == chat.FriendlyName.encode('utf-8'):
    chat.SendMessage(message)

上みたいなスクリプトでSkypeに接続するようにした。*1
あと、ビルド時に通知するメッセージとかは、instant-messaging-plugin 参考にして書いてみた。

このハイパーおれおれプラグインで一応、通知されるところまでは行くようになったよー。

*1:つまり別途Skype4Pyをインストールしないと動かない

Jenkins を使ってRailsプロジェクトでゴニョゴニョするまでの道のり その7

目標

  1. Github上からRailsプロジェクト取ってくる。
  2. ビルド(bundle install/update とか、rake db:migrate)する。
  3. メトリクス計測する。(reek, roodi)
  4. RSpec実行
  5. テストレポート・カバレッジレポート生成
  6. ビルド結果を通知

ビルド結果を通知

CentOS上のJenkinsからSkypeへビルド結果を通知する - shmztko's diary
JenkinsからIRCへビルド結果を通知する - shmztko's diary

これでやりたいことは大体できるようになった!
やったー

Jenkins を使ってRailsプロジェクトでゴニョゴニョするまでの道のり その6

目標

  1. Github上からRailsプロジェクト取ってくる。
  2. ビルド(bundle install/update とか、rake db:migrate)する。
  3. メトリクス計測する。(reek, roodi)
  4. RSpec実行
  5. テストレポート・カバレッジレポート生成
  6. ビルド結果を通知
テストレポート・カバレッジレポート生成

Gemfileにレポート出力関連のGemを記述します。

group :test do
  gem 'rspec-rails', '2.12.0'
  gem 'simplecov', :require => false
  gem 'simplecov-rcov', :require => false
  gem 'ci_reporter'
end

bundle install します。

カバレッジレポートの準備

  • simplecovの設定

spec/spec_helper.rb の先頭に

require 'simplecov'
SimpleCov.start 'rails'

を追記
この時点で rake spec すると coverage 配下にレポート出力される

ただ、JenkinsのRcovプラグインと連携させるためにsimplecovの結果をRcov形式に変換しないといけない。

spec/spec_helper.rb の先頭の記述を

require 'simplecov'
require 'simplecov-rcov'
SimpleCov.start 'rails'
SimpleCov.formatter = SimpleCov::Formatter::RcovFormatter

に変更
これで、rake spec すると coverage/rcov 配下にレポート出力されてる。

JenkinsのRCovプラグインの設定で、どのディレクトリ配下のレポートを読み込むか?ってのがあるので coverage/rcov を指定する。


参考 kennyjのブログ(仮): ruby1.9時代にrcovは使ってはいけない。simplecovを使おう!

テストレポートの準備

ci_reporterの設定。ci_reporter は、RSpecの結果をJUnitのレポート形式に変換するGemだそうです。JUnit形式ならJenkinsがデフォルトで取り込めるよーってことか。

Rakefile を編集して、

require 'ci/reporter/rake/rspec'

を追記。

これで、
rake ci:setup:rspec spec
すると、spec/reportsへRSpecのレポートが出力されてる。

Jeninsの JUnitテスト結果の集計の設定で、読み込みファイル対象に spec/reports/*.xml を指定する。

参考 Jenkins で Rails 3 プロジェクトのテスト結果とカバレッジをグラフ表示する - mallowlabsの備忘録

ジョブのビルドスクリプト

export http_proxy='http://${proxy_user}:${proxy_pass}@${proxy_host}:${proxy_port}/'
bundle install --path vendor/bundler
rake db:migrate
rake quality
rake ci:setup:rspec spec

Jenkins を使ってRailsプロジェクトでゴニョゴニョするまでの道のり その5

目標

  1. Github上からRailsプロジェクト取ってくる。
  2. ビルド(bundle install/update とか、rake db:migrate)する。
  3. メトリクス計測する。(reek, roodi)
  4. RSpec実行
  5. テストレポート・カバレッジレポート生成
  6. ビルド結果を通知

RSpec実行

Gemfileにテスト関連のGemを書きます。

group :test do
  gem 'rspec-rails', '2.12.0'
end

bundle install します。

rails g rspec:install

して、rspec-railsインストール

これで rake spec でテスト実行できるように。

Jenkins を使ってRailsプロジェクトでゴニョゴニョするまでの道のり その4

目標

  1. Github上からRailsプロジェクト取ってくる。
  2. ビルド(bundle install/update とか、rake db:migrate)する。
  3. メトリクス計測する。(reek, roodi)
  4. RSpec実行
  5. テストレポート・カバレッジレポート生成
  6. ビルド結果を通知

メトリクス計測する。(reek, roodi)

1. Gemfile を編集して、メトリクス計測用のGemを入れるます。

group :test do
  gem 'ZenTest', '= 4.8.3'
  gem 'roodi', '~> 2.2.0'
  gem 'reek', '~> 1.2.13'
  gem 'flay'
  gem 'flog'
end

2. Rakeタスクを作る

参考 http://d.hatena.ne.jp/ytakamiya/20100313/1268480448
参考のURLの通りやるます。

3. ジョブの設定から、ビルドスクリプトにコマンド追加

export http_proxy='http://${proxy_user}:${proxy_pass}@${proxy_host}:${proxy_port}/'
bundle install --path vendor/bundler
rake db:migrate
rake quality

4. ハマった所

roodi の 2.2.x 系と、reek の1.3.x 系が同居できない。
依存するGem ruby_parser の必要バージョンに矛盾がでるみたい。

5. 諦めた所

flog は入れてはみたけども、Ruby1.9系でパースできないっていうエラーがでてるみたいで諦めた
flay は全体のスコアは 100 です。とはみたいにでるけど、どこ直していいのかJenkins上みてもログから読み取れないので使うのやめた。

6. これからやりたいこと

Shinya131/reek_viewer · GitHubなるものがあるので、それ使ってJenkins上でReekの結果を表示できるようにしたい。

Jenkins を使ってRailsプロジェクトでゴニョゴニョするまでの道のり その3

目標

  1. Github上からRailsプロジェクト取ってくる。
  2. ビルド(bundle install/update とか、rake db:migrate)する。
  3. メトリクス計測する。(reek, roodi)
  4. RSpec実行
  5. テストレポート・カバレッジレポート生成
  6. ビルド結果を通知

ビルド(bundle install/update とか、rake db:migrate)する。

export http_proxy='http://${proxy_user}:${proxy_pass}@${proxy_host}:${proxy_port}/'
bundle install --path vendor/bundler
rake db:migrate

bundle install するために、proxyの設定が必要。

rake db:migrate を Rakeタスクプラグインから実行しようと思ったけど、

java.io.IOException: Cannot run program "rake" (in directory "/var/lib/jenkins/workspace/Sample"): java.io.IOException: error=2, No such file or directory

ってなる。パス通したのに…
ちなみに、rake は /usr/local/bin/rake をみている。

もうRakeプラグイン使うのやめて、シェルスクリプト内でやるようにした。