【问题标题】:Why is the Git Plugin for Jenkins rewriting my local git repo url with extra slashes?为什么 Jenkins 的 Git 插件会用额外的斜杠重写我的本地 git repo url?
【发布时间】:2019-10-03 21:05:22
【问题描述】:

我现在在尝试设置 Jenkins 作业(在一台 Windows 服务器上)以监控位于 Gitosis 服务器(在另一台 Windows 服务器上)上的内部 Git 存储库时遇到问题。

url 看起来像这样:ssh://git@192.168.0.1:relative_path/repo.git(为安全起见替换了实际值,相对路径也不适用于 '~/ ',它只在没有前导 '/' 的情况下有效)。

当使用 url 从命令行运行 git clone 时,一切正常。

在 Jenkins 作业中配置 Git SCM 时,它能够运行 ls-remote 命令(这确认已为 Jenkins 实例正确配置了 ssh 密钥)。

但是,当作业执行时,url 似乎被重写了一个额外的正斜杠,这会导致克隆命令失败。

Started by user Meh
[EnvInject] - Loading node environment variables.
Building in workspace D:\local_repo_test
 > git.exe rev-parse --is-inside-work-tree # timeout=10
Fetching changes from the remote Git repository
 > git.exe config remote.origin.url ssh:///git@192.168.0.1:relative_path/repo.git # timeout=10
Fetching upstream changes from ssh:///git@192.168.0.1:relative_path/repo.git
 > git.exe --version # timeout=10
 > git.exe -c core.askpass=true fetch --tags --progress ssh:///git@192.168.0.1:relative_path/repo.git +refs/heads/*:refs/remotes/origin/*
ERROR: Error fetching remote repo 'origin'
ERROR: Error fetching remote repo 'origin'
Finished: FAILURE

困扰我的是'///'。有人见过这样的吗?

对此的任何帮助将不胜感激。

【问题讨论】:

    标签: git ssh jenkins cygwin gitosis


    【解决方案1】:

    据我检查各种版本的 git 可以看出,您与 ssh 协议一起使用的相对路径语法是不明确的。它在 Windows 上的 msysgit 版本上被解释为您希望的那样,但在我测试的任何其他平台上都没有。

    当我测试时

    • git 1.7.1、CentOS 6.6、git clone ssh://mwaite@mark-pc1:bin/ 失败并报告ssh: Could not resolve hostname mark-pc1:bin: Name or service not known
    • git 1.7.2.5, Debian 6, git clone ssh://mwaite@mark-pc1:bin/ 失败并报告ssh: Could not resolve hostname mark-pc1:bin: Name or service not known
    • git 1.7.10.4, Debian 7, git clone ssh://mwaite@mark-pc1:bin/ 失败并报告ssh: Could not resolve hostname mark-pc1:bin: Name or service not known
    • git 2.1.4,Debian 测试,git clone ssh://mwaite@mark-pc1:bin/ 失败并报告fatal: '/' does not appear to be a git repository
    • git 2.2.1、Ubuntu 14.04、git clone ssh://mwaite@mark-pc1:bin/ 失败并报告“致命:'/' 似乎不是 git 存储库”
    • git 2.3.0, Ubuntu 14.04, git clone ssh://mwaite@mark-pc1:ssh/home/mwaite/bin 成功并使用 ssh 协议从 /home/mwaite/bin 克隆 repo

    据我所知,如果冒号后面的第一个单词是协议(如 ssh)或端口号(如 22),则将其解释为用于存储库访问的服务或端口号。

    我在JENKINS-26680JENKINS-27483 中进一步描述了其中一些细节

    【讨论】:

      【解决方案2】:

      由于我无法与 Jenkins 人员一起尝试解决为什么 url 被重写为 '///' 并且我也无法确定 Gitosis 是否有任何问题,所以我想出了一个解决方法。

      由于 Cygwin、SSH 和 Gitosis 已经安装并运行,我决定向机器添加一个新用户并通过它运行所有 git ssh 命令。

      按照此处的步骤添加新用户http://techtorials.me/cygwin/create-and-add-users/

      然后我 chmod'ed 和 chgrp'ed /home/git/repositories 到 sshUsers 组。一旦到位,我就可以使用带有绝对路径名的 Git SSH url,绕过 jenkins 的“///”url 问题。

      【讨论】:

      • 我在最新的 Jenkins 版本中尝试从 Gerrit 内部 repo 配置克隆时遇到同样的错误
      • 我已经通过更新 Jenkins 作业以使用 "HEAD:refs/heads/master" 作为 refspec 来摆脱这个问题
      【解决方案3】:

      我在将 Jenkins 与我想通过 ssh 克隆的私有 bitbucket 存储库结合使用时遇到了同样的问题。正如 Mark Waite 的回答中提到的,这被一些人认为是一个错误。但是,还有其他人认为这是预期的行为,因为不支持“相对 URI”JENKINS-26327

      在我的情况下有效的临时解决方法是添加端口号 22。所以在 Jenkins 管道中我替换了

      url: 'ssh://git@bitbucket.org:/my_team/my_repo.git'
      

      url: 'ssh://git@bitbucket.org:22/my_team/my_repo.git'
      

      现在管道按预期运行。

      【讨论】:

        【解决方案4】:

        这是一个长镜头,但只是为了检查 - 您是否可能在路径中使用参数?像 $PROTOCOL/$URL/$PATH 和 PROTOCOL='ssh://' 的东西?听起来很牵强,所以没有冒犯的意思。但我曾经做过类似的事情,参数化使我无法看到该字段实际上发送的斜线比它应该发送的多。

        【讨论】:

          【解决方案5】:

          这对我有用。

          ssh://awc@192.168.1.32:22/home/awc/GIT_HOME/awc.git
          

          即通过在 IP 地址后添加额外的端口号 22(SSH 端口)

          【讨论】:

            【解决方案6】:

            使用带有前缀 ssh:// 的 Git SSH url 时,将组织名称前的冒号替换为正斜杠

            git clone ssh://git@192.168.0.1/relative_path/repo.git

            或者直接使用不带前缀ssh://的URL:

            git clone git@192.168.0.1:relative_path/repo.git

            【讨论】:

              猜你喜欢
              • 2020-07-16
              • 2011-10-26
              • 1970-01-01
              • 2017-01-01
              • 1970-01-01
              • 1970-01-01
              • 2012-01-31
              • 2014-02-08
              • 2017-03-02
              相关资源
              最近更新 更多