6

Jenkins と Powershell スクリプトの実行に関していくつかの問題があります。簡単に言うと、スクリプトの実行時間は 8 倍かかり、サーバー (スレーブ) で手動で実行します (数分しかかかりません)。なぜだろう?

スクリプトには、& msbuild.exe や & svn commit などのコマンドを呼び出す関数があります。スクリプトは、言及されたコマンドが実行される前の行でハングアップすることがわかりました。その結果、スクリプトに時間がかかるため、Jenkins がタイムアウトします。Jenkinsジョブ構成でタイムアウトしきい値を変更できましたが、これが問題の解決策であるとは思いません.エラー出力や時間がかかる理由についての情報はありません.理由についてはこれ以上のアイデアはありません. Jenkins がこれらのコマンドを内部的に呼び出す方法を教えてください。

これは、Jenkins が行うことです (Windows バッチ プラグイン)。

powershell -File %WORKSPACE%\ScriptHead\DeployOrRelease.ps1
4

2 に答える 2

0

「分割統治」技術を使用します。2 つの選択肢があります。スクリプトを変更して、実行中の内容と各ステップにかかる時間を表示します。2 番目のオプションは、次のようなアクションを実行するスクリプトを小さくすることです。

  • コードソースを入手し、
  • アプリケーションのコンパイル/ビルド、
  • テストを実行し、
  • パッケージを作成し、
  • パッケージを送信し、
  • ログをアーカイブする
  • 通知を送信します。

通常、最も問題となるのは最初のステップです。GIT、SVN、Mercurial、またはバージョン管理システムとして持っているものからソース コードを取得することです。このステップがスクリプトに組み込まれていないことを確認してください。

ジョブの実行中に、Jenkins は出力をキャプチャし、AJAX を使用して結果をブラウザーに表示します。スクリプトでは、すべてのステップまたはいくつかのステップで標準出力をフラッシュするようにしてください。一部の言語は標準出力をキャッシュするため、最後にのみ結果を確認できます。

また、古い実行のアクティビティ ステータスをアーカイブして確認するのに役立つログ ファイルを作成することもできます。私の経験から、10 以上のステップで Jenkins を使用するには、「ロボット フレームワーク」のような複数のステップを実行できる特殊なアプリケーションを作成する必要があります。

于 2016-03-01T10:29:52.273 に答える
0

Jenkinsが独自のプラグインをサポートしていることに気付く前に、独自のPowershell CIサービスを作成しました。しかし、私の実装と現在のジョブ構成では、サンプルの分離原則ルールに従っています。私のCIサービスは、異なるステップに分かれているとうまく機能することがわかりました(エラーが発生した場合でも、根本原因の分析が非常に簡単です)。ここでも、単一責任の原則が役立ちます。そのため、Jenkins の場合と同様に、事前と事後、ビルド、および電子メールのステップを個別のスクリプトとして用意しています。約

msbuild.exe

私の場合、覚えている限り、ファイル システム パスの操作に関連する問題がありました。そのため、スクリプトをさまざまな機能に分割/分離すると、パフォーマンスが向上しました (パラメーターの追加チェック)。

于 2014-08-21T13:50:01.113 に答える