我正在尝试使用Visual Studio的MSBuild工具自动构建软件。问题是:詹金斯找不到它。
我的第一个尝试是将MSBuild.exe路径添加到环境变量PATH
中。很好,行得通。但是随后NuGet丢失了,所以我不得不下载nugget.exe并将其路径也放到PATH
。
但是现在我正面临一个我可能无法轻松解决的问题。它找不到CL.exe
。即使我添加了它,也缺少其他东西。
因此,我做了一些研究,发现了有关vcvarsall.bat的信息。
在我的Jenkinsfile文件中,我尝试了以下操作:
stages {
stage('Set up paths') {
steps {
bat '"C:\\Program Files (x86)\\Microsoft Visual Studio 14.0\\VC\\vcvarsall.bat x86"'
}
}
stage('Build') {
steps {
bat 'msbuild myProject.vcxproj /p:configuration=debug /p:platform=win32
}
}
}
但这不起作用。找不到MSBuild和CL.exe。我还尝试使用call
并将它们置于这样的阶段:
stage('Build') {
steps {
bat '''
call "C:\\Program Files (x86)\\Microsoft Visual Studio 14.0\\VC\\vcvarsall.bat x86"
call msbuild myProject.vcxproj /p:configuration=debug /p:platform=win32
'''
}
}
但是它也不起作用。
现在,我正在尝试使vcvarsall在引导时运行,但是调用它并不会影响cmd的新实例。
我现在该怎么办?如何为Jenkins构建从属设置那些变量?
答案 0 :(得分:0)
似乎在另一步骤中调用vcvarsall根本不起作用。但是在与msbuild相同的bat语句中调用它们会起作用。 但是:在不同位置有不同的vcvars文件。
由于我只需要32位编译(由于某些旧组件...),我只需成功运行以下Jenkinsfile:
$ echo -e "A \xd8\xa8 ña ñe ño áÄãç " | sed -r "s/[^\x21-\x7F]//g"
Aaeo
答案 1 :(得分:0)
更好的方法是执行“ vcvars32.bat”和&“剩余脚本”。示例:
environment {
VS_TOOLS="C:\\Program Files (x86)\\Microsoft Visual Studio\\2017\\Enterprise\\Common7\\Tools"
VS_MSBUILDCMD="${VS_TOOLS}\\VsMSBuildCmd.bat"
VS_DEVCMD="${VS_TOOLS}\\VSDevCmd.bat"
}
stage('Test') {
steps {
echo Performing unit tests"
bat label: 'Test Components', script: "\"${VS_DEVCMD}\" && vstest.console.exe /Platform:x64 /logger:trx;LogFileName=\"TestResult.trx\" \"TestComponent.dll\""
}
}