由于服务器证书不匹配,jenkins中的SVN命令行失败

时间:2012-08-14 11:43:23

标签: svn jenkins

当我从Jenkins shell运行svn命令行时,我收到此错误:

 D:\Jenkins\jobs\Merge Trunk to Stable\workspace\stable>svn up --trust-server-cert --non-interactive 
 Updating '.':
 svn: E175002: Unable to connect to a repository at URL 'https://xxx/stable'
 svn: E175002: OPTIONS of 'https://xxx/stable': Server certificate verification failed: certificate issued for a different hostname,  issuer is not trusted (https://xxx)

但是当我从命令行CMD窗口运行同样的操作时,它就可以了:

 D:\Jenkins\jobs\Merge Trunk to Stable\workspace\stable>svn up
 Updating '.':
 At revision 1797.

 D:\Jenkins\jobs\Merge Trunk to Stable\workspace\stable>svn up --trust-server-cert --non-interactive
 Updating '.':
 At revision 1797.

任何想法如何解决这个问题?

8 个答案:

答案 0 :(得分:17)

很老的问题,但还活着。

如您所知,问题是接受的证书缓存(以及用户名/密码缓存)是按用户的,并且由于Jenkins作为不同的用户(很可能是SYSTEM)运行,因此它不知道您的常规用户缓存。

并非所有SVN客户端都允许您在那里执行“echo p”操作(它对我不起作用),--trust-server-cert在这种情况下显然也不起作用。

对我有用的是open a console window as SYSTEM,并在那里进行交互式acceptcertificate-login-password舞蹈。

由于所有这些都是缓存的,因此您只需执行一次,从那时起,所有svn up和类似请求都将起作用。

答案 1 :(得分:6)

我终于设法解决了这个问题!我所做的只是简单地放入Jenkins脚本:

echo p | svn up --username <usr> --password <pwrd>

这解决了!因为echo模拟了手动输入以永久接受证书。

根本原因是Jenkins shell脚本在Windows服务用户下运行 - 因此为用户配置文件缓存使用了不同的位置(在C:\Windows\System32\config\systemprofile\AppData\Roaming\Subversion中而不是%USERPROFILE%\AppData\Roaming\Subversion\

答案 2 :(得分:0)

也许,证书颁发给不同的主机名(不是xxx,而是xxx.yourcompany.com)。如果是,请使用此主机名进行干净的结账。

答案 3 :(得分:0)

echo p | svn commands

在Jenkins windows批处理命令提示符下工作得很好。执行此操作将永久接受Build框中Jenkins用户的证书。

答案 4 :(得分:0)

通过Jenkins在奴隶上运行Svn命令给了我很大的困难。我做了以下事情:

如果您使用的是unix,请点击以下链接:http://www.microhowto.info/howto/configure_subversion_to_trust_a_given_ssl_certificate.html

如果您使用的是Windows,请执行以下操作:

cd %APPDATA%\Subversion\

然后通过从server元素中删除#符号来编辑该目录中的ssl-authority-files文件,并更新存储ssl证书文件的路径。

如果您希望更改以下内容,请更改以下内容。

store-passwords = yes 
store-ssl-client-cert-pp = yes

完成后,您还需要按照Add the Cert to the Trusted Root CA Store

将证书添加到您的Windows计算机上

答案 5 :(得分:0)

这可能看起来像一个可怕的答案但是在用尽其他问题后,由于其他问题导致我无效,我选择了改变SVN服务器的路线,不使用SSL。

这只是一个选项,因为我只是设置了这个服务器并且它在一个完全内部的网络上,但它确实完全消除了这个问题。我没有其他选择和时间。

我也只是建议有人没有意识到它甚至是一种选择。无论服务器暴露如何,使用SSL都会让我感觉更好。

答案 6 :(得分:0)

与Jenkins和Window 7有同样的问题。 我通过进入服务并选择Jenkins解决了这个问题,然后转到登录并输入管理凭据并重新启动jenkins服务。

希望这可以解决您的问题。

答案 7 :(得分:0)

即使您已经接受证书,也可能会发生这种情况。

在Linux中,Jenkins使用其自己的用户名。您可以使用命令sudo su jenkins切换到jenkins用户,然后使用命令cd ~ls查看jenkins用户的根路径。对我来说,这是jenkins的安装路径(var / lib / jenkins)。

您可以在用户软件包中看到.subversion软件包。如果您以前接受过证书,则可以在.subversion中看到auth软件包。

将整个.subversion软件包复制到jenkins安装软件包(jenkins用户的根路径)。

再试一次,在jenkins shell中使用svn up命令,它将起作用。

我的英语不好,谢谢您的阅读。