Table of Contents
1 Valgrind Pluginとは
Valgrindを実行し、Jenkins上で結果を閲覧するプラグインです。
Valgrindの実行をValgrind Pluginに任せても独自に実行しても構いません。
2 valgrindのインストール
テスト実行環境にvalgrindをインストールします。Debian 8なのでapt-getでインストールします。
$ sudo apt-get install -y valgrind
3 Valgrind Pluginのインストール
Jenkinsのプラグイン制御画面からインストールします。
Jenkinsの管理 -> プラグインの管理 -> 利用可能
4 システムの設定
システムの設定のValgrind PublisherでValgrind検出箇所で表示するソースコードの行数を指定します。
Jenkinsの管理 -> システムの設定 -> Valgrind Publisher
Stacktrace, prefix lines of code Valgrind検出箇所で表示する前部分の行数 Stacktrace, suffix lines of code Valgrind検出箇所で表示する後部分の行数
5 ジョブの設定
5.1 ビルド手順の追加(Run Valgrind)
Run Valgrindでvalgrindの挙動を制御します。
主だったパラメータは以下の通りです。
Executable Include Pattern valgrindを実行するプログラム名(パターンマッチング) Executable Exclude Pattern valgrindを実行しないプログラム名(パターンマッチング) File Ending valgrind実行結果を保存するファイルのアペンディクス
Executable Include Patternに指定したパターンにマッチするプログラムに全てついてvalgrindが実行されます。
例えば、memleak1とmemleak2というプログラムがあった場合、memleak*を指定します。
Executable Exclude PatternはExecutable Include Patternの結果から除外するパターンを指定します。
例えば、memleak1とmemleak2というプログラムは実行したいが、memleak1.cとmemleak2.cを除外する場合は*.cを指定します。
File Endingに.valgrind.xmlを指定すると各プログラムに対して、以下の名前のxmlファイルにvalgrind実行結果が保存されます。
<program>.<pid>.valgrind.xml
5.2 ビルド後の処理の追加(Publish Valgrind results)
Report PatternにFile Endingで作成されたファイル名のパターンを指定します。
パターンではなく完全一致でも問題ありません。
5.3 ビルド手順の追加(独自の手順)
Run Valgrindは若干柔軟性に欠けるので(ディレクトリ変更に対応できない等)、独自にシェルスクリプトを実行してxmlファイルを出力しても良いでしょう。
以下のコマンドは/var/lib/jenkinsディレクトリ配下でJenkinsを動作させ、Run Valgrindの実行した場合と同等です。
$ valgrind –tool=memcheck –leak-check=full –show-reachable=no –undef-value-errors=no –track-origins=no –child-silent-after-fork=no –trace-children=no –gen-suppressions=no –xml=yes –xml-file=/var/lib/jenkins/jobs/a/workspace/memleak.%p.valgrind.xml /var/lib/jenkins/jobs/a/workspace/memleak
6 コンソール出力
memleakというプログラムに対して、コンソールに以下のように出力されました。
$ valgrind –version[Valgrind] detected valgrind version (valgrind): 3.10.0[Valgrind] includes files: memleak[Valgrind] working dir: /var/lib/jenkins/jobs/a/workspace[workspace] $ valgrind –tool=memcheck –leak-check=full–show-reachable=no –undef-value-errors=no –track-origins=no–child-silent-after-fork=no –trace-children=no–gen-suppressions=no –xml=yes–xml-file=/var/lib/jenkins/jobs/a/workspace/memleak.%p.valgrind.xml/var/lib/jenkins/jobs/a/workspace/memleak[Valgrind] valgrind exit code: 0[Valgrind] Files to copy:[Valgrind] memleak.16916.valgrind.xml[Valgrind] Copying memleak.16916.valgrind.xml to/var/lib/jenkins/jobs/a/builds/1/valgrind-plugin/valgrind-results/memleak.16916.valgrind.xml[Valgrind] Analysing valgrind results[Valgrind]’/mnt/valgrind-3.10.0/coregrind/m_replacemalloc/vg_replace_malloc.c’does not exist, source code won’t be available[Valgrind] copying source file’/var/lib/jenkins/jobs/a/workspace/memleak.c’ to ‘source_2.tmp’…[Valgrind] workspacePath: /var/lib/jenkins/jobs/a/workspace/[Valgrind] Ending the valgrind analysis.
7 結果
Valgrind実行結果のグラフを見ることができます。
Valgrind実行結果の詳細も見ることができます。