【发布时间】:2017-07-19 05:17:18
【问题描述】:
我想用 jenkins windows 7 节点构建一个程序。该程序是使用 cmake 构建的,但在配置阶段 cmake 告诉我没有 g++ 编译器。我认为这个错误是由于错误的外壳而发生的,但我不知道如何设置正确的外壳。文档说 Windows 上的第一个 sh 文件已执行,但 msys2 需要 mingw32.exe 作为正确的 shell。
【问题讨论】:
我想用 jenkins windows 7 节点构建一个程序。该程序是使用 cmake 构建的,但在配置阶段 cmake 告诉我没有 g++ 编译器。我认为这个错误是由于错误的外壳而发生的,但我不知道如何设置正确的外壳。文档说 Windows 上的第一个 sh 文件已执行,但 msys2 需要 mingw32.exe 作为正确的 shell。
【问题讨论】:
MinGW shell有几种启动方式:
set MSYSTEM=mingw32 或set MSYSTEM=mingw64 设置环境变量。然后启动msys2_shell.cmd 或usr/bin/bash --login。-mingw32 或-mingw64 arg 开头msys2_shell.cmd。source shell <name>,其中可以是:msys、mingw32、mingw64。msys2-launcher-git并运行mingw32.exe或mingw64.exe
【讨论】:
我一直在努力,但即使在混合/Linux 环境中我也做得对。我最初遇到的问题是在 Windows(64 位)上自动进行 x264 编译。我所做的是以下
在 C:\msys64 目录下创建一个名为 msys-jenkins.bat 的 BAT 文件
rem convert path and script to unix format
for /f %%a in ('c:\msys64\usr\bin\cygpath.exe %1') do set CMDFILE=%%a
for /f %%a in ('c:\msys64\usr\bin\cygpath.exe %CD%') do set PWD=%%a
rem setup visual studio 2015 env then launch msys2 64 bits
set MSYSTEM=MINGW64
set MSYS2_PATH_TYPE=inherit
CALL "C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\vcvarsall.bat" x64
c:\msys64\usr\bin\bash.exe -l -x -c "cd %PWD% ; %CMDFILE%"
添加一个构建步骤“执行一个shell脚本”,即
#!C:\msys64\msys-jenkins.bat
./configure --enable-pic --enable-static --disable-swscale
make
make install
等等!这绝对是非常棘手的。
【讨论】:
正如您理所当然地注意到的那样,Jenkins 将拾取它会找到的第一个 sh 可执行文件。
事实上,它似乎会选择PATH 环境变量中可用的第一个sh bash 或cmd。
有几种方法可以告诉 Jenkins 使用哪个 shell,但我更喜欢最简单和便携的一种。在Manage Jenkins > Manage Nodes > NodeName > Configure > Environment variables 中的节点配置中添加环境变量PATH,如下所示:
Name: PATH
Value: /c/msys64:/c/msys64/mingw64/bin:$PATH
此技巧适用于所有 Linux macOS 和 Windows。但是对于 msys2,你应该添加另一个变量 MSYSTEM
Name: MSYSTEM
Value: MINGW64
或值 MINGW32 取决于架构。这对于 msys2 正确地为 shell 指定它自己的内部变量是必要的。 Here's some info on that.
不要忘记重新连接节点以激活更改。
【讨论】:
对于将来遇到此问题的任何人:有一个更简单的解决方案:只需在 MSYS2 中直接运行 Jenkins 构建代理(特别是在 MinGW64(或 MinGW32)终端/shell 中)。然后 Jenkins 发出的所有命令都将在 MSYS2 内部运行。
这里唯一的技巧是向节点(在 Jenkins 主实例 Web UI 中)添加环境变量,以将 MinGW64(或 MinGW32)二进制文件添加到 PATH。为此,添加一个名为PATH 的环境变量,其值为/mingw64/bin:$PATH。
实际上就是这样。
【讨论】: