【问题标题】:How to setup jenkins windows slave node to support msys2 mingw shell如何设置 jenkins windows 从节点以支持 msys2 mingw shell
【发布时间】:2017-07-19 05:17:18
【问题描述】:

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

【问题讨论】:

    标签: jenkins mingw32 msys2


    【解决方案1】:

    MinGW shell有几种启动方式:

    1. 使用set MSYSTEM=mingw32set MSYSTEM=mingw64 设置环境变量。然后启动msys2_shell.cmdusr/bin/bash --login
    2. -mingw32-mingw64 arg 开头msys2_shell.cmd
    3. 输入 MSYS2 source shell <name>,其中可以是:msysmingw32mingw64
    4. 安装msys2-launcher-git并运行mingw32.exemingw64.exe

    【讨论】:

      【解决方案2】:

      我一直在努力,但即使在混合/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. 添加一个构建步骤“执行一个shell脚本”,即

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

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

      【讨论】:

      • 就我而言,这不适用于 sh("""#!C:\msys64\msys-jenkins.bat .... """)。詹金斯 2.204
      【解决方案3】:

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

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

      不要忘记重新连接节点以激活更改。

      【讨论】:

        【解决方案4】:

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

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

        实际上就是这样。

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2019-07-10
          • 2014-05-01
          • 2016-07-14
          • 2016-12-02
          • 1970-01-01
          • 1970-01-01
          • 2021-10-23
          相关资源
          最近更新 更多