【问题标题】:Jenkins Windows Service Not StartingJenkins Windows 服务未启动
【发布时间】:2021-02-17 12:06:52
【问题描述】:

Jenkins 作为 Windows 服务启动并运行了几个月,没有出现任何问题。

我做了一些 Jenkins 更新(将更新/更新的 .war 文件复制到 .jenkins 文件夹)并且还发生了一些 Windows 更新。我拥有的版本是 Jenkins 2.263.3

我对文档和其他 StackOverflow 票证进行了大量的搜索,发现 JENKINS_HOME 环境变量丢失了。我添加了这个。

这是我的调查所揭示的。

  1. Java 环境变量已设置 - 见下文:
C:\>java -version
java version "1.8.0_171"
Java(TM) SE Runtime Environment (build 1.8.0_171-b11)
Java HotSpot(TM) 64-Bit Server VM (build 25.171-b11, mixed mode)
  1. JENKINS_HOME 环境变量已设置 - 见下文:
C:\>echo %JENKINS_HOME%
C:\Users\XXXXX\.jenkins
  1. 安装在用户 XXXXX 下,并且相应地配置了服务帐户登录

  2. 我没有其他应用程序使用端口 8080 - 我使用 sys 内部检查了这一点。

  3. 我的 jenkins.xml 看起来像这样:

<service>
  <id>jenkins</id>
  <name>Jenkins</name>
  <description>This service runs Jenkins automation server.</description>
  <env name="JENKINS_HOME" value="%BASE%"/>
  <!--
    if you'd like to run Jenkins with a specific version of Java, specify a full path to java.exe.
    The following value assumes that you have java in your PATH.
  -->
  <executable>java</executable>
  <arguments>-Xrs -Xmx256m -Dhudson.lifecycle=hudson.lifecycle.WindowsServiceLifecycle -jar "%BASE%\jenkins.war" --httpPort=8080 --webroot="%BASE%\war"</arguments>
  <!--
    interactive flag causes the empty black Java window to be displayed.
    I'm still debugging this.
  <interactive />
  -->
  <logmode>rotate</logmode>

  <onfailure action="restart" />
  
  <!-- 
    In the case WinSW gets terminated and leaks the process, we want to abort
    these runaway JAR processes on startup to prevent corruption of JENKINS_HOME.
    So this extension is enabled by default.
  -->
  <extensions>
    <!-- This is a sample configuration for the RunawayProcessKiller extension. -->
    <extension enabled="true" 
               className="winsw.Plugins.RunawayProcessKiller.RunawayProcessKillerExtension"
               id="killOnStartup">
      <pidfile>%BASE%\jenkins.pid</pidfile>
      <stopTimeout>10000</stopTimeout>
      <stopParentFirst>false</stopParentFirst>
    </extension>
  </extensions>
  
  <!-- See the referenced examples for more options -->
  
</service>
  1. 我可以从命令行启动 Jenkins,如下所示:
java -Xrs -Xmx256m -Dhudson.lifecycle=hudson.lifecycle.WindowsServiceLifecycle -jar "C:\Users\XXXXX\.jenkins\jenkins.war" --httpPort=8080 --webroot="C:\Users\XXXXX\.jenkins\war
  1. 如果我尝试从 Serice Manager 启动它,我会收到此错误 - System.BadImageFormatException

  2. 最后一件事,一旦我从命令行启动 Jenkins,并登录到应用程序,我注意到以下 Jenkins 系统日志:

Feb 17, 2021 10:29:31 AM INFO hudson.WebAppMain$3 run
Jenkins is fully up and running
Feb 17, 2021 10:29:57 AM WARNING hudson.lifecycle.WindowsServiceLifecycle getBaseDir
Could not find environment variable 'BASE' for Jenkins base directory. Falling back to JENKINS_HOME

对如何通过服务管理器启动服务有什么建议吗?

【问题讨论】:

    标签: jenkins


    【解决方案1】:

    服务正在启动和停止,没有问题。

    我怀疑的问题是 Jenkins 的原始安装非常旧,我推测当时它可能是一个 32 位应用程序。当前的更新似乎适用于 64 位应用程序。自最初安装以来,Jenkins 进行了更新——从最初的安装(.war 文件更新)跨越了几个主要版本的更改。 启动服务的 jenkins.exe 文件从未更新。

    经过大量研究后出现的错误消息“System.BadImageFormatException”表明该问题与 32/64 位可执行文件之间的兼容性差异有关。我猜它期待一个 64 位的可执行文件,但得到一个 32 位的 exe。

    为了解决这个问题,我在本地 PC 上安装了最新版本的 Jenkins。

    在服务器上我备份了文件:

    • jenkins.exe
    • jenkins.exe.config

    然后我在服务未启动的服务器上停止了 Jenkins(从终端窗口使用 Ctrl+D)。

    然后我用本地安装的最新文件替换了服务器上的这两个文件。

    服务第一次启动。

    【讨论】:

      猜你喜欢
      • 2014-01-16
      • 2016-07-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多