はじめに
Jenkinsを使ってC++/VB.netを扱う場合、MSBuildプラグインなどC++/VB.net用のプラグインを利用すると思いますが、会社や環境によってプラグインの追加を制限されていると思います。そんな時に使えるバッチコマンドをメモとして残したいと思います。
今後、随時追加していきたいと思います。
前提
- Jenkinsが稼働しているマシンのOS: Windows Server (Linuxではない)
- ビルド環境でJenkinsが稼働している
- 上記にVisual Studioをインストール済み
- ビルド環境と開発環境(デプロイ先)は別マシン
コマンド一覧
0.コマンドの使い方を調べる「<コマンド> /?」
例えば、「dir /?」と実行するとdirの使い方が表示されます。
コマンドについてわからないことがあれば、すぐにググって調べるのもいいですが、まずは「/?」で使い方を確認してみましょう。
1.ビルドできるようにPATHを通す「set PATH=%PATH%;<通したいパス>」
Visual StudioでC++やVB.netをビルドする場合、MSBuild.exeやLC.exeを利用してビルドしています。
従って、バッチからビルドするにはMSBuild/LC.exeのフォルダのパスを環境変数PATHに設定して利用することになりますが、Visual Studioをインストールしただけでは環境変数に設定されません。システム環境変数にこれらのパスを設定してよいならそれでよいのですが、サーバの環境変数をルール上変更できない場合もあると思います。その場合は「set PATH=%PATH%;;<LC.exeのフォルダパス」をバッチファイルに埋め込んでパスをバッチ内でパスを通すようにしましょう。
2.exeのパスを調べる「where <調べたいexe>」
上記でパスを通すにはMSBuild.exeのパスを当然ですが知っていないと通せません。
コマンドの実行ファイルがどこにあるかを調べるためにwhereコマンドを使います。
Visual Studioの開発者用のコマンドプロンプトを開き、「where MSBuild」と入力するとMSBuild.exeフォルダのフルパスが表示されます。
3.ビルド環境と開発環境をつなぐ「net use <開発環境のネットワークパス> <パスワード> /USER:<ユーザのドメイン>\ユーザ名」
通常、別のマシンのフォルダを参照するにはエクスプローラ上で「\<接続したいホスト名~~~」の形で参照させますが、バッチから「\接続したいホスト名」と入力しても接続できません。
そこで 別マシンにファイルのコピーなどを実行する前にnet useコマンドを使って別マシンを接続しておく必要があります。
4.デプロイ時にrobocopyを使う場合はerrorlevelの設定を忘れずに
ビルド実行しビルド成果物である.exeや.dllを開発環境へデプロイするときにrobocopyを利用する場合に少し注意が必要です。
通常のバッチコマンドでは「成功時:0」「エラー有:0以外」です。jenkinsのビルド成功/失敗もこのerrorlevelで判断しています。
しかし、robocopyコマンドが成功した場合もerrorlevelが0以外になる場合があるため、注意が必要です。
robocopyではerrorlevelが0~4がコマンド成功、5以上がコマンド失敗になっています。
jenkinsのバッチで最後にrobocopyを実行する場合、errorlevelで場合分けして最終的なバッチの戻り値とする必要があります。