web-dev-qa-db-ja.com

LaunchDaemonとしてMacOSXでJenkinsスレーブを起動します

私はジェンキンスを始めようとしています 'slave.jar Mac OS X 10.8.3で、起動デーモンを使用して、マシンの起動直後に実行されるようにします。

しかし、私は不思議な問題を経験しています:ログファイルで見ることができるように、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

ただし、接続はその直後に閉じられます。

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

ここ この問題の解決策を見つけました-最初のコマンドとしてSudoを追加します。

これは、ターミナルOR launchctlを介してLaunchDaemonを手動で停止および開始するときに自分で実行すると機能します。ばかげているように聞こえます-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>
6
mr.VVoo

問題は、jenkinsスレーブがUIを開始しようとしますが、これは-もちろん-許可されていないことです。公式のバグレポートに関連する同じエラーを見つけました: https://issues.jenkins-ci.org/browse/JENKINS-15697

この場合の解決策は、JVMオプションに-Djava.awt.headless=trueを追加することです。これにより、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>

私はこれをテストしました、そしてそれは働きます。

7
mr.VVoo