Yoichi's diary
2012-04-06
_ scan-build (LLVM) を試してみた。
Ubuntu環境にて pupnpのbranch-1.6.x を対象にして試した。まずは clang で普通にビルドして成功するのを確認% CC=clang ./configure % make clean allつづいて解析
% make clean % ./configure % scan-buld -k makeもしくは以下のようにしてもいい
% make clean % scan-build ./configure % scan-build makeすると、CC=/usr/share/clang/scan-build/ccc-analyzerしてビルドしつつ解析を行い結果を集計してくれて、最後に
scan-build: 19 bugs found. scan-build: Run 'scan-view /tmp/scan-build-2012-04-06-2' to examine bug reports.と表示される。実際に scan-view を実行すると web server を起動の上でブラウザを起動して結果を表示してくれる。
結果の表示例としてはscan-build: running the analyzer from the command lineにちらっとスクリーンショットが載っているが、コード中にインラインで説明が入り問題に至るコードパスを示してくれる("scan-build results" でググると具体的な解析結果の例がいろいろ見つかります)。
あとは変更すべきかどうか、変更するならどう変更するべきかをじっくり考えて(必要ならテストプログラム書いて)、変更して、テスト(scan-build でビルド成功して警告減ってること、テストプログラムで問題解消してることを確認)して、コミット。
解析させるまでの手順が簡単なのと、結果をわかりやすく表示してくれるのがいいね。
_ Jenkinsのマルチ構成を試してみた。
Building a matrix projectを参照して試した。注意点は- プロジェクト作成時にマルチ構成を選んでおく必要がある
- 既存のマルチ構成でないプロジェクトに対する設定変更では移行できない
- スレーブノードを固定する設定の場所が通常のプロジェクトと違う
- よかったこと
- これまで構成毎にプロジェクト作っていたのがプロジェクト一つになるのでプロジェクト数が抑えられる
- ひとつのプロジェクトにまとまるので同じ対象の別構成ということが見やすくなる(どれか一つでもコケると親玉は赤色になる。中を見るとそれぞれの成功失敗が見れる)
- 問題点
- 構成毎にスケジュールすることができない
[ツッコミを入れる]
2012-04-17
_ Jenkinsのマルチ構成を試してみた。の続き
いろいろひっかかったのでメモ- 制御用ジョブがマスターノードで実行される
- Matrix Tie Parent Pluginを入れて解決
- svn のクリーンチェックアウトのエミュレートを選択するとビルド用の作業コピーが毎回チェックアウトされる
- 特定スレーブで制御用ジョブとビルドジョブを両方実行してる場合に起こる
- 制御ジョブのチェックアウト時にビルドジョブ用のワークスペースを削除してしまうため
- JENKINS-11993: matrix flyweight and configuration builds have "overlapping" workspace directoriesとして報告されてる
- 制御用ジョブでSCMからチェックアウトする。
- ビルド走ってる裏でこれによるディスクアクセスが発生→ビルド時間が伸びる
- flyweight jobは同時実行数の制約外なので抑止できない
- 何か回避策はありませんか?
- 軸毎にSCMからチェックアウトする。
- JENKINS-4960: Use same SCM checkout for all matrix entriesで改善されそうだが試してない
- もしこれが制御ジョブでチェックアウトしたものを使いまわすのなら上述のflyweight jobの問題は残存する
[ツッコミを入れる]
2012-04-20
_ [jenkins] Clang Scan-Build Plugin
Clang Scan-Build Pluginを試してみた。元々xcode用のプラグインのようだがpublisher は使えるだろうということで。対象にしたのはpupnp。 結論だけだが、scan-build実行時にpluginで決め打ちされてる出力先を指定をしてやればレポートを収集してくれた。 シェルスクリプトとして以下の内容を設定した:rm -rf clangScanBuildReports ./bootstrap scan-build ./configure --enable-debug --enable-ipv6 scan-build -o clangScanBuildReports make clean all
[ツッコミを入れる]