01 Oct 2017, 08:43

Java開発でJenkinsを個人運用するためのメモ

はじめに

仕事でJava開発をすることになったのだけれども、

コードの品質をGUIで可視化すると便利だなと思って、

Jenkinsをつかってみることにしました。

あくまで可視化するためのグラフィカルな便利cronとしての役割のみ求めているので、複雑なことや難しいことはしません。

やりたいこと

  • gradle 連携
  • FindBugsの指摘を可視化
  • CheckStyleの指摘を可視化
  • ステップ数を数える
  • TODO 管理
  • spock テスト実行

version

  • Jenkins 2.73.1
  • StepCounter Plugin 2.0.0
  • FindBugs Plugin 4.71
  • CheckStyle Plug-in 3.49
  • Task Scanner Plug-in 4.52

Jenkinsのインストール

お試しなので、自PCのUbuntu 16.04 LTSにインストールします。手順は以下。

仕事では、CentOS 7.4にインストールします。

ポート番号の変更をします。デフォルトでは8080です。

/etc/default/jenkinsを編集して、12345とか適当なものに変更します。

- HTTP_PORT=8080
+ HTTP_PORT=12345

Jenkinsを再起動。

$ sudo systemctl daemon-reload
$ sudo service jenkins restart

http://localhost:12345 にアクセスして、画面が表示されることを確認。

手順にしたがって、初期設定をする。オススメプラグインをインストールする。

リポジトリをチェックアウトしてビルドしてみる

とりあえず以下のgithub repoを利用します。ビルドツールはgradleです。

設定手順

  • General -> プロジェクト名に “hello_jenkins”を入力
  • ソースコード管理 -> git にチェックして、リポジトリURLに https://github.com/tsu-nera/java_spock_playground.git を入力
  • ビルド -> ビルド手順の追加 -> Invoke gradle script を選択

手動でビルドを実行すると、githubからcloneして、gradleコマンドが叩かれる。

プラグインでやりたいことを実現

ステップ数を数える

以下のプラグインを追加。

  • StepCounter Plugin
  • 設定 -> ビルド後の処理 -> ビルド後の処理の追加を選択
  • Step Counter を選択
  • ファイルの種類: java,
  • 解析するファイルパターン **/*.java を入力

FindBugsの設定

以下のプラグインを追加。

  • FindBugs Plug-in
  • 設定 -> ビルド後の処理 -> ビルド後の処理の追加を選択
  • Findbugs警告の集計を選択
  • build/reports/findbugs/main.xmlを入力。
  • build.gradleに以下を追加
apply plugin: 'findbugs'

findbugs {
    reportsDir = file("./build/reports/findbugs")
    ignoreFailures = true
}

CheckStyleの設定

  • CheckStyle Plug-in
  • 設定 -> ビルド後の処理 -> ビルド後の処理の追加を選択
  • CheckStyle警告の集計を選択
  • build/reports/checkstyle/main.xmlを入力。
  • build.gradleに以下を追加
apply plugin: 'checkstyle'

checkstyle {
    reportsDir = file('./build/reports/checkstyle')
    configFile = file('./sun_checks.xml')
    ignoreFailures = true
}
  • ここから、checkstyleの設定ファイルを取得してプロジェクトルートに置く。 https://github.com/checkstyle/checkstyle/tree/master/src/main/resources
    • google_checks.xml
    • sun_checks.xml
  • 設定-> ビルド -> ビルド手順の追加 -> Invoke gradle script を選択
  • Use Gradle Wrapperを選択。Tasksのところに以下を入力。

    checkstyleMain findbugsMain

TODO を表示

  • TaskScanner Plug-in
  • 設定 -> ビルド後の処理 -> ビルド後の処理の追加を選択
  • 未解決タスクの集計を選択
  • 集計対象に **/*.javaを入力

spock テスト実行

  • 設定 -> ビルド後の処理 -> ビルド後の処理の追加を選択
  • JUnitテスト結果の集計を選択
  • テスト結果xmlに **/*Spec.xmlを入力
  • 設定-> ビルド -> ビルド手順の追加 -> Invoke gradle script を選択
  • Use Gradle Wrapperを選択。Tasksのところに以下を入力。

    clean test

ジョブの実行

エラーするので以下をプロジェクトルートで叩いた。

sudo gradle wrap

08 Jun 2014, 14:26

Windows環境でJenkinsからRSpecを実行するメモ

やりたいこと

Windows環境で、RSpecを夜中に連続実行したい。

cronを利用してもいいけど、Better cronな Jenkinsを使う方法を調べた。

なぜcronでなくてJenkins?

<div class="outline-text-3" id="text-1-1">
  <p>
    Jenkinsを利用する利点は、
  </p>

  <ul class="org-ul">
    <li>
      cron書式で設定Ok <ul class="org-ul">
        <li>
          <a href="http://futurismo.biz/archives/1490">cronとwatchrを使ってJenkinsからオレオレリポジトリ監視してみる | Futurismo</a>
        </li>
      </ul>
    </li>

    <li>
      グラフィカルな結果レポート
    </li>
    <li>
      ログが残せる
    </li>
  </ul>

  <p>
    ところかな。
  </p>

  <ul class="org-ul">
    <li>
      <a href="http://hazi.jp/2012-12/2203/">邪道Jenkins(スライド) | Hazi.log</a>
    </li>
    <li>
      <a href="http://image.slidesharecdn.com/jenkins-130706091448-phpapp02/95/slide-1-638.jpg?cb=1373120272">すごい cron ? &#8211; Jenkins 試した</a>
    </li>
  </ul>
</div></p>

むかしも挑戦したけど

<div class="outline-text-3" id="text-1-2">
  <p>
    今回はRCではなくて、WebDriver.
  </p>

  <ul class="org-ul">
    <li>
      <a href="http://futurismo.biz/archives/292">Selenium RCで自分のPCからテストケースを実行する | Futurismo</a>
    </li>
  </ul>
</div></p>

Environment

<div class="outline-text-3" id="text-1-3">
  <ul class="org-ul">
    <li>
      Windows 7 64bit
    </li>
    <li>
      Jenkins
    </li>
    <li>
      Ruby 2.0 p353
    </li>
    <li>
      RSpec 3.0
    </li>
  </ul>
</div></p>

Jenkins

Jenkins インストール

<div class="outline-text-3" id="text-2-1">
  <p>
    公式サイトからwarファイルをダウンロード。
  </p>

  <ul class="org-ul">
    <li>
      <a href="http://jenkins-ci.org/">http://jenkins-ci.org/</a> <ul class="org-ul">
        <li>
          jenkins.war
        </li>
      </ul>
    </li>
  </ul>
</div></p>

Jenkins起動

<div class="outline-text-3" id="text-2-2">
  <p>
    ワンラインで終わり。jenkins ワー!
  </p>

  <div class="org-src-container">
    <pre class="src src-language">C:\Jenkins&gt;java -jar jenkins.war

  <p>
    localhost の port 8080がデフォルトなのでアクセスする。おじさんがいれば成功。
  </p>

  <ul class="org-ul">
    <li>
      <a href="http://localhost:8080/">http://localhost:8080/</a>
    </li>
  </ul>

  <p>
    ほかにも、windowsインストーラからインストールする方法もある。むかし挑戦した。
  </p>

  <ul class="org-ul">
    <li>
      <a href="http://futurismo.biz/archives/299">JenkinsをWindowsPCにインストールする | Futurismo</a>
    </li>
  </ul>

  <p>
    ハマった思い出があるので、今回は挑戦しない。
  </p>

  <ul class="org-ul">
    <li>
      <a href="http://futurismo.biz/archives/331">WindowsバッチファイルをJenkinsで起動したらネットにアクセスできない | Futurismo</a>
    </li>
  </ul>
</div></p>

RSpecを連続実行

cron実行

<div class="outline-text-3" id="text-3-1">
  <p>
    新規ジョブを作成 > フリースタイル・プロジェクトのビルド > ビルド・トリガ > 定期的に実行を選択。
  </p>

  <p>
    5分に1度実行。
  </p>

  <div class="org-src-container">
    <pre class="src src-language">*/5 * * * *

  <p>
    ビルド > Windowsバッチコマンドの実行を選択。入力欄にrspecの実行を記入。
  </p>

  <div class="org-src-container">
    <pre class="src src-language">rspec "C:\cygwin\home\TSUNEMICHI\repo\selenium\selenium_spec.rb"

  <p>
    手動でビルドを実行してみて、起動が成功すればOK.
  </p>

  <div class="org-src-container">
    <pre class="src src-language">C:\Users\TSUNEMICHI\.jenkins\jobs\selenium-rspec\workspace&gt;rspec "C:\cygwin\home\TSUNEMICHI\repo\selenium\selenium_spec.rb" 

.

Finished in 18.02 seconds (files took 1.68 seconds to load) 1 example, 0 failures Finished: SUCCESS

テスト出力

<div class="outline-text-3" id="text-3-2">
  <p>
    せっかくなので、テスト結果の視覚化を。 ci_reporterというgemをつかうことで、RSpecの実行結果をJUnit形式のxmlに変換できる。
  </p>

  <ul class="org-ul">
    <li>
      <a href="https://github.com/nicksieger/ci_reporter/">nicksieger/ci_reporter</a>
    </li>
  </ul>

  <p>
    とのことだったが、rspec3は古いフォーマッタに対応していないとのことなので、今回は保留で。
  </p>

  <p>
    ほかにも、実行時間の視覚化もできるようだ。
  </p>

  <ul class="org-ul">
    <li>
      <a href="http://sue445.hatenablog.com/entry/2013/03/17/015836">Jenkinsにスローテストのグラフを表示する &#8211; くりにっき</a>
    </li>
  </ul>
</div></p>

Special Thanks

RSpec

<div class="outline-text-3" id="text-4-1">
  <p>
    selenium-webdriverで、なぞのエラーがでて苦しむ。手動パッチをあてた。
  </p>

  <p>
    invalid byte sequence in UTF-8 (ArgumentError)
  </p>

  <ul class="org-ul">
    <li>
      <a href="http://gosyujin.github.io/2013/03/18/selenium-firefox-loaderror/">Selenium WebDriverでFirefoxがロードできなくなった &#8211; kk_Atakaの日記@GitHub Pages</a>
    </li>
    <li>
      <a href="http://seesaawiki.jp/w/kou1okada/d/Cygwin%20-%20Ruby-1.9.3p327%20-%20win32/registry">Cygwin &#8211; Ruby-1.9.3p327 &#8211; win32/registry &#8211; PIB</a>
    </li>
  </ul>
</div></p>

Jenkins

<div class="outline-text-3" id="text-4-2">
  <ul class="org-ul">
    <li>
      <a href="http://codezine.jp/article/detail/7505">「Selenium2」テスト徹底活用! Jenkinsによる自動実行とSelenium Grid2による複数環境でのテスト (1/6):CodeZine</a>
    </li>
    <li>
      <a href="http://ozzy2010.blogspot.jp/2012/05/5web-jenkins-x-selenium.html">ソフトウェアテスト: 5分でできるWebテスト自動化 &#8211; Jenkins x Selenium</a>
    </li>
  </ul>
</div></p>

05 Nov 2013, 15:39

「モダンC言語プログラミング」を読んだ!C言語の組込みエンジニアのためのモダンテクニックが満載

とてもエキサイティングな本に出会い、一気に読んでしまいました。感想を書こうと思います。



ターゲット読者層は組込み分野!

この本のターゲット読者はズバリ、組込みエンジニア。ソースコードのサンプルも、ズバリ組込みな内容を扱っています。C言語を使う人=組込みの人と決めつけているよう。書籍のあちこちで、このアプローチを組込み開発で適応するためにはどうすればいいかという考察が入るのがよい。

TIOBEというプログラミング言語の統計を見ると、C言語を利用している人がプログラマの2割程度いることがわかる。自分はこのデータを初めて知ったけれども、まずこの事実をしれたことは嬉しい事だ。C言語はいかに重要なのかという論題が冒頭で熱く語られる。

 内容について

各章のテーマは、広く浅く書かれているので、もう少し各章の突っ込んだ内容がほしいところだけれども、それはこの本の趣旨には合わないのだろう。

内容は、自分の日々考えていることに非常にマッチしていて、とてもエキサイティングな読後感でした。以下、自分の過去記事も整理しつつ、各章の覚書。

開発環境について

開発環境である、Ubuntuの導入方法と、Eclipseの使い方が紹介されていた。ここは、得るものはなしかな。

オブジェクト指向

C言語でオブジェクト指向のようにコーディングするためのテクニックが紹介されている。半分知っているようで、知らなかった。C言語でも、オブジェクト指向なプログラミングは可能だと気づかせてくれる。

あとは、Cでオブジェクト指向を勉強するならば、ズバリこの本でしょう。これもオススメ。



デザインパターン

自分の来年の重点学習目標の一つが、デザインパターンをマスターすること。この章は、C言語を利用したデザインパターンの実装方法が紹介されている。この章は知らないことが多く、とても興味深かった。

以下のパターンが紹介されている。

C言語に特化したデザインパターンの本をまだ知らない。これが自分が出会った中で、もっともよくかかれた本かも。この本でも勉強するつもり。まだ読んでない。

いづれにしろ、この章は再読しよう。

TDD リファクタリング

テストフレームワークとして、GoogleTestが紹介される。レガシーコードに対するリファクタリングの実践がサンプルとして載っているのがうれしい。しかも、内容が組込みなので、実践的。パフォーマンスに関する考察もある。

namespaceを利用して、static関数を強引にテストケースに組み込む方法が紹介されていた。C++系のxUnitで利用できるテクニック。

namespace unit_test {
    #include "hogehoge.c"

    TEST(hoge,hogehoge) {
        EXPECT_EQ(3, hoge(1, 2));
    }
}

モックやスタブの定義についての言及は、自分の認識とは違うのだけれども、まあよい。モッキングフレームワークはC言語でいいものがないと書かれていた。そんなことはない、CMockやfffがあるではないか!

CでTDDをするならば、この本が必読本。



継続的インテグレーション

Jenkinsの紹介。これもあまり新しきことはなし。

C言語/C++でJenkins実践入門してみるよ | Futurismo

ビルドスクリプトとして、sConsが紹介されている。なかでも、感心したのが、スモークテストでのPytyonを利用した受け入れテストのアプローチ。pyhthonコードからシリアル接続を経由してテストする方法。この作者はPythonが好きなのかな?自分は、Rubyで同じことをやろうとした。

また、Valgrindを使ったメモリ破壊との戦いも、組込みならでは。こういうことにページを割くところも高評価。ValgrindはLinux用ツールなので、まだ使ったことがないけれども、今度調べてみようかな。

まとめ

組込みの現場ではなぜ、これらのテクニックが浸透しないのだろうか?

Eclipseが浸透しないのは、べつによい。エディタはEclipseだけではないし、EmacsやVimはEclipseに負けないくらいだ。

オブジェクト指向やデザインパターンが浸透しないのは、実行速度やメモリが関係しているのだろう。また、TDDもオブジェクト指向のほうが実施しやすい。(とくにMock)CIは、文化的なものだと思う。

どれも、決定的な理由にはならない。一つ思うのは

「無知」

だからということ。自分もCに関わるいろんな情報を集めているものの、ほかの言語とくらべて、Cは圧倒的に情報量が少ない。Eclipsしかり、TDDしかり、Jenkinsしかり。

C Programmerに足りないものは、道標となるような情報や、書籍だ。C言語は使用率第一位の言語なのだ。これからも、こういう書籍がドンドン出てきてほしい。

22 Sep 2013, 15:24

重複コードを撃退!DRY原則をC言語で実践するためのCPDを調べた

はじめに

TDDが好きなので、コードの重複を計測するツール PMDについて調べてみた。

DRY原則とは

DRY原則とは、”Don’t Repeat YourSelf”の略。

簡単に言ってしまえば、コピペするな、ということだ。

重複なコードを書くならば、リファクタリングして、共通部分は共通化しようという考え方。

CPDで重複コードを計測する

このコードの重複さを計測するツールが PMDだ。PMD公式サイトから最新版をダウンロードする。

PMDはJAVA用のツールだが、それに付随するCPDというコマンドで、オプションにJAVA以外の言語を指定すると、他の言語でも使える。(C言語, C++, PHPとか)

Windowsの場合

<div class="outline-text-3" id="text-3-1">
  <p>
    zipファイルを解凍したら /bin配下に cpd.batというファイルがある。 これがコマンドラインから実行するためのコマンドになる。
  </p>

  <p>
    cpdの使い方は以下の通り。
  </p>

  <pre><code>cpd 

–minimum-tokens xxx 重複差を指定する。xxxを50にすれば50行以上の重複を報告 –files xxx ファイルのパス [–language xxx] 言語。自分はC言語を使いたいので –language c みたいな [–encoding xxx] エンコード指定 [–format (xml|text|csv|vs)] 出力フォーマット指定

  <p>
    例えば、重複度10でC言語でXML出力ならば、こんな感じ。
  </p>

  <pre><code>“C:\Program Files (x86)\pmd-bin-5.0-alpha\bin\cpd”

–minimum-tokens 10 –files src –language c –format xml>cpd_result.xml

  <p>
    最後にリダイレクトでファイルに出力してやる。
  </p>

  <p>
    現在の最新版 pmd 5.0だとエラーして苦労した。
  </p>

  <ul class="org-ul">
    <li>
      <i>CPDでsaxon9-dom.jarがないよと怒られ</i>
    </li>
  </ul>
</div>

Jenkins DRY Pluginを入れる

XML形式で出力した結果をJenkinsで表示してみる。

をJenkinsのプラグインで追加する。

プラグインをインストールすると、[ビルド後の処理の追加]で重複コード分析の集計が現れるので、さきほど出力したファイルを追加。

image

出力結果

image

 

はじめに

TDDが好きなので、コードの重複を計測するツール PMDについて調べてみた。

DRY原則とは

DRY原則とは、”Don’t Repeat YourSelf”の略。

簡単に言ってしまえば、コピペするな、ということだ。

重複なコードを書くならば、リファクタリングして、共通部分は共通化しようという考え方。

CPDで重複コードを計測する

このコードの重複さを計測するツールが PMDだ。PMD公式サイトから最新版をダウンロードする。

PMDはJAVA用のツールだが、それに付随するCPDというコマンドで、オプションにJAVA以外の言語を指定すると、他の言語でも使える。(C言語, C++, PHPとか)

Windowsの場合

<div class="outline-text-3" id="text-3-1">
  <p>
    zipファイルを解凍したら /bin配下に cpd.batというファイルがある。 これがコマンドラインから実行するためのコマンドになる。
  </p>

  <p>
    cpdの使い方は以下の通り。
  </p>

  <pre><code>cpd 

–minimum-tokens xxx 重複差を指定する。xxxを50にすれば50行以上の重複を報告 –files xxx ファイルのパス [–language xxx] 言語。自分はC言語を使いたいので –language c みたいな [–encoding xxx] エンコード指定 [–format (xml|text|csv|vs)] 出力フォーマット指定

  <p>
    例えば、重複度10でC言語でXML出力ならば、こんな感じ。
  </p>

  <pre><code>“C:\Program Files (x86)\pmd-bin-5.0-alpha\bin\cpd”

–minimum-tokens 10 –files src –language c –format xml>cpd_result.xml

  <p>
    最後にリダイレクトでファイルに出力してやる。
  </p>

  <p>
    現在の最新版 pmd 5.0だとエラーして苦労した。
  </p>

  <ul class="org-ul">
    <li>
      <i>CPDでsaxon9-dom.jarがないよと怒られ</i>
    </li>
  </ul>
</div></p>

Jenkins DRY Pluginを入れる

XML形式で出力した結果をJenkinsで表示してみる。

をJenkinsのプラグインで追加する。

プラグインをインストールすると、[ビルド後の処理の追加]で重複コード分析の集計が現れるので、さきほど出力したファイルを追加。

image

出力結果

<div class="outline-text-2" id="text-5">
  <a href="http://hmi-me.ciao.jp/wordpress/wp-content/uploads/image27.png"><img style="background-image: none; padding-left: 0px; padding-right: 0px; display: inline; padding-top: 0px; border: 0px;" title="image" src="http://hmi-me.ciao.jp/wordpress/wp-content/uploads/image_thumb27.png" alt="image" width="566" height="281" border="0" /></a> </p> 

  <p>
    Jenkinsさんと一緒に思わずニンマリ。
  </p></p>
</div></p>

19 Jun 2013, 10:09

Rubyで書かれた統合C言語TDD開発環境 「Ceedling」 がけっこう便利そうな件

UnityやCMockについて色々調べて来ましたが、今日はそれらを束ねるツール Ceedlingにつついて調べました。

[toc]

Ceedlingとは

Ceedlingとは、UnityとCMockを使ってテストを実行するためのテスト管理用フレームワーク。テストを助けるための便利なツールがRubyスクリプトで書かれていて、それらを利用してC言語でのTDDをウマクやるためのツール。

Ceedlingのインストール

CeedlingはRuby,Rakeが必要なので、まずはrubyとrakeをインストールしておくこと。また、Rubygemもパッケージ取得のために必要。入れておくこと。

Ceedlingのインストールは以下のコマンドで実施する。

gem install ceedling

Ceedlingプロジェクトの作成する。

ceedling new ceedling_study

Unity・CMockを利用するためのテスト環境が一気に自動生成される。かっこ良い。(・∀・)

デフォルトでいろんなモードが用意されている。これらがテストを実施するためのお助けツール。詳しくは、使い方のドキュメントを参照。

% rake -T
rake clean# Delete all build artifacts and temporary products.
rake clobber  # Delete all generated files (and build artifacts).
rake environment  # List all configured environment variables.
rake files:header # List all collected header files.
rake files:source # List all collected source files.
rake files:test   # List all collected test files.
rake logging  # Enable logging
rake module:create[module_path]   # Generate module (source, header and test files)
rake module:destroy[module_path]  # Destroy module (source, header and test files)
rake paths:source # List all collected source paths.
rake paths:support# List all collected support paths.
rake paths:test   # List all collected test paths.
rake summary  # Execute plugin result summaries (no build triggering).
rake test:*   # Run single test ([*] real test or source file name, no path).
rake test:all # Run all unit tests.
rake test:delta   # Run tests for changed files.
rake test:path[dir]   # Run tests whose test path contains [dir] or [dir] substring.
rake test:pattern[regex]  # Run tests by matching regular expression pattern.
rake verbosity[level] # Set verbose output (silent:[0] - obnoxious:[4]).
rake version  # Display build environment version info.

vendor配下にunityとcmockのディレクトリを持ってくる。

cd vendor
git clone git://github.com/ThrowTheSwitch/Unity.git
git clone git://github.com/ThrowTheSwitch/CMock.git

仕様のドキュメントは vendor/ceedling/docs配下にある。

docs/
├── CExceptionSummary.pdf
├── CMock Summary.pdf
├── CeedlingPacket.pdf
└── Unity Summary.pdf

設定ファイルは project.ymlをいじるけれども、まずはデフォルトでOk.

Unityといっしょに使ってみる

Unityのテストコートを書いてみます。

#include "unity.h"
#include "hogehoge.h"

void setUp(void)
{
}

void tearDown(void)
{
}

void test_hogehogefirst(void)
{
  TEST_IGNORE_MESSAGE("Here");
}

実行結果

[tsu-nera]% rake test:all

Test 'Testhogehoge.c'
---------------------
Generating runner for Testhogehoge.c...
Compiling Testhogehoge_runner.c...
Compiling Testhogehoge.c...
Linking Testhogehoge.out...
Running Testhogehoge.out...

-------------------------
IGNORED UNIT TEST SUMMARY
-------------------------
[Testhogehoge.c]
  Test: test_hogehogefirst
  At line (14): "Here"

-------------------------
OVERALL UNIT TEST SUMMARY
-------------------------
TESTED:  1
PASSED:  0
FAILED:  0
IGNORED: 1

ちなみに、unity fixture形式のテストの書き方だとうまく動作しなかった。ここ3週間、仕事でUnityFixture形式のテストを書きまくったので、どうやって移植しようか。。。ウマクやる方法がわかったら追記する。

CMockといっしょに使ってみる

テストファイルに、モックしたいソースのヘッダファイルを以下の形式で書くと、CeedlingはCMockを利用してモックを自動生成する。

#include "mock_xxxxx.h"

prefixのmock_はproject.ymlの以下のパラメータを変更すれば調整可能。

:cmock:
  :mock_prefix: mock_

CMockサンプル

以下のように、uhauha()の先でhogehogeをコールしている。hogehogeをモックしたい。

uhauha.c

#include "uhauha.h"
#include "hogehoge.h"

void uhauha(void)
{
  hogehoge();
}

テストコードを以下のようにかく。

Testuhauha.c

#include "unity.h"
#include "uhauha.h"
#include "mock_hogehoge.h"

void setUp(void)
{
}

void tearDown(void)
{
}

void test_uhauhafirst(void)
{
  hogehoge_ExpectAndReturn(2);
  uhauha();
}

gcovといっしょに使ってみる

gcovを利用して、gcovデータを生成する。project.ymlにgcovプラグインの記述を追加する。

:tools:のところにgcovを追加。

:plugins:
  :load_paths:
    - vendor/ceedling/plugins
  :enabled:
    - stdout_pretty_tests_report
    - module_generator
    - gcov(ここに追加)

rakeコマンドでgcovを実行。build/gcov/outに gcnoができる。

rake gcov:all

xUnit形式のxmlファイルを生成して、Jenkinsで表示する

もともと、Unityでのテスト結果をxUnit formatのXMLに変換する方法を調べていたらceedlingを見つけたので、これがやりたかったこと。project.ymlに以下を追加する。

:plugins:
  :load_paths:
    - vendor/ceedling/plugins
  :enabled:
    - stdout_pretty_tests_report
    - module_generator
    - xml_tests_report

rakeコマンドでtestを実行。/build/artifacts/testに report.xmlができる。

<?xml version='1.0' encoding='utf-8' ?>
<TestRun>
        <FailedTests/>
        <SuccessfulTests>
                <Test id="1">
                        <Name>test/Testuhauha.c::test_uhauhafirst</Name>
                </Test>
        </SuccessfulTests>
        <IgnoredTests>
                <Test id="2">
                        <Name>test/Testhogehoge.c::test_hogehogefirst</Name>
                </Test>
        </IgnoredTests>
        <Statistics>
                <Tests>2</Tests>
                <Ignores>1</Ignores>
                <FailuresTotal>0</FailuresTotal>
                <Errors>0</Errors>
                <Failures>0</Failures>
        </Statistics>
</TestRun>

このファイルをJenkinsから表示すればよい。表示するためには、xUnit Pluginを入れる。

xUnit Plugin – Jenkins – Jenkins Wiki

xUnit Pluginには、Unity用の選択肢がない。CppUnitと形式が似ているため、xml生成用のRubyスクリプトに手を入れる。

まず、CppUnitには、Ignoreという概念がないので、L38,L100のIgnore関連の記述をコメントアウト。

L38.

=begin
    write_tests( results[:ignores], stream, 'IgnoredTests' )
=end

L100.

=begin
    stream.puts "\t\t<Ignores>#{counts[:ignored]}</Ignores>"
=end

L68行目にもバグがあるので、修正。

      stream.puts "\t\t</FailedTest>"
      # stream.puts "\t\t</Test>"

Ceedling / Discussion / Ceedling Forum:XML report

これで、Jenkinsでも結果が表示されたた。

17 Jun 2013, 13:57

cronとwatchrを使ってJenkinsからオレオレリポジトリ監視してみる

はじめに

Jenkinsを利用てリポジトリ監視をしたい。しかし、自分が利用しているSCMは社内独自ツールという、

(´・д・`)

なカンジなので、Jenkinsのプラグインがなかった。しかたがないので、こんな方法でなんとかならないか考えた。

[toc]

今回利用するもの

cronで定期リポジトリ更新

5分毎にローカルで持っているリポジトリを更新する。5分毎の定期実行はJenkinsを利用てもいいけど、これはバックグラウンドで動かしたいので、cronを利用しようと思う。

まずは、crontabに実行したいコマンドを記述する。以下のコマンドでエディタが開きます。

% crontab -e  

cronの記述方法は

「分」「時」「日」「月」「曜日」 [実行コマンド]

詳しくは、以下を参照。

crontabの書き方 — server-memo.net

「/」を利用すると、間隔を指定できる。たとえば、5分毎にコマンドを実行するには、以下のように書く。

*/5 * * * * git pull 

せっかくならば、JenkinsのJobを使ってもよい。その場合は、古いビルドの破棄にチェックを入れて、ビルドの最大保存数を制限する。Jenkinsで5分定期を動かす記法はcronと同じ。

*/5 * * * *

watchrを利用して、ファイルの変更を監視

ファイルに変更があったかどうかを監視するためのrubyスクリプトでwatchrというものがある。これで、ファイルの変更を見つけたらJenkins Jobをキックしてみる。(ちなみに、pythonだとwatchmedo)

[tsu-nera]% gem install watchr
Successfully installed watchr-0.7
Parsing documentation for watchr-0.7
1 gem installed

設定ファイルに監視のルールを書く。設定ファイルの書き方は、Readmeが参考になる。

以下のように、監視したいファイルを正規表現で、監視に引っかかったファイルに対して、実行したいコマンドを書く。

watch( 'test/test_.*\.rb' )  {|md| system("ruby #{md[0]}") }
watch( 'lib/(.*)\.rb' )      {|md| system("ruby test/test_#{md[1]}.rb") }

wathcrコマンドに設定ファイルを渡して実行する。

bash-4.1# watchr git.watchr &

wgetを利用して、Jenkinsのジョブをキック

wgetでURLを指定すると、Jenkinsのジョブを実行することができる。

$ wget --http-user=<ユーザ名> --http-password=<パスワード> http://yourserver.com/job/<ジョブ>/build?token=<トークン名>

以下の過去記事も参照。

今回はコレ。

wget --no-proxy --http-user=tsu-nera --http-password=*********** http://192.168.118.130:8080/job/vxUnit/build?token=vxunit_token

まとめると、watchrに渡す設定ファイルは以下のようになる。

watch( 'src/*.[ch]' )  {|md| system("wget --no-proxy --http-user=tsu-nera --http-password=********** http://localhost:8080/job/vxUnit/build?token=vxunit_token") }
watch( 'test/*.[ch]' )  {|md| system("wget --no-proxy --http-user=tsu-nera --http-password=********** http://localhost:8080/job/vxUnit/build?token=vxunit_token") }

19 May 2013, 10:20

CentOS 6.4にJavaとJenkinsをインストールして設定する
SnapCrab_NoName_2013-5-19_19-6-4_No-00.png

CentOSにJenkinsサーバを導入する手順をまとました。この公式手順にしたがいます。

Installing Jenkins on RedHat distributions – Jenkins – Jenkins Wiki

環境

Javaのインストール

JenkinsはJavaで動作するので、Javaが入っていない場合は、先に入れます。自分の場合は、入ってなかったので、入れました。

ちなみにここで注意が必要。CentOSのデフォルトjavaではJenkinsは動作しないらしい。Sun公式Javaと互換性のあるもの(Sun-compatible)が必要か。

すでにCentOS用のJavaが入っている場合は、削除してJavaを入れなおす。Sunと互換性のあるJavaを入れなおす。一番簡単な方法はjava-1.6.0-openjdkを入れること、と書いてある。記事が古そうなので、1.7を入れる。

sudo yum install java-1.7.0-openjdk

インストールできたか確認。

java -version
java version "1.7.0_19"
OpenJDK Runtime Environment (rhel-2.3.9.1.el6_4-i386)
OpenJDK Client VM (build 23.7-b01, mixed mode, sharing)

関係ないけど、Windowsに導入した以下の記事も参考。いろいろ雑学がのってます。

Java JDK インストール方法まとめ(Windows) | Futurismo

Jenkinsのインストール

公式HPにそってコマンドを叩くだけの簡単なお仕事。wgetも入れておくこと。

sudo wget -O /etc/yum.repos.d/jenkins.repo http://pkg.jenkins-ci.org/redhat/jenkins.repo
sudo rpm --import http://pkg.jenkins-ci.org/redhat/jenkins-ci.org.key
sudo yum -y install jenkins

簡単かとおもったが、エラーした。。。

 Downloading Packages:
http://pkg.jenkins-ci.org/redhat/jenkins-1.515-1.1.noarch.rpm: [Errno 14] PYCURL ERROR 22 - "The requested URL returned error: 404 Not Found"
Trying other mirror.


Error Downloading Packages:
  jenkins-1.515-1.1.noarch: failure: jenkins-1.515-1.1.noarch.rpm from jenkins: [Errno 256] No more mirrors to try.

以下のサイトを頼りに解決方法を探す。

CentOS6.2にJenkinsをインストールする手順 | mawatari.jp

rpmで直接インストールします。これでOK.

wget http://pkg.jenkins-ci.org/redhat/jenkins-1.515-1.1.noarch.rpm
sudo rpm -ivh jenkins-1.515-1.1.noarch.rpm

さあ、Jenkinsさん。Welcome to CentOS!

sudo /etc/init.d/jenkins start
Starting Jenkins                                           [  OK  ]

# 起動とともにJenkins起動するおまじない
sudo /sbin/chkconfig jenkins on

Windows上のブラウザからアクセスしようとするが・・・アクセスできないお(´・ω・`)

http://192.168.118.130:8080/

Jenkinsの設定

Jenkinsのデフォルトポートは8080なので、ファイアウォールの設定でポート8080を開ける。設定ファイル /etc/sysconfig/iptablesを編集する。

$ sudo emacs /etc/sysconfig/iptables

以下の一行を追加する。ただし、COMMITの上に追加すること。

-A INPUT -m state --state NEW -m tcp -p tcp --dport 8080 -j ACCEPT

ファイアウォールの再起動を実施

$ sudo service iptables restart
iptables: ファイアウォールルールを消去中:                  [  OK  ]
iptables: チェインをポリシー ACCEPT へ設定中filter         [  OK  ]
iptables: モジュールを取り外し中:                          [  OK  ]
iptables: ファイアウォールルールを適用中:                  [  OK  ]

Jenkins氏、北朝鮮より、間違えた、CentOSより来訪。

SnapCrab_NoName_2013-5-19_19-6-22_No-00.png

参考

05 Mar 2013, 12:49

EclipseとJenkinsをインテグレーションするプラグイン[Mylyn ビルド・コネクター Hadson/Jenkins]

Eclipseを使っていて、Jenkinsも使っていると、どうしてもEclipseからJenkinsを覗き見したくなります。(*/∀\*)イヤン。Eclipseは総合開発環境なので、全てEclipseから実施しないと気が済みません。

ということで、EclipseからJenkinsのビルド結果を確認するためのプラグイン

Mylyn ビルド・コネクター Hadson/Jenkins

を試しました。

インストールと導入設定

インストール

インストールは以下のURLを[ヘルプ] > [新規ソフトウェアのインストール] > [追加]に追加して、落としてくるのがよい。

http://download.eclipse.org/mylyn/releases/latest

(他にも、mylynのビューから[新規タスクの追加] > [コネクターをさらにインストール]からHadson/Jenkinsを選択してもよい。しかし、上記URLから落としてきたほうが最新版がテに入るので良い)

導入設定

まずは[ウィンドウ] > [ビューの設定] > [mylyn] > [ビルド]からビルドビューをだす。
次に、[新規ビルドサーバを追加] > [Jenkins]を選択する。

サーバーの欄にJenkinsサーバのURLを入力。
ユーザ管理されている場合は、ログインするユーザ・パスワードを入力。

これでいったん、左下の[検証]を押してサーバと接続できるか試す。
(できないときは、プラグインのバージョンが古いかも。
自分も古いバージョンでログインできずにハマった)

image

ビルド・プランの欄にJobが現れるので、Eclipseから見たいJobを選択して、完了をおす。

こんな感じ

ビューから最新のビルド結果を見ることができる。
また、ビルドの履歴、テスト結果、ビルド時のコンソールもみれる。
これがあれば、わざわざサーバまでアクセスして結果の確認をする必要もない。

image

また、ビルドの成功、失敗はポップアップ通知で表示されたりする。

[http://www.youtube.com/embed/2qTgUnHY7s4]

24 Feb 2013, 22:19

[本]Jenkins (オライリー・ジャパン)を読んだ読書メモ

オライリー社から出版されている[Jenkins](かえる本)を読んだ読書メモです。

 

トピック満載な網羅的説明

この本を読んで思ったことは、

とにかく詳しい

です。 400p近くあり、けっこう分厚いです。
インストール方法、設定方法も、いろんなOSに対する方法が書かれています。
(Ubuntu,OpenSUSE,Redhat,CentOS,Windows….etc.)
手とり足取りといった感じです。

言語はJavaをベース。ただ、多言語への言及も詳しいです。

コード品質のためプラグインの解説、通知方法なども、網羅的に様々なものが紹介されています。 つまり、これ一冊あればなんでも載っているような印象を受けました。

高度な話題としては、分散ビルドや自動化デプロイメント、継続的デリバリなども取り扱われています。(熱を入れて解説されています)このへんは個人的にはよくわかりませんでした。

gitによるJenkinsの使い方の解説が詳しい

版数管理については、Subversionとgitによる解説がされています。

Gitの説明が詳しくて重宝しました。Git Pluginの設定方法が細かく説明されていました。
gitとJenkinsを組み合わせようとすると、ネット上の情報が頼りでした。
他の書籍では、ここまで詳しくはないです。

継続的インテグレーションの目的を明確に

以下、印象に残ったフレーズの覚書。

継続的インテグレーションとは、フィードバックを素早く返すようにすることで、リスクを低減させるものです。

定期的にビルドジョブを走らせる方法は、実際には継続的インテグレーションではありません。

とくに先週は、静的解析ツールを実行しわすれたばっかりにけっこう泥沼にハマってしまったので、そんな体験を思い出す度に、フィードバックを速く返すことの重大さを意識するのだった。

おまけ

なお、この本はネットでも無料でダウンロードできるみたい。(英語だけど)

Download Jenkins: The Definitive Guide

 

 

 

02 Dec 2012, 11:24

git commitからJenkinsでSphinxドキュメントをビルド+α

SphinxとJenkinsを組み合わせたら、どんなことが可能なのか考えてみた。

結局いろいろ調べて、まだそういうツールないということはわかった。

文字列カウントも、スペルチェックもできないことは分かった。

文字列カウントは make textで生成したテキストファイルをカウントして、グラフ化する仕組みを作れば実現可能かも。

表記の揺れは、Yahoo の提供する校正支援APIを利用すれば、実現可能かも。

http://developer.yahoo.co.jp/webapi/jlp/kousei/v1/kousei.html

というわけで、できることとして、文字列カウントの代わりに、ステップカウントを入れた。

追加で、JenkinsのTask Scanner Pluginを入れた。

こんな流れ

sphinxのファイルをgit commit

Jenkinsにwgetで通知

Jenkinsで make html

Task Scan

ステップカウント

うーん、これではまだまだ使い物にはならないな。

image