15

我正在尝试使用 Git 插件在 Jenkins 中配置一个 Git 项目。在项目配置页面中,我在 Git 配置中输入存储库 URL,这是一个 https URL ( https://git.mycompany.com/git/MyProject.git )。但是,当我构建项目时,出现以下错误:

Started by user Hudson Administrator
[EnvInject] - Loading node environment variables.
Building in workspace /home/hudson/.hudson/jobs/MyProject/workspace
Checkout:workspace / /home/hudson/.hudson/jobs/MyProject/workspace - hudson.remoting.LocalChannel@3699cfcc
Using strategy: Default
Cloning the remote Git repository
Cloning repository https://git.mycompany.com/git/MyProject.git
git --version
git version 1.8.2.1
ERROR: Error cloning remote repo 'origin' : Could not clone https://git.mycompany.com/git/MyProject.git
hudson.plugins.git.GitException: Could not clone https://git.mycompany.com/git/MyProject.git
    at org.jenkinsci.plugins.gitclient.CliGitAPIImpl$1.execute(CliGitAPIImpl.java:286)
    at org.jenkinsci.plugins.gitclient.AbstractGitAPIImpl.clone(AbstractGitAPIImpl.java:59)
    at org.jenkinsci.plugins.gitclient.CliGitAPIImpl.clone(CliGitAPIImpl.java:47)
    at hudson.plugins.git.GitSCM$2.invoke(GitSCM.java:1012)
    at hudson.plugins.git.GitSCM$2.invoke(GitSCM.java:948)
    at hudson.FilePath.act(FilePath.java:912)
    at hudson.FilePath.act(FilePath.java:885)
    at hudson.plugins.git.GitSCM.determineRevisionToBuild(GitSCM.java:948)
    at hudson.plugins.git.GitSCM.checkout(GitSCM.java:1114)
    at hudson.model.AbstractProject.checkout(AbstractProject.java:1411)
    at hudson.model.AbstractBuild$AbstractBuildExecution.defaultCheckout(AbstractBuild.java:652)
    at jenkins.scm.SCMCheckoutStrategy.checkout(SCMCheckoutStrategy.java:88)
    at hudson.model.AbstractBuild$AbstractBuildExecution.run(AbstractBuild.java:557)
    at hudson.model.Run.execute(Run.java:1665)
    at hudson.maven.MavenModuleSetBuild.run(MavenModuleSetBuild.java:507)
    at hudson.model.ResourceController.execute(ResourceController.java:88)
    at hudson.model.Executor.run(Executor.java:230)
Caused by: hudson.plugins.git.GitException: Failed to connect to https://git.mycompany.com/git/MyProject.git
    at org.jenkinsci.plugins.gitclient.CliGitAPIImpl.getURLWithCrendentials(CliGitAPIImpl.java:1374)
    at org.jenkinsci.plugins.gitclient.CliGitAPIImpl.getURLWithCrendentials(CliGitAPIImpl.java:1326)
    at org.jenkinsci.plugins.gitclient.CliGitAPIImpl.access$300(CliGitAPIImpl.java:47)
    at org.jenkinsci.plugins.gitclient.CliGitAPIImpl$1.execute(CliGitAPIImpl.java:280)
    ... 16 more
Trying next repository
ERROR: Could not clone repository
java.io.IOException: Could not clone
    at hudson.plugins.git.GitSCM$2.invoke(GitSCM.java:1025)
    at hudson.plugins.git.GitSCM$2.invoke(GitSCM.java:948)
    at hudson.FilePath.act(FilePath.java:912)
    at hudson.FilePath.act(FilePath.java:885)
    at hudson.plugins.git.GitSCM.determineRevisionToBuild(GitSCM.java:948)
    at hudson.plugins.git.GitSCM.checkout(GitSCM.java:1114)
    at hudson.model.AbstractProject.checkout(AbstractProject.java:1411)
    at hudson.model.AbstractBuild$AbstractBuildExecution.defaultCheckout(AbstractBuild.java:652)
    at jenkins.scm.SCMCheckoutStrategy.checkout(SCMCheckoutStrategy.java:88)
    at hudson.model.AbstractBuild$AbstractBuildExecution.run(AbstractBuild.java:557)
    at hudson.model.Run.execute(Run.java:1665)
    at hudson.maven.MavenModuleSetBuild.run(MavenModuleSetBuild.java:507)
    at hudson.model.ResourceController.execute(ResourceController.java:88)
    at hudson.model.Executor.run(Executor.java:230)

我可以从命令行克隆存储库,也可以git clone在 Jenkins 项目预构建步骤中作为 shell 命令执行,所以我不知道为什么插件配置不起作用。认为这可能是一个身份验证问题,我尝试在 .netrc 文件中指定凭据,并将它们包含在 URL 中(即https://username:password@git.mycompany.com/git/MyProject.git)但是在在所有情况下,我仍然遇到同样的错误。有任何想法吗?

4

11 回答 11

16

这是Jenkins Git 插件中的一个错误。

您可以通过使用凭证插件创建凭证来解决凭证问题,然后在作业的 SCM/Git 部分中使用这些凭证。但是,如果检出失败,这将在构建日志中以纯文本形式公开您的用户/密码。

此外,如果您在 git 中使用 HTTP 代理,这将不起作用。最好的方法(目前)是使用 JGit(在 Jenkins 配置中配置)。然而,JGit 是实验性的,在代理方面也非常有限。

(由于受欢迎的要求而发布的答案;))

于 2013-11-04T20:00:38.780 回答
7

如果您为 Git 存储库使用自签名证书,并且 Git 从命令行而不是 Jenkins Git Client 插件工作,则需要将证书添加到 Jenkins Java 密钥库(如上面评论中的tijs所述) .

GIT_SSL_NO_VERIFY这是因为 Git Client 插件尝试使用 Java 的 Apache HttpClient 直接连接(绕过git.exe ) ,所以通常用于创建连接的所有 Git 设置都被忽略(包括curl-ca-bundle.crt).SunCertPathBuilderException: unable to find valid certification path to requested target堆栈跟踪,所以我们只能看到“连接失败”消息。

为了修复它,您可以点击tijs提供的链接: http ://www.mkyong.com/webservices/jax-ws/suncertpathbuilderexception-unable-to-find-valid-certification-path-to-requested-target/

如果您使用默认 Jenkins 安装,则需要将生成的jssecacerts文件复制到。C:\Program Files (x86)\Jenkins\jre\lib\security

您可以InstallCert.java在最初的Andreas Sterbenz 帖子中找到一个链接(感谢 web.archive.org),或在code.google上稍作修改的版本。

我检查了上述方法是否适用于 Git Client 插件版本 1.4.6。

于 2013-12-13T13:50:45.150 回答
2

将您的 Git 客户端升级到 2.10.0 或更高版本。

执行以下命令。

git config --system http.sslVerify false    
git config --global http.sslVerify false    
于 2017-07-31T07:29:35.690 回答
1

git插件的主页有这样说:

如果您看到指示 Git 无法克隆的输出,类似于下面的输出,请转到 Jenkins 配置设置(不是项目设置,全局设置)并将 Git 路径更改为完全限定的路径(例如,不是“git " 但 "/usr/bin/git" 或安装 Git 二进制文件的任何位置)。如果您正在执行基于文件系统的克隆,您还应该验证权限是否正确。

Started by user anonymous
Checkout:workspace / C:\Documents and Settings\Administrator\.hudson\jobs\watir\workspace - hudson.remoting.LocalChannel@1a1f370
Last Build : #4
Checkout:workspace / C:\Documents and Settings\Administrator\.hudson\jobs\watir\workspace - hudson.remoting.LocalChannel@1a1f370
Cloning the remote Git repository
Cloning repository origin
$ git clone -o origin git://github.com/bret/watir.git "C:\Documents and Settings\Administrator\.hudson\jobs\watir\workspace"
Trying next repository
ERROR: Could not clone from a repository
FATAL: Could not clone
hudson.plugins.git.GitException: Could not clone
    at hudson.plugins.git.GitSCM$2.invoke(GitSCM.java:400)
    at hudson.plugins.git.GitSCM$2.invoke(GitSCM.java:358)
    at hudson.FilePath.act(FilePath.java:676)
    at hudson.FilePath.act(FilePath.java:660)
    at hudson.plugins.git.GitSCM.checkout(GitSCM.java:358)
    at hudson.model.AbstractProject.checkout(AbstractProject.java:833)
    at hudson.model.AbstractBuild$AbstractRunner.checkout(AbstractBuild.java:314)
    at hudson.model.AbstractBuild$AbstractRunner.run(AbstractBuild.java:266)
    at hudson.model.Run.run(Run.java:948)
    at hudson.model.Build.run(Build.java:112)
    at hudson.model.ResourceController.execute(ResourceController.java:93)
    at hudson.model.Executor.run(Executor.java:118)

这对你来说可能也是一个问题。

如果默认插件行为()存在问题,同一页面还建议使用 JGit 进行测试-Dorg.jenkinsci.plugins.gitclient.Git.useCLI=false

于 2013-11-04T17:49:35.080 回答
1

您可以使用您的登录名和密码“凭据”中注册您的git 凭据,以通过https 协议(在“管理 Jenkins”下方)访问 git 存储库,它将生成一个credentialId(例如dd0d6733-cc2e-4464-bb7d-4b6af86fe40a)帮助 Jenkins 在管道中使用此凭证。

当您使用Jenkins Pipeline时,您可以执行以下操作:

node{
    git url: "https://tfs:8080/tfs/job.git", branch: "feature/migration", credentialsId:'dd0d6733-cc2e-4464-bb7d-4b6af86fe40a'
}

它将您的源代码下载到作业的工作区

于 2016-11-10T23:33:19.180 回答
0

我尝试了所有方法来解决证书问题,但最后是 git 插件的问题。我将插件回滚到 git 1.5(来自 2.0.3)和 git-client 1.0.7(来自 1.6.3)并且它工作正常。请注意,我首先尝试了 git-client 1.4.6,以便我可以使用凭据选项,但它不起作用。所以我认为这两个插件的正确组合很重要。JENKINS-20533中提到了此解决方案

于 2014-03-04T10:55:22.533 回答
0

为了在 Jenkins 中使用 Git,需要安装以下两个插件:

  1. Git 客户端插件
  2. Git 插件

第一个插件(Git-Client-plugin)是执行 git 操作(git add、git commit、git push、git clone 等)的低级 API。

第二个插件 (Git-plugin) 添加 Git 作为 Jenkins 作业的 SCM 选项。

第二个插件依赖于第一个插件的功能,因此两者都必须存在,Git 才能与 Jenkins 一起工作。

于 2015-06-25T11:41:25.260 回答
0

就我而言,一个 Jenkins 奴隶正常工作,而另一个没有。当我将 Git 可执行文件从默认更改为 JGit 时,它们都起作用了。

于 2015-08-05T17:05:07.110 回答
0

现在已修复此问题,并且不再是最新插件的问题(因为我正在编写此 1.19.0)。它发生在 git-plugin-client 1.6.x 上。

于 2015-09-28T13:52:22.417 回答
0

在 jenkins 1.644 和 git 客户端 1.19.6 上使用 git:// 而不是 https:// 对我有用

于 2016-09-02T15:54:19.280 回答
0

我的解决方案确实适用于 Jenkins-Git-Plugin。

# create my exec
su root
darngit=/usr/bin/darngit
touch $darngit
echo "#! /usr/bin/env bash" > $darngit
echo "git -c sslVerify=false $@" > $darngit

转到系统设置,设置 git 可执行文件 =/usr/bin/darngit

于 2016-11-25T11:35:26.220 回答