2016-06-14 18 views
1

JenkinsのビルドジョブからWebサーバを起動しようとしていますが、ジョブは成功しますが、ジョブが終了するとJenkinsがバックグラウンドジョブを自動的に終了させて​​います。jenkinsジョブからデーモンサーバを起動できない

+ caddy -port 26748 & 
Activating privacy features... done. 
:26748 
Process leaked file descriptors. See http://wiki.jenkins-ci.org/display/JENKINS/Spawning+processes+from+build for more information 
Finished: SUCCESS 

私はspawning processes from buildについてジェンキンスのドキュメントを読んで、そしてまた、私は、プロセスをdaemonizingし、何か他のものにBUILD_ID環境変数を設定することによって、これを達成することができるはずということを教えProcessTreeKiller、程度なので、私はこれを試してみました:私はもはやProcess leaked file descriptorsメッセージが出ていないものの、

BUILD_ID=dontKillMe daemon --env="BUILD_ID=dontKillMe" --name="my-process" -- caddy -root `pwd` -port 26748 

しかし、これはまだ終了時にプロセスを強制終了しているようです。私はJenkinsユーザーと全く同じコマンドをボックス上で直接実行しようとしましたが、正常に動作します。

誰かが間違っていることを知っていますか?ジョブが終了した後、このプロセスを生き残るにはどうすればいいですか?

答えて

1

私の問題は、子プロセスではなく、daemonプロセス用に具体的に設定する必要があるということでした。何らかの理由でBUILD_ID=dontkillme daemonがこれを効果的に実行していませんでした。

私はbashセッションに通過した新しいBUILD_IDbashセッション内daemonコマンドを実行することにより、これを解決:

BUILD_ID=dontKillMe bash -c "daemon --name="my-process" --command 'caddy -root `pwd` -port 26748'" 

をこれが今の私の成功したデーモンプロセスを実行したまま。

0

代わりにできるトリックですが、もう少し面倒ですが効果的です。

できることは、ssh接続を使ってbashスクリプトを実行し、プロセスのpidをどこかに保存しながらバックグラウンドに送信して、さらにチェックを行うことです。

コマンドの形式は次のようになります。終わることはありませんプログラムで

ssh -n _hostname_ "_commands_ & echo \$! > \"_path_to_pid_file_\"" & 

例:

ssh -n mycomputer.mydomain.com "tail -f /var/log/my.log & echo \$! > \"$WORKSPACE/pid\"" & 

この例では、/ varに新しい変化を永遠に聴き尾のプロセスを生成します/log/my.logファイルを開き、そのpidを$ WORKSPACE/pidファイルに格納します。

Jenkinsジョブから実行された場合、バックグラウンドに送信されたコマンドは指定されたホストで実行されたまま、ジョブが終了するとsshプロセスはJenkinsによって強制終了されます。

ソースコードがソース管理下にあるプロセス(通常はgit)をチェックして生成するために、これを頻繁に行います。

希望すると便利です。

関連する問題