Jenkins代理和主机上的Git路径不同

Jenkins代理和主机上的Git路径不同,git,jenkins,jenkins-pipeline,Git,Jenkins,Jenkins Pipeline,我有以下问题:我在GCE(谷歌计算引擎)上运行Jenkins,它被配置为在需要时动态启动代理。主机和代理都安装了git,但路径不同。在主Git上位于/opt/bitnami/Git/bin/Git,在代理上位于/usr/bin/Git 我在全局工具配置中配置了两个Git工具,如下所示: 我的管道作业设置如下: Jenkins文件的相关部分如下: pipeline { agent { label 'ubuntu-1604' } triggers {

我有以下问题:我在GCE(谷歌计算引擎)上运行Jenkins,它被配置为在需要时动态启动代理。主机和代理都安装了git,但路径不同。在主Git上位于
/opt/bitnami/Git/bin/Git
,在代理上位于
/usr/bin/Git

我在
全局工具配置中配置了两个Git工具,如下所示:

我的管道作业设置如下:

Jenkins文件的相关部分如下:

pipeline {

    agent {
        label 'ubuntu-1604'
    }

    triggers {
        pollSCM('H/5 * * * *')
    }

    tools {
        jdk 'JDK11'
        git 'agent-git'
    }

    stages {

        stage ('Checkout Source') {
            steps {
                sh "echo HOSTNAME is: `$hostname`"
                checkout scm
            }
        }
当我运行这个作业时,它失败了,因为它对master和代理使用相同的Git路径。我得到以下错误:

Checking out git git@bitbucket.org:my-repo.git into /opt/bitnami/apps/jenkins/jenkins_home/workspace/test-pipeline@script to read Jenkinsfile
using credential XXXXX
Cloning the remote Git repository
Cloning repository git@bitbucket.org:my-repo.git
 > /opt/bitnami/git/bin/git init /opt/bitnami/apps/jenkins/jenkins_home/workspace/test-pipeline@script # timeout=10
Fetching upstream changes from git@bitbucket.org:my-repo.git
 > /opt/bitnami/git/bin/git --version # timeout=10
using GIT_SSH to set credentials Temporary git credentials using XXXXX's credentials
 .....
Fetching upstream changes from git@bitbucket.org:my-repo.git
using GIT_SSH to set credentials Temporary git credentials using XXXXXX's credentials
Checking out Revision b139fca90bb7b66ebb7432fc791bf0b77ef73fbb (refs/remotes/origin/some_branch)
Commit message: "Blah blah blah"
Running in Durability level: MAX_SURVIVABILITY
[Pipeline] Start of Pipeline
[Pipeline] node
Running on ubuntu-1604-agent-d1h0ha in /tmp/workspace/test-pipeline
[Pipeline] {
[Pipeline] stage
[Pipeline] { (Declarative: Checkout SCM)
[Pipeline] checkout
using credential XXXXXX
Cloning the remote Git repository
ERROR: Error cloning remote repo 'origin'
hudson.plugins.git.GitException: Could not init /tmp/workspace/test-pipeline
    .....
    Suppressed: hudson.remoting.Channel$CallSiteStackTrace: Remote call to ubuntu-1604-agent-d1h0ha
        .....
Caused by: hudson.plugins.git.GitException: Error performing git command: /opt/bitnami/git/bin/git init /tmp/workspace/test-pipeline
    .....
Caused by: java.io.IOException: Cannot run program "/opt/bitnami/git/bin/git" (in directory "/tmp/workspace/test-pipeline"): error=2, No such file or directory
    .....
Caused by: java.io.IOException: error=2, No such file or directory
    .....
我尝试了几种修复方法:

  • 将作业中的
    Git可执行文件
    设置为
    Git代理
    。这会失败,因为主机上不存在git路径
  • 我能想到的所有组合包括检查/取消选中
    轻量级签出
    和从文件中删除/添加
    签出scm
  • 我无法执行类似操作,因为我的节点是动态的

  • 有没有办法为主/代理定义不同的git路径?或者有没有一种方法可以让它们中的一个执行任何git操作?我认为通过取消选中
    轻量级签出
    将强制master执行所有Git操作,相反,我认为在Jenkins文件中调用
    签出scm
    将强制代理执行所有Git操作,但是这两种情况似乎都不是这样。

    为什么不使用
    install automatically
    设置?它不需要安装在任何地方,两台机器都已经安装了git。我确实尝试过检查
    install automatically
    ,只是为了测试它,并且遇到了相同的问题。我现在可以通过设置git路径的硬链接来实现这一点,也就是说,
    ln/opt/bitnami/git/bin/git/usr/bin/git
    但这感觉不是一个好的解决方案,所以我希望通过Jenkins/code找到一个解决方案,
    git
    工具有没有可能不受支持?@wearebb,谢谢。顺便说一下,我可以通过进入Jenkins节点部分,在Windows代理的工具部分下指定git位置来解决这个问题。