jenkins服务无法在Windows 2008上启动

时间:2012-02-07 13:37:26

标签: windows-services windows-server-2008 jenkins

我正在尝试将Jenkins作为服务安装在Windows Server 2008 Datacenter(SP2)上。我似乎无法让它作为服务运行而且我 寻找任何想法,以帮助实现目标。

当我尝试使用本机Windows软件包安装Jenkins时,我得到“错误1920.服务Jenkins无法启动。”在msiexec日志中。

我已经执行了以下手动安装步骤:

  • 已安装java 32位
  • 使用java -jar jenkins.war
  • 启动Jenkins
  • 管理Jenkins并将其设置为作为Windows服务运行。
  • 告诉詹金斯重启自己作为一项服务。

此时,詹金斯去世了,并没有回来。

当我尝试手动启动Jenkins时,我收到错误1053(服务没有响应)。我无法发现任何日志文件或其他信息。

欢迎任何想法或建议,我也很想听到 任何使用它在这个操作系统(或Windows 2003服务器)上工作的人。

非常感谢

7 个答案:

答案 0 :(得分:4)

版本1.498具有更强的安全性,可以将Jenkins Slave打破为服务。

https://issues.jenkins-ci.org/browse/JENKINS-16273

建议包括:

  1. 停止服务
  2. 如果服务存在dos(sc delete jenkinsslave-C__Jenkins
  3. ,请将其卸载
  4. 删除旧的jenkins-slave.exe,slave.jar和jenkins-slave.xml
  5. 启动Web客户端并让它安装服务
  6. 编辑jenkins-slave.xml,看起来这个重要部分是jnlpCredentials <arguments>-Xrs -jar "%BASE%\slave.jar" -jnlpCredentials <user>:<password> -jnlpUrl http://<your server>/computer/<slave name>/slave-agent.jnlp</arguments>
  7. 我发现删除slave.jar并启动Web客户端作为登录用户效果最好,你得到一个秘密,需要编辑XML。

    如果我没有删除slave.jar,我发现编辑jenkins-slave.xml并删除secret arguments,而没有任何凭据(安全漏洞?)。见jenkins-slave.err

    "-secret" is not a valid option
    

    <强>詹金斯-slave.xml

    ...
    <service>
      <id>jenkinsslave-D__Jenkins</id>
      <name>Jenkins Slave</name>
    ...
      <executable>C:\Program Files\Java\jre7\bin\java.exe</executable>
      <arguments>-Xrs  -jar "%BASE%\slave.jar" -jnlpUrl http://jenkins.domain/jenkins/computer/mycomputername/slave-agent.jnlp </arguments> <!-- -secret fafd7bf18fdcc48ffb17fe1ff0a072ce5d33b004769b351e9d633f875b63fb59 -->
    ...
    

答案 1 :(得分:1)

我在Windows 2003服务器上遇到过类似的问题。我已经安装了.net framwork 4.0但是jenkins(v1.4.60)不适用于这个框架。安装.net framework 2.0(v2.0.50727)后问题得到解决。

答案 2 :(得分:0)

建议:如果你完全可以避免它,不要在Windows上运行Jenkins作为服务 - 你可能会遇到与权限相关的各种问题并在后台运行。缺点是它不会在机器重新启动时自动启动,但通常情况下,人们可以使用它。根据我的经验,就崩溃而言,詹金斯非常强大。如果你想要格外小心 - 写一个包装器,每隔一段时间检查Jenkins是否存活(例如,通过尝试通过HTTP连接到它)并在它死亡时重新启动它。

附件是一个Python脚本,它可以做到这一点(没有保证,责任等):

'''Usage:
hudson.py [<http-port>]'''

# Script to start/revive Hudson/Jenkins
# The script checks if Hudson is alive by trying to connect to its HTTP port
# if connection fails - it tries to restart Hudson 

import sys
import time
import httplib
import os

HTTPTimeout = 10
CheckInterval = 300
DefaultHudsonPort = 8081

if (__name__ == '__main__'):
    if len(sys.argv) > 2:
        print __doc__
        sys.exit(1)
    elif len(sys.argv) == 2:
        portNum = int(sys.argv[1])
    else:
        portNum = DefaultHudsonPort

    httpConnection = None
    while True:
        if not httpConnection:
            httpConnection = httplib.HTTPConnection("127.0.0.1", portNum, timeout = HTTPTimeout)
        try:
            httpConnection.connect()
            httpConnection.close()
        except:
            print "(Re)Starting Hudson/Jenkins on port %d" % portNum
            os.system("java -jar hudson.war --httpPort=%d" % portNum)
        time.sleep(CheckInterval)

答案 3 :(得分:0)

我遇到了同样的问题,但对我来说这是 jenkins.xml 配置文件的问题。这不是正确的XML,因此Jenkins无法正确加载它。我发现在管理员命令提示符中执行 jenkins.exe 是一个配置错误,它给了我一个正确的错误输出。

答案 4 :(得分:0)

我发现Jenkins服务的默认设置只允许256米的HEAP。我猜他们希望我们只编码“Hello World”。我偶然发现PermGen错误后发现了这个问题。但我发现我无法纠正jenkins.xml所有,

-Xrs -Xms<value> -Xmx<value> --XX:PermSize=<value> --XX:MaxPermSize=<value>

我只能在设置时启动Jenkins,

-Xrs -Xms<value> -XX:MaxPermSize=<value>

答案 5 :(得分:0)

我有同样的问题&amp;通过设置Java目录路径解决。

答案 6 :(得分:-1)

KCD提供的答案是完整且非常相关的。但是有些时候我们也会因为一个愚蠢的错误而面临这个问题。

我也遇到了类似的问题,当我从COMMAND PROMPT发起Jenkins时,我收到了错误消息。

我输入的命令是,

$: start jenkins.exe

在我提到自己的笔记之后,我发现这个问题要简单得多。我错误地使用了命令。应该是:

$: jenkins.exe start/stop/restart

正确输入命令后,问题就解决了。