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

Ran*_*hen 13 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)
Run Code Online (Sandbox Code Playgroud)

但是当我从命令行CMD窗口运行相同时,它是可以的:

 D:\Jenkins\jobs\Merge Trunk to Stable\workspace\stable>svn up
 Updating '.':
 At revision 1797.
Run Code Online (Sandbox Code Playgroud)

要么

 D:\Jenkins\jobs\Merge Trunk to Stable\workspace\stable>svn up --trust-server-cert --non-interactive
 Updating '.':
 At revision 1797.
Run Code Online (Sandbox Code Playgroud)

知道怎么解决这个问题?

Pan*_*ama 17

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

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

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

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

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


Ran*_*hen 6

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

echo p | svn up --username <usr> --password <pwrd>
Run Code Online (Sandbox Code Playgroud)

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

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