如何设置 jenkins windows 从节点以支持 msys2 mingw shell

How to setup jenkins windows slave node to support msys2 mingw shell

我想用 jenkins windows 7 节点构建一个程序。该程序是使用 cmake 构建的,但在配置阶段 cmake 告诉我没有 g++ 编译器。我认为这个错误是由于错误的 shell 引起的,但我不知道如何设置正确的 shell。文档说 windows 上的第一个 sh 文件已执行,但 msys2 需要 mingw32.exe 作为正确的 shell。

有几种启动MinGW的方法shell:

  1. 使用 set MSYSTEM=mingw32set MSYSTEM=mingw64 设置环境变量。然后开始 msys2_shell.cmd 或者 usr/bin/bash --login.
  2. 使用 -mingw32-mingw64 参数开始 msys2_shell.cmd
  3. 键入 MSYS2 source shell <name>,其中可以是:msysmingw32mingw64.
  4. 安装msys2-launcher-git和运行mingw32.exemingw64.exe

我一直在努力,但即使在 mixed/linux 环境下我也做对了。我遇到的最初问题是在 Windows(64 位)上自动进行 x264 编译。我所做的是以下

  1. 安装 MSYS2 64 位并使用 pacman 安装所有构建环境(gcc、make 等)
  2. 在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%"
    
  3. 添加构建步骤"Execute a shell script" 即

    #!C:\msys64\msys-jenkins.bat
    ./configure --enable-pic --enable-static --disable-swscale
    make
    make install
    

瞧瞧!这绝对是非常棘手的。

正如您注意到的那样,Jenkins 将获取它找到的第一个 sh 可执行文件。 事实上,它似乎会选择第一个 sh bashcmd 可用的 PATH 环境变量。

有多种方法可以告诉 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.

不要忘记 re-connect 节点以激活更改。

对于将来遇到此问题的任何人:有一个更简单的解决方案:直接在 MSYS2 中 运行 Jenkins 构建代理(特别是在 MinGW64(或 MinGW32)terminal/shell 中)。 Jenkins 发出的所有命令将在 MSYS2 中 运行。

这里唯一的技巧是将环境变量添加到节点(在 Jenkins 主实例 Web UI 中)以将 MinGW64(或 MinGW32)二进制文件添加到 PATH。为此,添加一个名为 PATH 且值为 /mingw64/bin:$PATH.

的环境变量

这就是它所需要的全部。

我创建了详细指南:https://blog.insane.engineer/post/jenkins_msys2