首页 > 解决方案 > 除非已为构建用户打开交互式登录,否则 Jenkins windows slave 上的 cmake 将失败

问题描述

我们最近设置了 Jenkins 以启动 Windows 应用程序的构建自动化,这Cmake用于构建。

Jenkins slave 是按需创建的,并使用 WinRM 启动 java 连接到 Jenkins master remoting.jar,这似乎工作正常。

但是,在运行构建时,它将无法通过 ABI 检测,然后由于证书或网络密码问题而无法编译其测试应用程序,如下所示:

[build] $ c:\jenkins\tools\hudson.plugins.cmake.CmakeTool\3.19.2\bin\cmake -G "Visual Studio 16 2019" -D CMAKE_BUILD_TYPE=Release -A x64 -D CMAKE_SYSTEM_NAME=WindowsStore -D CMAKE_SYSTEM_VERSION=10.0 c:\jenkins\workspace\tpc-win10
-- Selecting Windows SDK version 10.0.18362.0 to target Windows 10.0.
-- The C compiler identification is MSVC 19.28.29335.0
-- The CXX compiler identification is MSVC 19.28.29335.0
-- Detecting C compiler ABI info
-- Detecting C compiler ABI info - failed
-- Check for working C compiler: C:/Program Files (x86)/Microsoft Visual Studio/2019/Community/VC/Tools/MSVC/14.28.29333/bin/Hostx64/x64/cl.exe
-- Check for working C compiler: C:/Program Files (x86)/Microsoft Visual Studio/2019/Community/VC/Tools/MSVC/14.28.29333/bin/Hostx64/x64/cl.exe - broken
CMake Error at C:/Jenkins/tools/hudson.plugins.cmake.CmakeTool/3.19.2/share/cmake-3.19/Modules/CMakeTestCCompiler.cmake:66 (message):
  The C compiler

    "C:/Program Files (x86)/Microsoft Visual Studio/2019/Community/VC/Tools/MSVC/14.28.29333/bin/Hostx64/x64/cl.exe"

  is not able to compile a simple test program.

  It fails with the following output:

    Change Dir: C:/Jenkins/workspace/tpc-win10/build/CMakeFiles/CMakeTmp
    
    Run Build Command(s):C:/Program Files (x86)/Microsoft Visual Studio/2019/Community/MSBuild/Current/Bin/MSBuild.exe cmTC_8452c.vcxproj /p:Configuration=Debug /p:Platform=x64 /p:VisualStudioVersion=16.0 /v:m && Microsoft (R) Build Engine version 16.8.2+25e4d540b for .NET Framework
    Copyright (C) Microsoft Corporation. All rights reserved.
    
      Microsoft (R) C/C++ Optimizing Compiler Version 19.28.29335 for x64
      Copyright (C) Microsoft Corporation.  All rights reserved.
      cl /c /I"C:\Jenkins\workspace\tpc-win10\build\CMakeFiles\CMakeTmp\\" /I"Generated Files\\" /IcmTC_8452c.dir\Debug\ /Zi /W3 /WX- /diagnostics:column /sdl /MP /Od /Ob0 /Oi /Oy- /D WIN32 /D _WINDOWS /D UNICODE /D _UNICODE /D "CMAKE_INTDIR=\"Debug\"" /D _UNICODE /D UNICODE /D WINAPI_FAMILY=WINAPI_FAMILY_APP /D __WRL_NO_DEFAULT_LIB__ /Gm- /MDd /GS /Gy /fp:precise /Zc:wchar_t /Zc:forScope /Zc:inline /Fo"cmTC_8452c.dir\Debug\\" /Fd"cmTC_8452c.dir\Debug\vc142.pdb" /Gd /TC /FU"C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Tools\MSVC\14.28.29333\lib\x86\store\references\platform.winmd" /analyze- /errorReport:queue "C:\Jenkins\workspace\tpc-win10\build\CMakeFiles\CMakeTmp\testCCompiler.c"
      testCCompiler.c
    LINK : warning LNK4075: ignoring '/INCREMENTAL' due to '/OPT:ICF' specification [C:\Jenkins\workspace\tpc-win10\build\CMakeFiles\CMakeTmp\cmTC_8452c.vcxproj]
      cmTC_8452c.vcxproj -> C:\Jenkins\workspace\tpc-win10\build\CMakeFiles\CMakeTmp\Debug\cmTC_8452c.exe
    C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\MSBuild\Microsoft\VisualStudio\v16.0\AppxPackage\Microsoft.AppXPackage.Targets(826,5): error : Certificate could not be opened: C:\Jenkins\workspace\tpc-win10\build\CMakeFiles\CMakeTmp\cmTC_8452c.dir\Windows_TemporaryKey.pfx. [C:\Jenkins\workspace\tpc-win10\build\CMakeFiles\CMakeTmp\cmTC_8452c.vcxproj]
    C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\MSBuild\Microsoft\VisualStudio\v16.0\AppxPackage\Microsoft.AppXPackage.Targets(826,5): error : The specified network password is not correct. [C:\Jenkins\workspace\tpc-win10\build\CMakeFiles\CMakeTmp\cmTC_8452c.vcxproj]
    C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\MSBuild\Microsoft\VisualStudio\v16.0\AppxPackage\Microsoft.AppXPackage.Targets(826,5): error :  [C:\Jenkins\workspace\tpc-win10\build\CMakeFiles\CMakeTmp\cmTC_8452c.vcxproj]

如果用户在执行构建之前创建到 Windows 主机的单独 RDP 会话,则相同的构建将成功:

[build] $ c:\jenkins\tools\hudson.plugins.cmake.CmakeTool\3.19.2\bin\cmake -G "Visual Studio 16 2019" -D CMAKE_BUILD_TYPE=Release -A x64 -D CMAKE_SYSTEM_NAME=WindowsStore -D CMAKE_SYSTEM_VERSION=10.0 c:\jenkins\workspace\tpc-win10
-- Selecting Windows SDK version 10.0.18362.0 to target Windows 10.0.
-- The C compiler identification is MSVC 19.28.29335.0
-- The CXX compiler identification is MSVC 19.28.29335.0
-- Detecting C compiler ABI info
-- Detecting C compiler ABI info - done
-- Check for working C compiler: C:/Program Files (x86)/Microsoft Visual Studio/2019/Community/VC/Tools/MSVC/14.28.29333/bin/Hostx64/x64/cl.exe - skipped
-- Detecting C compile features
-- Detecting C compile features - done
-- Detecting CXX compiler ABI info
-- Detecting CXX compiler ABI info - done
-- Check for working CXX compiler: C:/Program Files (x86)/Microsoft Visual Studio/2019/Community/VC/Tools/MSVC/14.28.29333/bin/Hostx64/x64/cl.exe - skipped
-- Detecting CXX compile features
-- Detecting CXX compile features - done
-- Configuring done
-- Generating done
-- Build files have been written to: C:/Jenkins/workspace/tpc-win10/build

最初我认为它可能与 Windows Defender 有关,但它似乎就像需要构建用户打开交互式登录会话一样简单。有什么方法可以模拟在 WinRM 下执行的进程而无需使用 RDP 吗?

标签: windowsjenkinscmake

解决方案


您使用的是什么版本的 Jenkins,Windows PC 是否始终以用户身份登录,然后 WinRM 只是启动 JAR?还是在执行 RDP 时以用户身份登录?

我怀疑 Windows 正在以不同的方式运行从属代理,并且您在某处遇到了权限问题。

我可以通过在启动时使用 Jenkins 代理服务来让 Windows 工作。

  • 在目标 PC 上启动第一个从站
  • 在管理员帐户上安装 Jenkins 代理作为服务
  • 将服务设置为在重新启动或未检测到服务时启动

使用这种方法,我重新启动后不需要 RDP。


推荐阅读