0.前置き
CI環境でMSBuildをオプションを考えずにそのまま(?)走らせると、大量のログが出て
ビルドのパフォーマンス劣化の原因になります。
そこで適切な量のログを出力するにはどうしたら良いかを書いてみます。
1.MSBuildの紹介
.NETの開発で利用するビルドツールです。
CI環境で利用する場合は、もっぱらコマンドラインで利用します。
私は主にpsakeを利用したビルドスクリプトを利用しています。
(psakeについては「初めてのpsake ~PowerShelを使ったビルドツール~」を参照してください。)
MSBuildのコマンドラインオプションについては、MSDNに記載があります。
MSBuild コマンド ライン リファレンス
ログ出力は、オプションの種類はわかりますが、いったいどんなログが出るのかこのドキュメントからは分かりません。
そこでよく使いそうなのに目星をつけてまとめてみました。
2. ログ関連の出力オプション
2-0. 試したソリューション
4プロジェクト入っているソリューションです。(クラスは1つずつくらいしかない)
「BuildMessage.sln」という名称。
2-1. 「/nologo」オプション
このオプションを付与すると、MSBuildの著作権情報を出力しません。
/nologoオプションをつけない場合、下記が出力されます。
2-2. 「/verbosity」オプション
ログの出力レベル(量)を制御します。追加オプション(モード)ごとに記載します。
q[uiet]
全く何も出力されないです。
m[inimal]
各プロジェクトで生成物が表示されます。今回の場合は下記の4行だけ出ました。
n[ormal]
オプションを指定しない場合に使われるモード。
ビルド時に実行される各ステップの概要が出力されます。
dllコピー情報、CoreComple実行情報、ビルドの結果(成功/失敗・経過時間)など。
出力されるログの情報の量は4KBくらいになりました。
d[etailed]
normalに加えて、対象プロジェクトの参照情報、参照dllの検索情報を出力。
ファイルサイズだと400KBくらい。
diag[nostic]
とにかく全ての情報。よっぽどなことがない限り必要なさそうです。
ファイルサイズだと1600KBくらい。
共通
ちなみに、どのモードでもビルドエラーを起こさせた場合のメッセージに違いはなかったです。
2-3. 「/consoleloggerparameters (/clp)」オプション
ログの出力項目を制御します。モードがたくさんあるので、2つだけピックアップ。
PerformanceSummary
各プロジェクトの呼び出し回数、所要時間を出力します。
その他、ビルド内部処理のパフォーマンス情報を出力。
プロジェクトごとの所要時間は有用ですが、他はいらないかな。
ShowTimestamp
タイムスタンプを左につけてくれます。
/verbosityがm以下の場合、そもそもログの量が少ないので意味がないです。
3.最後に
いろいろ調べましたけど、CI環境では下記の書き方が一番良いかなと思います。
[sourcecode]
msbuild BuildMessage.sln /nologo /verbosity:m
[/sourcecode]
ビルドが効率的にならないな、もしくはビルドに何らかの不具合があるって場合には、
より詳細なログを出していくことになると思います。
基本的には適切なログの量にして、素早くビルドできるようにするのがいいですね。
コメント