当我从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.
任何想法如何解决这个问题?
答案 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
将证书添加到您的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
命令,它将起作用。
我的英语不好,谢谢您的阅读。