【问题标题】:[Jenkins]Build c++ solution file using devenv.com[Jenkins]使用 devenv.com 构建 c++ 解决方案文件
【发布时间】:2014-12-30 02:31:56
【问题描述】:

我有一个名为 MySolution.sln 的 VS2008 解决方案文件,其中包含三个项目 ProjectName1、ProjectName2、ProjectName3 和 ProjectName4。我正在使用 jenkins 构建解决方案(仅构建 ProjectName1/2/3 而不是 ProjectName4)。下面是已经提供给詹金斯的批次。

问题是每当我们说,语句 "%VSDIR%\devenv.com" "MySolution.sln" /Build "Release|x64" /Project ProjectName1 未能构建我的 %errorlevel% 未更新为的特定项目非负整数 (>0)。无论通过/失败,%errorlevel% 始终为“0”

詹金斯这样称呼它

cmd /c call C:\Users\John\AppData\Local\Temp\hudson343434346343.bat

对此有什么想法吗?

批处理脚本:

@ECHO OFF
set VSDIR=C:\Program Files (x86)\Microsoft Visual Studio 9.0\Common7\IDE

"%VSDIR%\devenv.com" "MySolution.sln" /Clean "Release|x64"

"%VSDIR%\devenv.com" "MySolution.sln" /Build "Release|x64" /Project ProjectName1
IF %ERRORLEVEL% EQU 0 (
  "%VSDIR%\devenv.com" "MySolution.sln" /Build "Release|x64" /Project ProjectName2
  IF %ERRORLEVEL% EQU 0 (
    "%VSDIR%\devenv.com" "MySolution.sln" /Build "Release|x64" /Project ProjectName3
    IF %ERRORLEVEL% EQU 0 (
    ) ELSE (
        echo "Failed to build ProjectName3"
    )
  ) ELSE (
      echo "Failed to build ProjectName2"
  )
) ELSE (
    echo "Failed to build ProjectName1"
)
unset VSDIR

【问题讨论】:

    标签: windows batch-file visual-studio-2008 jenkins batch-processing


    【解决方案1】:

    我有几个建议可以让这更简单、更可靠。

    您无需单独调用 devenv.com 即可执行 /Clean。只需将后续 devenv.com 调用中的 /Build 命令替换为 /Rebuild,这将在从头开始构建之前进行清理。

    每次调用 devenv.com 后立即执行:

    if ERRORLEVEL 1 echo Error building Solution X & goto some-label
    

    这将检测 1或更高的任何 ERRORLEVEL。这种方法不需要任何括号或 ELSE 子句,并且避免了嵌套后续 IF 语句的需要。

    您还可以通过一次 devenv.com 调用构建 3 个(共 4 个)项目。这将要求您指定排除(跳过)第四个项目的解决方案构建配置。例如:

    "%VSDIR%\devenv.com" "MySolution.sln" /Rebuild "Release-Jenkins|x64"
    

    上述方法需要首先在 Visual Studio IDE 中加载解决方案,进入配置管理器,然后创建新的解决方案构建配置(基于现有 发布 构建配置的副本)。将新的解决方案构建配置命名为 Release-Jenkins(或其他),然后确保您希望排除的项目对于 Win32/x64/AnyCPU 的每个变体都未选中.此外,请务必取消选中创建新项目配置复选框,因为您不需要任何新项目配置。还为 Debug 构建创建相应的解决方案构建配置,即 Debug-Jenkins

    unset 命令适用于 bash,但不适用于 cmd.exe shell。要取消定义变量,请执行以下操作:

    set VSDIR=
    

    = 符号后面没有任何内容。或者更好的是,在 @ECHO OFF 之后立即添加命令 SETLOCALSETLOCAL 语句将确保在批处理文件退出时丢弃任何环境变量更改。

    【讨论】:

      【解决方案2】:

      只需使用 MSBuild 插件。一切就绪。

      【讨论】:

        猜你喜欢
        • 2012-12-16
        • 2011-09-09
        • 1970-01-01
        • 2010-09-22
        • 1970-01-01
        • 1970-01-01
        • 2019-08-29
        • 2011-12-24
        • 1970-01-01
        相关资源
        最近更新 更多