Fool Pool

ハマった記

Jenkins + Perl + Suvbersion で CentOS に CI 環境の構築

jenkins, plenv インストール

以下のサイトで「plenvのインストール」まで実施

Jenkins + plenv で、ブランチ毎のテスト実行環境を構築する - Qiita

Perl のバージョン: 5.18.2

必要なモジュールのインストール

$ su - jenkins
$ cpanm Storable
$ cpanm Digest::MD5
$ cpanm Devel::Cover
$ cpanm Devel::Cover::Report::Clover::Builder
$ cpanm Devel::Cover::Report::Clover
$ cpanm Perl::Metrics::Lite
$ cpanm TAP::Formatter::JUnit

※ なお、 TAP::Formatter::JUnit の依存モジュール「XML::Parser」のインストールでコケるので、「expat-devel」をインストール。

$ sudo yum install  expat-devel

Collabo Net Subversion Edge のインストール

ホームページからダウンロード:
Subversion for the Enterprise, from CollabNet | CollabNet

$ su - jenkins
$ tar xvfz CollabNetSubversionEdge-4.0.11_linux-x86_64.tar.gz
$ sudo -E csvn/bin/csvn install

※ root で install するとあとでハマる(svnserve 起動できない)。

Collabo Net Subversion Edge の初期設定

$ csvn/bin/csvn start

管理画面にログイン:
http://yourserver:3343/csvn

アカウント: admin
パスワード: admin

Subversion 状態: 停止 となっているので、「起動」をクリック。
==> svnserve が起動する

Jenkinsの設定

以下のサイトを参考に、設定:
http://blog.on-net.jp/tf/2012/08/perl_jenkins.html

新規ジョブの作成

ジョブ名: JenkinsJOB

ビルド => ビルド手順の追加 => シェルの実行

以下のスクリプトを追加:

#!/bin/bash
 
JENKINS_WORK=~/jobs/JenkinsJOB/workspace/trunk
PROVE=~/.plenv/shims/prove
CHECK_STYLE=~/.plenv/shims/measureperl-checkstyle
COVER=~/.plenv/shims/cover

${PROVE} \
-I${JENKINS_WORK}/lib \
--formatter=TAP::Formatter::JUnit -l ${JENKINS_WORK}/t > test-results.xml

${CHECK_STYLE} \
--max_sub_lines 60 \
--max_sub_mccabe_complexity 10 \
--directory ${JENKINS_WORK}/lib > checkstyle-result.xml

${COVER} -delete
HARNESS_PERL_SWITCHES=-MDevel::Cover=+ignore,inc \
${PROVE} \
-I${JENKINS_WORK}/lib \
-lv ${JENKINS_WORK}/t 2>&1

${COVER} -report clover
${COVER} -report html -outputfile index.html

※ 最後の行で、「${COVER} -report html -outputfile index.html」を追加しないと、「Clover カバレッジレポート」が 「404 Not Found」になる。

ビルド結果の評価方法の設定

ビルド後の処理 => Clover カバレッジレポートを集計

  • Cloverレポートディレクトリ: cover_db
  • Cloverレポートファイル名: clover.xml

ビルド後の処理 => JUnitテスト結果を集計

  • テスト結果 xml: test-results.xml

完成

f:id:nakamine11:20141130184723p:plain