Entries

スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

HudsonとWindowsバッチコマンドの実行

タグ: Hudson

Hudson 1.351のビルド手順の1種「Windowsバッチコマンドの実行」はテキストをバッチファイルとして実行するが、そのバッチファイルの最後には「exit 0」という行が追加される。
そうとは知らずにこのようなテキストを書いてビルドすると、

CALL :COPY "foo\foo.dll"
CALL :COPY "bar\bar.dll"
CALL :COPY "baz\baz.exe"
GOTO :EOF

:COPY
COPY %1 artifacts
IF EXIST "%~dpn1.pdb" COPY "%~dpn1.pdb" artifacts

CALL :COPY してからEOFに辿り着くまでの間に exit 0 が実行されることになるため、 CALL から戻ることなくバッチ処理が終了してしまう。

ユーザーanonymousが実行
マスターでビルドします。
[workspace] $ cmd /c call C:\DOCUME~1\IDLYSP~1\LOCALS~1\Temp\hudson2823170059005737540.bat

C:\hudson\jobs\test\workspace>CALL :COPY "foo\foo.dll" 

C:\hudson\jobs\test\workspace>COPY "foo\foo.dll" artifacts 
        1 個のファイルをコピーしました。

C:\hudson\jobs\test\workspace>IF EXIST "C:\hudson\jobs\test\workspace\foo\foo.pdb" COPY "C:\hudson\jobs\test\workspace\foo\foo.pdb" artifacts 

C:\hudson\jobs\test\workspace>exit 0 
Finished: SUCCESS

よって末尾で不要に思えても GOTO :EOF を欠かしてはならない。

CALL :COPY "foo\foo.dll"
CALL :COPY "bar\bar.dll"
CALL :COPY "baz\baz.exe"
GOTO :EXIT

:COPY
COPY %1 artifacts
IF EXIST "%~dpn1.pdb" COPY "%~dpn1.pdb" artifacts
GOTO :EOF

:EXIT

また、「Windowsバッチコマンドの実行」が生成するバッチファイルは改行コードが「CRLF」ではなく「LF」になっている。
2バイト文字を使っていると実行時に一部の文字が消失してしまうことになるのでその点も注意が必要。

スポンサーサイト

コメント

コメントの投稿

コメントの投稿
管理者にだけ表示を許可する

トラックバック

トラックバック URL
http://idlysphere.blog66.fc2.com/tb.php/238-50df1428
この記事にトラックバックする(FC2ブログユーザー)

Appendix

タグ

Blog内検索

上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。