JenkinsユーザのためのWindowsバッチコマンド入門
- 作者: 山近慶一
- 出版社/メーカー: 技術評論社
- 発売日: 2011/12/09
- メディア: 単行本(ソフトカバー)
- 購入: 14人 クリック: 228回
- この商品を含むブログ (16件) を見る
Jenkins Advent Calendar jp 2011の13日目の記事になります。Windowsバッチファイルについてtipsをご紹介します。
Windowsマシンでサーバってどうなんだろうって思いつつ、転がってた少し古い Windows XP マシンに Jenkins を入れたら簡単に動作しました。その流れで実運用で使っています。Unix系のシェルスクリプトは書いたことがあったのですが、Windowsのバッチファイルは書いたことがなく、手頃な資料もなく困りました。調べたものをまとめたものです。
Windowsコマンドプロンプト基礎文法最速マスター が非常に参考になりましたので、リファレンスとしてはこちらが良いと思います。
変数の参照
%変数名% のように%で囲ってください。存在しない変数の場合はそのまま返ってきます。
引数
%数字で取得できます。%0はプログラム名で %1から引数になります。
echo %1 %2
終了コードの返却
exit /b [終了コード] を指定することで ERRORLEVEL として返却することができます。
exit /b 0
戻り値の判定と設定方法 (ERRORLEVEL)
Jenkinsでバッチコマンドを実行する場合、戻り値が重要です。
ビルドステップでのシェルやバッチでは、戻り値が0の場合、成功、それ以外は失敗と判断されます。
呼び出したバッチファイルやコマンドの戻り値は、環境変数のERRORLEVELに入りますのでそれで判定します。
if not %ERRORLEVEL% == 0 ( exit /b %ERRORLEVEL% )
環境変数の一時使用(setlocal/endlocal)
setlocal endlocal
で囲んでおくと、setlocal以降に設定した環境変数は、そのバッチファイル中のみで有効なため一時使用ができます。バッチファイルを抜けると元に戻るため、環境変数を汚さず済みます。
endlocal は明示的に呼ばなくても良いです。(バッチファイルの終了時にも暗黙に実行される)
バッチファイル実行(call)
call で呼ぶことが大事です。callで呼ばないとJenkins側から呼び出した最初のバッチコマンドが終了するとそのまま終了してしまいます。
call build.bat
Windowdバッチコマンドの設定例 (JOBのサンプル)
実際のクロスコンパイラのJOBの設定です。
JenkinsのJOBには、下記の設定をしておきます。
SETUP.batはチェックアウトしたprojectファイルをJenkinsのworkspaceのパスに調整するものですが本題と離れるので割愛します。
build.batは、こんな感じで、ビルド用のバッチファイル書きました。
- build.bat
@echo off setlocal rem BUILD script of WindRiver Workbench project rem *** Customize PROJECT variable to your project name *** SET PROJECT=SAMPLE_DKM SET CUR_DIR=%~dp0 rem SET BUILD_SPEC=build SET BUILD_SPEC=rebuild echo ********************************************** echo *** %BUILD_SPEC% DKM module *** echo ********************************************** CALL C:\WindRiver\wrenv.exe -p vxworks-6.8 wr_update.bat %CUR_DIR% %PROJECT% %BUILD_SPEC% echo ERRORLEVEL = %ERRORLEVEL% if not %ERRORLEVEL% == 0 ( endlocal echo *** %BUILD_SPEC% failed. %ERRORLEVEL% *** exit /b %ERRORLEVEL% ) endlocal echo %BUILD_SPEC% completed. exit /b
- wr_update.bat
@echo off CALL wrws_update.bat -data %1 -l %2 -b %3 if not %ERRORLEVEL% == 0 ( echo *** wrws_update failed. %ERRORLEVEL% *** exit /b %ERRORLEVEL% )
wrenv で、ビルドコマンドを指定するバッチファイルを指定する仕様ですが、wrenvは指定したバッチファイルが実行さえできれば正常なため、ビルドエラーになって戻り値は0(正常)です。Jenkinsでビルド失敗を戻り値で判断できないのです。困った。
%ERRORLEVEL% にて判定できない場合の対処 (Log Parser Pluginを使う)
ビルドした出力はコンソールに出ています。戻り値の判定で、Jenkinsのビルドを失敗にすることはできませんが、 Log Parser Plugin を使って Console を解析することで、エラーにできます。
まず、Log Parser Plugin を追加してください。
本サンプルJOBでは、ビルドエラー時に以下のようなエラーがコンソールに出力されます。
************************************************************ Build Started in Project 'SAMPLE_DKM': 2011-12-12 20:37:50 Generation of makefiles started. Generation of makefiles finished (Elapsed Time: 00:01). Platform: Wind River VxWorks 6.8 Command: make --no-print-directory BUILD_SPEC=PPC32e500v2diab_SMP DEBUG_MODE=1 Working Directory: C:/Jenkins/workspace/SAMPLE_build_fail/VxWorks6.8/SAMPLE_DKM/PPC32e500v2diab_SMP building SAMPLE_DKM_partialImage/Debug/Objects/SAMPLE_DKM/sample.o "C:/Jenkins/workspace/SAMPLE_build_fail/VxWorks6.8/SAMPLE_DKM/conf.h", line 4: catastrophic error (etoa:4005): could not open source file "conf_env.h" #include "conf_env.h" ^ 1 catastrophic error detected in the compilation of "C:/Jenkins/workspace/SAMPLE_build_fail/sample.cpp". Compilation terminated. C:\WindRiver\utilities-1.0\x86-win32\bin\make.exe: *** [SAMPLE_DKM_partialImage/Debug/Objects/SAMPLE_DKM/sample.o] Error 1 Build Failed in Project 'SAMPLE_DKM' (Process Exit Value was '2'): 2011-12-12 20:37:53 (Elapsed Time: 00:03) ************************************************************ Finished Workspace Update Application. ERRORLEVEL = 0 completed. Build step 'Console output (build log) parsing' changed build result to FAILURE Finished: FAILURE
Compilation terminated. がコンパイルを中止時に出ていますので、これをエラーと判断することにします。
error /Compilation terminated./
と書いて、適当なテキストファイルで保存します。たとえば、
C:\jenkins\rules\dcc_rules.txt
"システムの設定"で、Console Output Parsingを設定しておきます。
これで、ビルドエラー時に失敗となります。
Parsed Console Outputで詳細を見られます。
コンソールの解析した箇所も色がつきます。
最後に
いかがでしたでしょうか。
Windowsバッチファイルのはっきりしたリファレンスが見つからず、心残りではありますが書けるようになったかと思います。
またJenkinsはコンソールの出力を判定することもでき、ビルド結果を制御することもできるようになっていますので柔軟にビルド処理が組めるようになっています。
次は、@suzukima さんです。よろしくお願いします。
実験環境
- 作者: John Ferguson Smart,Sky株式会社玉川竜司
- 出版社/メーカー: オライリージャパン
- 発売日: 2012/02/22
- メディア: 大型本
- 購入: 12人 クリック: 336回
- この商品を含むブログ (33件) を見る
- 作者: 末広尚義,竹内一成,太田健一郎,西川茂伸
- 出版社/メーカー: 秀和システム
- 発売日: 2012/09
- メディア: 単行本
- 購入: 5人 クリック: 121回
- この商品を含むブログ (8件) を見る