0

Jenkins と PowerShell を使用して、組織内で多くの自動化を行っています。展開、スケジュールされたタスク、サービスの再起動、IIS アプリ プールのリサイクルなどに最適です。Windows サーバーで実行されるコンソール アプリケーションを再起動するために使用したいと思います。

exe コンソール アプリケーションは、サーバー上のユーザー コンソール セッションで実行されている必要がある GUI を起動します。サービスははるかに制御しやすく、この方法論では、RDP を介して監視するアクティブなセッションを常に実行する必要がありますが、システムを設計した開発者と議論するには遅すぎます.

Jenkinsはサービスとして実行されており、exeを起動すると、つまり

& 'C:\gui.exe'

タスクマネージャーでプロセスを開始しますが、セッションで GUI を起動しないため、確認できます。Jenkins はエラーを報告します。

漏洩したファイル記述子を処理します。詳細については、 http://wiki.jenkins-ci.org/display/JENKINS/Spawning+processes+from+buildを参照してください。

ただし、このページには、特定のコンソール セッションをターゲットにして、目に見える GUI を起動する方法が説明されていません。何か不足していますか?助けていただければ幸いです...

4

2 に答える 2

0

私はあなたが報告した両方の問題を抱えていました.GUIを起動しないことと、ファイル記述子のリークメッセージです。これが私がそれらを解決した方法です。

問題 1 の解決策。Jenkins をサービスとして起動しないでください。ただし、デフォルトでは、Jenkins はシステム アカウントを使用してサービスとして Windows にインストールされます。ただし、サービスはデスクトップにアクセスできません。実行中の GUI アプリを無効にする System アカウント。「サービスがデスクトップと対話することを許可する」ボックスをチェックしても、サービスのログオンアカウントを十分に変更したり変更したりできません。コマンドラインから Jenkins を起動します。

問題 2 の解決策。私は2つのことをしました。最初に追加された

-Dhudson.util.ProcessTree.disable=true

コマンドライン起動の引数。次に、環境変数を追加します。

SET BUILD_ID=dontKillMe

Jenkins ジョブ自体に追加したジョブに。したがって、Jenkins ジョブには Powershell セクションがありますが、Powershell セクションの前に配置した SET コマンドを含む「Windows バッチ コマンドの実行セクション」もあります。

ところで、ここにあるのは、起動するための完全なコマンド ラインで、バッチ ファイルに配置しました。

CD "C:\Program Files (x86)\Jenkins"
java -Dhudson.util.ProcessTree.disable=true  -jar jenkins.war --httpListenAddress=127.0.0.1 --httpPort=8081 

たまたま 8080 で何か他のものを実行しているので、ポートを変更しました。

お役に立てれば!

于 2014-08-08T15:38:31.753 に答える
0

調査により、この回避策にたどり着きましたが、それは私の質問に対する答えではありません。

https://wiki.jenkins-ci.org/display/JENKINS/Tomcat

私が移動するのに役立ち、同じ問題を抱えている他の人に役立つことを願っていますが、問題を完全に解決するわけではないため、ここで提供します. これは、Jenkins エージェントが Windows サービスになることを許可しないということです。ブラウザのポップアップ jnlp 接続を開いたままにしておくと、セッションで GUI を起動するために機能しますが、ポップアップが閉じられたり、サーバーが再起動されたりすると、接続が失われ、スレーブに再度接続するために手動で介入する必要があります。その部分の解決策は、jnlp エージェントの起動を Windows スケジューラに配置して、ログオン時に実行することです。または、パラノイアになり、スクリプトが実行されているかどうかを確認し、実行されていない場合は起動するスクリプトを作成し、x 分ごとにスケジューラで実行します。

前述したように、これは機能しますが、環境に戻って、スレーブ エージェントのセットアップ方法を堅牢性の低いモデルに変更する必要があります。理想的ではありませんが、機能します。

うまくいけば、他の誰かがより良い解決策を持っているかもしれません (ただし、Jenkins/Hudson wiki ページでは、それは実際には不可能であると書かれています)。私はJenkinsソリューションを求めているのではなく、特定のコンソール セッションをターゲットにできる PowerShell ソリューションをもっと探していますが、PowerShell が Jenkins (非対話型シェル) を介して実行される独自の方法を考慮しています。

于 2013-06-21T14:25:46.860 に答える