在Jenkins中使用Git Plugin访问Https代码库失败的问题

  最近需要在Jenkins上配置一个Job,SCM源是http://git.opendaylight.org/gerrit/p/integration.git
  于是使用Jenkins的Git Plugin做这件事情。
  结果报错如下:

hudson.plugins.git.GitException: Failed to fetch from https://git.opendaylight.org/gerrit/p/integration.git
        at hudson.plugins.git.GitSCM.fetchFrom(GitSCM.java:627)
        at hudson.plugins.git.GitSCM.retrieveChanges(GitSCM.java:865)
        at hudson.plugins.git.GitSCM.checkout(GitSCM.java:890)
        at hudson.model.AbstractProject.checkout(AbstractProject.java:1415)
        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:561)
        at hudson.model.Run.execute(Run.java:1678)
        at hudson.model.FreeStyleBuild.run(FreeStyleBuild.java:46)
        at hudson.model.ResourceController.execute(ResourceController.java:88)
        at hudson.model.Executor.run(Executor.java:231)
Caused by: hudson.plugins.git.GitException: sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target
        at org.jenkinsci.plugins.gitclient.CliGitAPIImpl.checkCredentials(CliGitAPIImpl.java:2198)
        at org.jenkinsci.plugins.gitclient.CliGitAPIImpl.launchCommandWithCredentials(CliGitAPIImpl.java:1152)
        at org.jenkinsci.plugins.gitclient.CliGitAPIImpl.access$200(CliGitAPIImpl.java:87)
        at org.jenkinsci.plugins.gitclient.CliGitAPIImpl$1.execute(CliGitAPIImpl.java:266)
        at hudson.plugins.git.GitSCM.fetchFrom(GitSCM.java:625)
        ... 10 more

  但是直接在命令行中运行git clone是好的,那么差别在哪里呢?在网上查了一下,得到了一些思路,即Jenkins整体是构建在Java之上的,在进入git接管的范围之前,是Java在做一些事情,既然git本身是可以工作的,那么应该就是Java这边出的问题。
  查了下具体的错误,发现跟SSL/TSL证书有关。看到StackOverflow上有同志说是git plugin本身有bug就不能支持https,我觉得应该不至于吧,查看了git plugin的主页(https://wiki.jenkins-ci.org/display/JENKINS/Git+Plugin)也没有发现什么端倪。于是又随便尝试了一下github上的某个https的git库,是可以clone下来的,这就说明支持https是没问题的。那么问题出在哪里呢?重新复习了一下SSL/TSL的原理之后,认为问题应该出在颁发证书的CA上,于是在浏览器中去查看二者的CA有何不同,如下:

  github使用的是DigiCert的证书,而opendaylight用的是StartCom的。上网一查,这个StartCom颁发的整数居然是免费的。这样看来,原因大概就是Java不信任这个CA了。那么解决方法应该就是把这个CA添加到Java的信任列表。具体做法如下:
1. 首先要得到StartCom的证书文件(xxx.cer)。从哪里获得呢?既然浏览器能够正常访问,说明系统中是信任StartCom的证书的,所以先打开系统的证书管理界面。在Mac中是Keychain,打开之后找到StartCom的证书,然后右键导出成一个.cer文件,命名为startcom.cer。

2. 然后使用下面的命令把上面那个cer文件导入到Java的运行时系统中:

keytool -import -alias startcom  -keystore %JRE_HOME/lib/security/cacerts  -file startcom.cer

  运行该命令时会提示输入密码,如果你没有改过的话密码是’changeit’
  然后再运行下面的命令,就可以看到StartCom已经被加进去了。

keytool -list -keystore  %JRE_HOME/lib/security/cacerts  | less

  然后在在Jenkins中配置git路径,git clone成功!

时间: 2024-10-03 14:01:00

在Jenkins中使用Git Plugin访问Https代码库失败的问题的相关文章

git无法clone远程代码库及git代理设置

git作为一个版本管理神器,日常工作中自然也就少不了了:特别是Android开发,github和google是逃不过的了.然而很多时候需要用到git克隆远程的代码库,众所周知的原因google.android官网都是无法访问的.那么我们怎么克隆诸如:android.googlesource.com下的库呢? 工具:git.vpn代理 实例:git clone https://android.googlesource.com/platform/frameworks/volley/ D:\Andro

pycharm 中使用git上传下载代码

1.在pycharm中加入git客户端的安装路径 2.选择git管理工具 3. 4. 从服务器上更新和上传代码

【JAVA】Eclipse中使用git进行pull远程代码

当使用eclipse或者MyEclipse进行pull远程代码的时候,或者github的代码的时候报如下错误代码: 代表我们没有配置我们的Git地址,这里我教大家配置一下.首先下面是错误代码: The current branch is not configured for pull No value for key branch.master.merge found in configuration   1 解决方法: 在我们本地工程目录找到config文件(如我的是E:\david\xiao

pear中几个实用的xml代码库

1.XML_Beautifier 用于将一段排版凌乱的XML文档美化 1 <?php 2 require_once "XML/Beautifier.php"; 3 $fmt = new XML_Beautifier(); 4 $result = $fmt->formatFile('originalFile.xml', 'beautifiedFile.xml'); 5 if (PEAR::isError($result)) { 6 echo $result->getMe

开发团队在TFS中使用Git Repository (一)

在研发团队中,代码版本管理是最为基础的必要工具.个人使用过的版本管理工具有SVN.VSS.ClearCase.TFS.Git,从团队的角度和使用角度来说,个人倾向于与使用TFS作为团队的基础工具.首先在性能和容量是适配了所有规模的研发团队,从几个人的小团队到上千人的大型研发团队: 其次是对软件研发周期团队所有角色的工作的支持和数据之间的有机结合和关联:最后是使用成本低,多数功能是开箱即用. TFS提供TFVC和Git两种版本库,13及之前的版本,版本库是以项目为单位进行界定的,也就是说一个项目团

ubuntu Gitolite管理git server代码库权限

公司代码库用Git,全部用SSH认证,多个代码库多个用户,权限管理是个头疼的问题,今天终于有空测试下Gitolite, Gitolite是在Git之上的一个授权层,依托sshd或者httpd来进行认证.(概括:认证是确定用户是谁,授权是决定该用户是否被允许做他想做的事情). Gitolite允许你定义访问许可而不只作用于仓库,而同样于仓库中的每个branch和tag name.你可以定义确切的人(或一组人)只能push特定的"refs"(或者branches或者tags)而不是其他人.

Python Cookbook(第3版)中文版:15.1 使用ctypes访问C代码

15.1 使用ctypes访问C代码? 问题? 你有一些C函数已经被编译到共享库或DLL中.你希望可以使用纯Python代码调用这些函数,而不用编写额外的C代码或使用第三方扩展工具. 解决方案? 对于需要调用C代码的一些小的问题,通常使用Python标准库中的 ctypes 模块就足够了.要使用 ctypes ,你首先要确保你要访问的C代码已经被编译到和Python解释器兼容(同样的架构.字大小.编译器等)的某个共享库中了.为了进行本节的演示,假设你有一个共享库名字叫 libsample.so 

Java中创建访问HTTPS的自签名证书的方法

一.问题: 常常在用java访问https的请求时,总是出现SSL禁止的异常.这里给大家教下怎么创建与添加证书. 二.工具 : 1.创建一个目录 2.去Github上搜索InstallCert,然后随便下载一下来.比如:https://github.com/escline/InstallCert 把java文件下载到刚创建的这个目录中. 三.代码: 比如我要添加访问azure的几个管理的域名的https.. 就这样: 1.新建一个cert.bat文件. 2.bat中的内容如下: javac -d

从Java代码中访问 HTTPS 协议

有个互联网上的网址:https://wtsz.jyzq.cn/ywcl.jsp?type=l&yybdm=1100&market=Z&userName=11009341&pwd=870221&ip=3.3.3.3&serverName=jyzq.cn,是HTTPS协议的,如何通过JAVA程序能够调用该地址得到正确的返回数据. 当前这个地址是可以通过浏览器访问的,需要在后台通过JAVA程序来访问. import java.io.IOException; imp