【问题标题】:Jenkins Poll SCM (Git) on Windows master / Build on Linux slaveJenkins Poll SCM (Git) o​​n Windows master / Build on Linux slave
【发布时间】:2016-03-07 19:15:19
【问题描述】:

这是我的场景:

  • 使用 git 作为我的 SCM
  • Jenkins Job 在 Linux slave 上运行
  • Jenkins master 托管在 Windows 上

我已经配置了两个 Git 安装,如 Jenkins path to git Windows master / Linux slave 中所示。 Git安装设置如下:

  • 姓名:WindowsGit |路径:C:\Program Files\Git\bin\git.exe
  • 姓名:LinuxGit |路径:/usr/local/bin/git

因为我需要在 linux slave 上运行作业,所以我的作业 git 配置指向 LinuxGit(Git 可执行选项)。作业运行良好,没有问题。但是,当我尝试使用“轮询 SCM”选项时,它会中断。我认为这里的问题是因为 Poll SCM 在 Windows Master 上运行,并且该作业的 Git 信息指向 LinuxGit。 Git Polling Log 显示:

Caused by: java.io.IOException: Cannot run program "/usr/local/bin/git": CreateProcess error=2, The system cannot find the file specified

另一方面,如果我选择 WindowsGit,Git Polling Log 很好,但作业本身显然会失败,因为它在 Linux 从站上运行。

问题: 谁能想到一种方法,我可以为 Source Code Management 配置选择一个 Git 安装,为 Poll SCM 功能选择另一个安装?

【问题讨论】:

  • master有安装git吗?你能调整 PATH 让它在路径中吗?我承认在 linux 上拥有 Jenkins 大师要好得多。我没有任何 Windows 大师可以尝试...
  • 是的。我找到了解决方案。使用主安装进行单个 git 安装设置,然后使用节点配置使用 Linux 获取路径覆盖寡妇 git 路径似乎是最佳选择。请参阅我在另一个问题 (35223071) 中的回答。也应该在那里申请。
  • 我相信这个问题可以标记为重复。问题略有不同,但答案与使用“管理节点”选项适用于 35223071 的答案相同。
  • 把答案移到这里怎么样。这个问题是谷歌友好的。 .

标签: git jenkins


【解决方案1】:

根据要求,我将发布我自己对总体思路的回答,即在使用 git 时在主从服务器上混合 Windows/Linux。该解决方案甚至允许在多个 Windows/Linux 从属设备上运行相同的作业,并且不会破坏 Master 轮询 scm:

无论您的 Jenkins Master 平台是什么,配置默认 git 安装以指向该平台的有效 git。例如,c:\apps\git\bin\git.exe 用于 Windows。然后为每个节点配置自定义的“Tool Locations”。这样,主服务器将能够轮询 git 以检查更改并触发从服务器上的作业。然后,从站将能够克隆 git 代码,因为它具有 (Git) Default 的自定义位置。正确配置的步骤:

  1. 管理 Jenkins > 管理节点
  2. 对于具有除“Git 安装”中提供的位置以外的 git 位置的每个节点,请执行以下操作:
    1. 打开节点配置页面(配置图标)
    2. 如果尚未选中,请选中“工具位置”
    3. 点击“添加”
    4. 在下拉菜单中选择“(Git) Default”
    5. 输入从节点git安装的路径(如/usr/local/bin/git
    6. 保存
  3. 为作业可能运行的每个 Linux 从站重复步骤 2.1 到 2.5。

Linux 从节点的节点配置应如下所示:

我相信额外的“git 安装”更合适,正如@Jayan 所提到的,当您需要安装多个 git 或出于某种原因需要为选定的 Jenkins 作业运行特定版本的 git 时。

【讨论】:

  • Master 是安装了 git 的 linux。从属是没有 git 的 windows。 Jenkinsfile(管道)在 git 存储库中。目的是在从节点的工作区中创建一个文件夹(不需要 git)。即使我提到任何代理,在运行作业时它也会尝试从从节点上的 git 获取 Jenkinsfile。为什么会这样?它不应该在 master 上获取管道然后创建文件夹再次检查代理并在特定节点上运行吗?请建议
猜你喜欢
  • 1970-01-01
  • 2017-01-21
  • 2016-04-17
  • 2012-09-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多