如何为Jenkins设置MSBuild工具的路径?

时间:2018-07-12 05:38:41

标签: windows jenkins msbuild

我正在尝试使用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构建从属设置那些变量?

2 个答案:

答案 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\""
    }
}