【问题标题】:jenkins git plugin http auth .netrc詹金斯 git 插件 http auth .netrc
【发布时间】:2013-11-05 12:15:43
【问题描述】:

自从上次更新 jenkins 和 git 插件以来,通过 .netrc 进行的 http auth 不再起作用。我真的检查了很多关于这个问题的线程。

我也尝试使用变体http://user:pass@url.tld/repo.git 有效。但在内部,我们提供了一个虚拟机,其中包含开发所需的所有工作。在更新之前,我们只是编辑了 jenkins 主文件夹中的 .netrc 文件,jenkins 运行良好。

我也已经通过控制台 git clone http://url.tld/repo.git 进行了尝试,即使在 jenkins 用户上也可以正常工作。

这里有一些细节:

  • 詹金斯:v1.536
  • GIT 插件:v2.0
  • GIT 客户端插件:v1.4.5
  • GIT:1.8.4.GIT
  • Centos:6.4
  • Java:1.6.0

.netrc

machine url
        login user
        password pass

这里配置掩码中jenkins的错误: Failed to connect to repository : Failed to connect to http:// ....git (status = 401)

如果有人有想法就好了。

【问题讨论】:

    标签: git github jenkins .netrc


    【解决方案1】:

    使用 Git 客户端插件 1.4.5,您需要为 .netrc 文件使用不同的格式。 Git 客户端插件需要 .netrc 文件中的主机信息全部在一行中。所以改变这个

    machine hostname
        login user
        password secret
    

    到这里

    machine hostname login user password secret
    

    应该让它再次工作。

    当然不是插件方面的最佳实现,但不幸的是目前情况如此。请注意,该行中的单词之间只能有一个空格。也避免尾随空格。

    除此之外,由于存在错误,无论主机名是否匹配,都将采用文件中的第一行。因此,如果您需要在 .netrc 文件中包含多个主机,那将无法正常工作。或者更确切地说,仅列出第一个。没有已知的解决方法。

    注意,如果你在 windows 下使用_netrc 文件,很可能找不到它,因为 git 客户端插件(在 1.4.6 版中)不会在 Jenkins 用户的主目录中搜索它。一种解决方法是在 windows 下也有一个.netrc 文件。

    【讨论】:

    • 有趣。 +1。我在回答中参考了您的解决方法以获得更多可见性。
    • 对于那些不想降级但仍然需要文件中的多个主机并且可以自己编译固定版本直到官方插件修复的人,有一个patch available on GitHub。跨度>
    • 在我的情况下,将单行文件 _netrc(用于 Git)和 .netrc(用于 Git 客户端)添加到 C:\Users\<Jenkins user> 文件夹会有所帮助。还要确保 Jenkins 中的 Path to Git executable 设置为 cmd\git.exe,而不是 bin\git.exe
    【解决方案2】:

    这个问题最初是在 Git 客户端插件 1.4.3 中检测到的,应该在 1.4.4 中由 Nicolas De Loof 修复:
    issue 20175

    尝试将 git 客户端插件降级到 1.4.4。
    如果 1.4.5 引入了回归,则重新打开 issue 20175。

    Florian's answer (upvoted) 建议 git 客户端插件到 1.4.5 的可能原因,关于 .netrc 格式。

    machine hostname login user password secret
    

    (仅一行,而不是几行)

    Florian 坚持in the comments 存在一些错误:

    • 如果您在.netrc 文件中定义了多个主机,将采用第一个主机,无论它是否正确。
    • 此外,在 Windows 下,很可能找不到 _netrc 文件,因为它不在 Jenkins 用户的主目录中搜索。
      git 客户端插件(现在,2013 年 11 月)不会读取它(_netrc 文件)来检索凭据。
      它适用于.netrc,但不适用于_netrc,无论是Windows 还是Unix。
      所以我建议除了_netrc之外,在Windows下的主目录中还有一个相同的.netrc文件,直到这个错误(JENKINS-20688)被修复。

    He mentions 存在 jenkinsci/git-client-plugin patch on GitHub

    【讨论】:

    • 这并不适合我。 1.4.4 版也不能正常工作。我用 git-plugin 1.4 和 git-client-plugin 1.0.7 测试过,现在可以了!
    • 如果.netrc 文件中定义了多个主机,则无论是否正确,都会采用第一个主机。此外,在 windows 下,很可能找不到 _netrc 文件,因为它没有在 Jenkins 用户的主目录中搜索。
    • @Florian 听起来不太好..._netrc 不是一直在%HOME% 下搜索吗?
    • 它是由 curl,AFAIK,但不是由 git 客户端插件(现在)读取并解析它以检索凭据。它适用于 .netrc,但不适用于 _netrc,无论是 Windows 还是 Unix。所以我建议在 Windows 下的主目录中除了 _netrc 之外还有一个相同的 .netrc 文件,直到这个 bug 被修复。 (JENKINS-20688)
    • @Florian 好的,我已将您的 cmets 添加到答案中以获得更多可见性。
    【解决方案3】:

    在这里为所有其他人添加:

    降级文件的下载链接:

    Git 客户端插件 1.0.7:http://mirrors.jenkins-ci.org/plugins/git-client/1.0.7/git-client.hpi

    Git 插件 1.4.0:http://mirrors.jenkins-ci.org/plugins/git/1.4.0/git.hpi

    【讨论】:

    • 很高兴知道,除了我的回答。 +1
    【解决方案4】:

    我不得不将 Git 客户端插件降级到 1.3.0 版本才能让它再次工作。

    这里是下载链接:http://mirrors.jenkins-ci.org/plugins/git-client/1.3.0/git-client.hpi

    【讨论】:

      【解决方案5】:

      FWIW,对我来说,issue 21015 上提到了解决方法

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2015-05-11
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2022-11-22
        相关资源
        最近更新 更多