14

当我从 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.

知道如何解决这个问题吗?

4

8 回答 8

19

很老的问题,但仍然很活跃。

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

并不是所有的 SVN 客户端都让你在那里做“echo p”的事情(它对我不起作用),而且--trust-server-cert显然在这种情况下也不起作用。

对我有用的是打开一个控制台窗口作为 SYSTEM,并在那里进行交互式 acceptcertificate-login-password 舞蹈。

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

于 2013-11-20T08:19:03.143 回答
8

我终于设法解决了这个问题!我所做的只是放入 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\

于 2012-08-14T14:55:35.863 回答
1

echo p | svn commands

在 Jenkins windows 批处理命令提示符下工作得很好。这样做一次将永久接受 Jenkins 用户在 Build 框中的证书。

于 2014-09-04T16:45:12.463 回答
1

即使您接受了证书,这也可能发生。

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

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

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

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

我的英语很差,谢谢你的阅读。

于 2019-10-31T08:53:47.667 回答
0

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

于 2013-01-28T07:37:07.427 回答
0

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

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

如果您在 Windows 上,请执行以下操作:

cd %APPDATA%\Subversion\

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

如果您喜欢它来存储您的凭据,还可以更改以下内容。

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

完成后,您还需要按照将证书添加到受信任的根 CA 存储中,将证书添加到您的 Windows 机器

于 2015-07-08T20:29:43.453 回答
0

这似乎是一个可怕的答案,但在用尽了其他问题之后,由于其他问题对我不起作用,我选择了改变 SVN 服务器以不使用 SSL 的路线。

这只是一个选项,因为我刚刚设置了这台服务器,它完全位于内部网络上,但它确实完全消除了这个问题。我用完了其他选择和时间。

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

于 2016-01-29T18:01:08.087 回答
0

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

希望这能解决您的问题。

于 2016-06-22T20:39:20.493 回答