mr.*_*Voo 6 mac launchd jenkins macos
我正在尝试slave.jar
使用 Launch Daemon 在 Mac OS X 10.8.3 上启动 jenkins ,以便它在机器启动后立即运行。
但是我遇到了一个神秘的问题:LaunchDaemon
正如我在日志文件中看到的那样,启动了奴隶
29.04.2013 14:57:06 hudson.remoting.jnlp.Main$CuiListener status
INFO: Locating server among [http://ci.****/]
29.04.2013 14:57:06 hudson.remoting.jnlp.Main$CuiListener status
INFO: Connecting to ci.****:53930
29.04.2013 14:57:06 hudson.remoting.jnlp.Main$CuiListener status
INFO: Handshaking
29.04.2013 14:57:06 hudson.remoting.jnlp.Main$CuiListener status
INFO: Connected
Run Code Online (Sandbox Code Playgroud)
但此后连接立即关闭:
29.04.2013 14:57:06 hudson.remoting.SynchronousCommandTransport$ReaderThread run
SCHWERWIEGEND: I/O error in channel channel
java.io.IOException: Unexpected termination of the channel
at hudson.remoting.SynchronousCommandTransport$ReaderThread.run(SynchronousCommandTransport.java:50)
Caused by: java.io.EOFException
at java.io.ObjectInputStream$BlockDataInputStream.peekByte(ObjectInputStream.java:2576)
at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1295)
at java.io.ObjectInputStream.readObject(ObjectInputStream.java:349)
at hudson.remoting.Command.readFrom(Command.java:92)
at hudson.remoting.ClassicCommandTransport.read(ClassicCommandTransport.java:59)
at hudson.remoting.SynchronousCommandTransport$ReaderThread.run(SynchronousCommandTransport.java:48)
29.04.2013 14:57:06 hudson.remoting.jnlp.Main$CuiListener status
INFO: Terminated
Run Code Online (Sandbox Code Playgroud)
在这里,我找到了解决此问题的方法 - 添加sudo
为第一个命令。
当我在终端中自己运行它时,或者当我通过launchctl
. 这听起来很愚蠢 - 运行通过 sudo 执行的命令,但它在这种情况下有效。
但是当系统手动启动时它不起作用。任何的想法?这是我的 LaunchDaemon.plist 文件:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>Label</key>
<string>com.example.ci</string>
<key>ProgramArguments</key>
<array>
<string>sudo</string>
<string>/usr/bin/java</string>
<string>-jar</string>
<string>/Developer/jenkins/slave.jar</string>
<string>-jnlpUrl</string>
<string>http://ci.****/computer/****/slave-agent.jnlp</string>
<string>-jnlpCredentials</string>
<string>user:apitoken</string>
</array>
<key>KeepAlive</key>
<true/>
<key>StandardOutPath</key>
<string>/Developer/jenkins/stdout.log</string>
<key>StandardErrorPath</key>
<string>/Developer/jenkins/error.log</string>
</dict>
</plist>
Run Code Online (Sandbox Code Playgroud)
问题是,詹金斯奴隶试图启动一些用户界面,但这当然是不允许的。我发现了与官方错误报告相关的相同错误:https : //issues.jenkins-ci.org/browse/JENKINS-15697
在这种情况下,解决方案是添加-Djava.awt.headless=true
到 JVM 选项,这会导致 LaunchDaemon 的以下配置。
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>Label</key>
<string>com.example.ci</string>
<key>ProgramArguments</key>
<array>
<string>sudo</string>
<string>/usr/bin/java</string>
<string>-Djava.awt.headless=true</string>
<string>-jar</string>
<string>/Developer/jenkins/slave.jar</string>
<string>-jnlpUrl</string>
<string>http://ci.****/computer/****/slave-agent.jnlp</string>
<string>-jnlpCredentials</string>
<string>user:apitoken</string>
</array>
<key>KeepAlive</key>
<true/>
<key>StandardOutPath</key>
<string>/Developer/jenkins/stdout.log</string>
<key>StandardErrorPath</key>
<string>/Developer/jenkins/error.log</string>
</dict>
</plist>
Run Code Online (Sandbox Code Playgroud)
我已经测试过这个并且它有效。
归档时间: |
|
查看次数: |
13180 次 |
最近记录: |