私はこの問題を少し違った方法で解決しました。Windows ワーカーにバッチ ファイルをインストールすると、起動時に環境設定バッチ ファイルが呼び出され、目的のコマンドが実行されます。もちろん、これは、バッチ ファイルが引数を転送するのがひどいという事実と、Visual Studio 2017 の VsDevCmd.bat が cwd を破壊するという事実によって、さらに難しくなっています。ただし、ワーカーに次のファイルをインストールすると、VS2017 でビルドできます。
@ECHO OFF
@REM Calls a single command from the environment set from visual studio vcvars.
@REM Usage:
@REM withvcvars-2017.bat <arch> [command]
@REM
@REM Run VsDevCmd.bat /help to see available arches
@REM See below instantiation for more fine grained option setting.
set ARCH=%1
shift
setlocal enabledelayedexpansion
@rem Replace __ with = in batch files.
@rem This works around idiotic lack of equals signs in args
@rem args contains full args string with substitutions in place
:argloop
if "%~1" NEQ "" (
set str=%~1
set out=!str:__==!
set %~1=!out!
set args=!args!!out!
SHIFT
goto :argloop
)
@rem Aside from batch files being too moronic to allow for equals signs in args,
@rem VsDevCmd.bat idiotically clobbers the current working directory when it's called.
set CWD=%cd%
echo Calling VsDevCmd.bat for arch %ARCH%
call "C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\Common7\Tools\VsDevCmd.bat" -arch=%ARCH% -winsdk=8.1 -app_platform=Desktop -no_logo
@rem Who lets these things out the door?
cd %CWD%
@ECHO ON
%args%
これが完了したら、このバッチ ファイルを追加する関数を bulidbot マスター ロジックに作成できます。
def _withvcvars(year, arch, cmd):
base_cmd = ["%swithvcvars-%s.bat" % ('\\path\\to\\batchfile\\', year), arch]
return base+cmd
これにより、引数に等号が必要な msbuild.exe を呼び出すコマンドを実行できます。2 つのアンダースコアとして指定するだけです。
withvcvars-2017.bat amd64 msbuild.exe your.sln /p:Configuration__Release /p:Platform__x64