Jenkins服务在Windows 2008上无法启动。

4
我正在尝试在Windows Server 2008 Datacenter (SP2)上安装Jenkins服务。我似乎无法将其作为服务运行,并正在寻找任何想法来帮助它启动。
当我尝试使用本机Windows软件包安装Jenkins时,msiexec日志中出现“错误1920.服务Jenkins无法启动。”
我已经执行了以下手动安装步骤:
- 安装32位java - 使用java -jar jenkins.war启动Jenkins。 - 转到管理Jenkins并将其设置为运行为Windows服务。 - 告诉Jenkins重新启动自己作为服务。
此时,Jenkins会停止运行并且无法重新启动。
当我尝试手动启动Jenkins时,我会收到错误1053(服务未响应)。我找不到任何日志文件或其他信息。
欢迎任何想法或建议,我也很想听听有没有人在此操作系统(或Windows 2003服务器)上让它正常工作。
非常感谢!
7个回答

4

版本1.498具有更强的安全性,但可能会中断Jenkins Slave作为服务。

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

建议如下:

  1. 停止服务;
  2. 如果存在dos服务,则卸载该服务(sc delete jenkinsslave-C__Jenkins);
  3. 删除旧的jenkins-slave.exe、slave.jar和jenkins-slave.xml;
  4. 启动Web客户端并让它安装服务;
  5. 编辑jenkins-slave.xml使其看起来像这样,其中重要部分是jnlpCredentials:<arguments>-Xrs -jar"%BASE%\slave.jar" -jnlpCredentials <user>:<password> -jnlpUrl http://<yours erver>/computer/<slavename>/slave-agent.jnlp</arguments>

我发现删除slave.jar并以已登录的用户身份启动web客户端效果最好,你会得到一个secret而不需要编辑XML。

如果我不删除slave.jar,我发现在编辑jenkins-slave.xml并删除arguments中的secret即可正常工作,而无需任何凭据(安全漏洞?)。参见jenkins-slave.err。

"-secret" is not a valid option

jenkins-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 -->
...

添加jlnpCredentials对于v1.514已经不再相关和必要了 ;) - HX_unbanned
是的,我认为这个秘密代替了凭证,有趣的是它两者都不起作用。 - KCD
我会押注这样一个事实:如果你有v1.499之前的版本,根据slave.xml,有一些代码路径...但现在,如果你创建了新的slave,它将保存在jenkins-service.exe.config(或类似的文件)中... - HX_unbanned
我无法将Jenkins从机(代理)作为服务启动。从命令行可以正常工作。当我双击.jnlp文件启动并连接时,但我没有看到安装为服务的选项。你能帮忙吗? - tarekahf

1

我在Windows 2003服务器上遇到了类似的问题。我已经安装了.NET Framework 4.0,但Jenkins(v1.4.60)与此框架不兼容。安装.NET Framework 2.0(v2.0.50727)后,问题得到解决。


0
建议:如果可能的话,请不要在Windows上将Jenkins作为服务运行 - 您可能会遇到与权限和后台运行有关的各种问题。缺点是它不会在机器重新启动时自动启动,但往往可以忍受这一点。根据我的经验,就崩溃而言,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)

找到了修复,但对我没有用。所以,我的解决方法很简单——只需在另一台机器上安装Jenkins(具有相同的操作系统),所有问题都会得到解决。感谢您的建议! - Rinat
我认为这不是一个好主意,我想不出一个好的环境,在这种情况下你应该保持会话打开,因为产品不支持应有的功能。 - Eugenio Miró

0

我曾经遇到过同样的问题,但对我来说,这是与jenkins.xml配置文件有关的问题。它不是正确的XML格式,因此Jenkins无法正确加载它。我通过以管理员身份在命令提示符中执行jenkins.exe,发现这是一个配置错误,并得到了正确的错误输出。


0

我发现Jenkins服务的默认设置只允许使用256m的堆内存。我猜他们希望我们只编写"Hello World"级别的代码。在偶然出现PermGen错误后,我发现了这一点。但是我发现我无法通过修改jenkins.xml来解决问题。

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

我只能在设置时启动Jenkins,

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

0

我遇到了同样的问题,通过设置Java目录路径解决了。


-1
KCD提供的答案非常完整且相关。但有时我们面对这个问题是因为一个愚蠢的错误。
我也遇到了类似的问题,当我从命令提示符启动Jenkins时,我收到了错误消息。
我输入的命令是:
$: start jenkins.exe

在我参考了自己的笔记之后,我发现问题要简单得多。我使用命令的方式是错误的。正确的方式应该是:
$: jenkins.exe start/stop/restart

输入命令正确后,问题得到解决。


KCD提供的答案非常完整且相关。我同意。 - MatteoSp

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接