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実行結果の詳細も見ることができます。