バッチファイルでリリースビルド
こんにちは、開発担当の Masa です。
リリースの度にモジュールをビルドするのが億劫なこの頃です。
もちろん、モジュール毎に ant ビルドファイルが用意されているのですが、
各地に散らばったビルドファイルを実行するのが面倒というか実行し忘れ(ry...
というわけで、リリースビルド用のバッチファイルを作成します。
(追記) ant から gradle に移行したのですぐに過去の遺産となりました。。。
まずは ant コマンドを実行から。
バッチファイルから別のバッチファイルを実行するとそのまま終了するので、
call または start で呼び出します。(call は別バッチプログラムの終了を待つ)
setlocal set PATH_1=C:\hoge1\ echo ★★★hoge1のビルド★★★ pushd %PATH_1% call ant
成功したかどうかわからないので、ビルドエラーを ERRORLEVEL で確認して...
call ant if %ERRORLEVEL% geq 1 goto quit :quit
このままだとビルドエラー時に突然終了するのでメッセージを出します。
メッセージ処理をサブルーチン化して、
setlocal set MSG=ビルドに失敗しました。処理を続けますか? set TITLE=確認 set TYPE=vbyesno set RESULT=1 :quit pause exit :func_msg echo x=msgbox("%MSG%",%TYPE%,"%TITLE%") : wscript.stdout.writeline(x) > %TEMP%\msg.vbs for /f "tokens=*" %%a in ('cscript //nologo "%TEMP%\msg.vbs"') do ( set RESULT=%%a ) del %TEMP%\msg.vbs
処理中断時には終了するようにします。
続行時は、exit /b でメインルーチンに戻ります。
if %RESULT%==7 ( goto quit ) else ( exit /b )
サブルーチンなので call で呼び出します。
if %ERRORLEVEL% geq 1 call :func_msg :quit pause exit
複数のモジュールをビルドできるように ant 実行をループ処理にします。
遅延環境変数の展開を有効にして、
setlocal enabledelayedexpansion
設定されたパスの数だけ ant を実行します。
擬似配列です...
set PATH[0]=C:\hoge1\ set PATH[1]=C:\hoge2\ set PATH[2]=C:\hoge3\ set LAST_INDEX=2 for /L %%i in (0,1,%LAST_INDEX%) do ( echo. echo ★★★!PATH[%%i]!のビルド★★★ pushd !PATH[%%i]! call ant if %ERRORLEVEL% geq 1 call :func_msg )
完成!!
@echo off setlocal enabledelayedexpansion set MSG=ビルドに失敗しました。処理を続けますか? set TITLE=確認 set TYPE=vbyesno set RESULT=1 set PATH[0]=C:\hoge1\ set PATH[1]=C:\hoge2\ set PATH[2]=C:\hoge3\ set LAST_INDEX=2 for /L %%i in (0,1,%LAST_INDEX%) do ( echo. echo ★★★!PATH[%%i]!のビルド★★★ pushd !PATH[%%i]! call ant if %ERRORLEVEL% geq 1 call :func_msg ) :quit pause exit :func_msg echo x=msgbox("%MSG%",%TYPE%,"%TITLE%") : wscript.stdout.writeline(x) > %TEMP%\msg.vbs for /f "tokens=*" %%a in ('cscript //nologo "%TEMP%\msg.vbs"') do ( set RESULT=%%a ) del %TEMP%\msg.vbs if %RESULT%==7 ( goto quit ) else ( exit /b )