运行 来自命令行的 Jenkins 与 Windows 服务

Running Jenkins from command line vs as Windows service

我 运行 遇到了一个非常难 运行 的问题。我需要在我的 Jenkins 中配置代理,以便能够在其中一项工作中访问 SVN 存储库。我通过两种方式做到了:

  1. 使用所需参数从命令行启动 Jenkins
  2. 将 Jenkins 作为 Windows 服务启动,而参数在 jenkins.xml 文件中定义。

从命令行开始:

C:\>java -DJENKINS_HOME="C:\.jenkins" -Dhudson.model.DirectoryBrowserSupport.CSP
="`script-src 'unsafe-inline';`" -Dhttp.proxyHost=localhost -Dhttp.proxyPort=312
8 -Dhttps.proxyHost=localhost -Dhttps.proxyPort=3128 -jar %JENKINS_HOME%\jenkins
.war

作为服务启动(下面是jenkins.xml内容):

<executable>java</executable>
<arguments>-DJENKINS_HOME="C:\.jenkins" -Dhudson.model.DirectoryBrowserSupport.CSP="`script-src 'unsafe-inline';`" -Dhttp.proxyHost=localhost -Dhttp.proxyPort=3128 -Dhttps.proxyHost=localhost -Dhttps.proxyPort=3128 -jar "%JENKINS_HOME%\jenkins.war"</arguments>

所以这完全一样。然而,问题是当我使用命令行启动 Jenkins 时,代理工作正常。但是当我将 Jenkins 作为服务启动时,无法访问存储库(通过代理)并且我收到此错误消息:

请注意,如果我查看“系统信息”部分中的“系统属性”,代理参数在两种情况下都显示相同,因此配置已正确应用:

显然,Jenkins 的启动方式有所不同,具体取决于它的启动方式(命令行或 windows 服务)。强化这一假设的是,我看到一些日志文件仅在我将 Jenkins 作为服务启动时才被写入,而当我从命令行启动它时则不会。我说的是这些日志文件:

jenkins.wrapper.log
jenkins.out.log

我需要做哪些不同的事情才能从 Jenkins 获得与从命令行启动时相同的服务结果?我缺少什么配置?

作为 Windows 服务的 Jenkins 不在您当前用户下 运行,但默认情况下在 LocalSystem Account 下。

有关含义,请参阅 MSDN: Using the LocalSystem Account as a Service Logon Account and SO: The difference between the 'Local System' account and the 'Network Service' account?