1

CI の一環として、いくつかのプロジェクトの 1 つをチーム シティに移行し始めました。以下は、teamcity ビルドをセットアップする方法です。WebSite を展開しようとしています。

1) ビルド手順 1 (パッケージのインストール)

「コマンドライン」ランナータイプを使用して、必要なパッケージをインストールします。

2) ビルド ステップ 2 (ビルド)

ランナータイプ「Visual Studio (sln)」(Visual Studio 2010) を使用して Web サイトを構築します。

3) ビルド ステップ 3 (Web サイトのデプロイ)

「.Net Process Runner」を使用して、deployer.exe (.Net Framework 4 でビルドされた x86) サイトをデプロイします。

Deployer.exe は構成ファイルを読み取ります。構成ファイルには、ビルドをプッシュする「BuildId」、「環境」、および「サーバー」が含まれています。

<buildType id="bt52">
    <env name="Debug">
        <server path="SERVER1" />
    </env>
    <env name="QA">
    <server path="SERVER2" />
    <server path="SERVER3" />
</env>
<env name="UAT">
    <server path="SERVER4" />
    <server path="SERVER5" />
</env>
</buildType>

Deployer.exe は、次のように必要なパラメーターで呼び出されます。構成を読み取り、サイトを Server2 と Server3 に展開します。

Deployer.exe "bt52" "QA" "siteQA" "E:\BuildAgent\work\2483052e33e5e1e8\src\diy\" msdeploy.exe

問題の領域はステップ 3 です。

チーム シティの一部として .Net プロセス ランナーを使用して deployer.exe を実行すると、ハングし、45 分間応答しないことがあります。コマンド ライン スクリプトを使用してビルド サーバーから同じ deployer.exe を実行しようとすると、数秒以内に実行されます。

E:\TeamCity_custom_applications\deployer>Deployer.exe farm1-1 QA siteQA E:\BuildAgent\work\2483052e33e5e1e8\src\diy\ msdeploy.exe

情報

: バッチ実行の処理中 ... 情報 : コマンドの処理中 ...msdeploy.exe -verb:sync -source:contentPath="E:\BuildAgent\work\2483052e33e5e1e8\src\diy\" -dest:contentPath="siteQA", wmsvc="SERVER2",userName="*****",password="*****",authType="Basic"-skip:objectName=filePath,absolutePath=web.config -skip:objectName=dirPath ,absolutePath="bin" -enableRule:DoNotDeleteRule -allowUntrusted 情報: 出力 >>合計変更: 0 (0 追加、0 削除、0 更新、0 パラメーター変更、0 バイトのコピー) 情報: エラー >>(なし) 情報: ExitCode >> 0 情報 :

処理コマンド ...msdeploy.exe -verb:sync -source:contentPath="E:\BuildAgent\work\2483052e33e5e1e8\src\diy\" -dest:contentPath="siteQA",wmsvc="SERVER3",userName=" ******",password="******",authType="Basic" -skip:objectName=filePath,absolutePath=web.config -skip:objectName=dirPath,absolutePath="bin" -enableRule :DoNotDeleteRule -allowUntrusted 情報: 出力 >>合計変更: 0 (0 追加、0 削除、0 更新、0 パラメーター変更、0 バイト コピー) 情報: エラー >>(なし) 情報: ExitCode >> 0

Info: スクリプトのデプロイが完了しました。

私たちが観察したもう 1 つのことは、teamcity を介して deployer.exe を実行していることです。サイトのコンテンツがコピーされますが、1 つのサーバーに対してのみコピーされ、teamcity のビルド ステータスは「実行中」モードのままです。この問題をどのように調べることができるかについて、誰かが少し洞察を与えることができるかどうか疑問に思っています.

更新 1:

ご検討いただきありがとうございます。最終的には、「cmd.exe」からコマンド「msdeploy.exe」を実行する代わりに、環境変数として「msdeploy.exe」の場所を追加し、サーバー数のループで「msdeploy.exe」を実行しました。これにより、ハングアップの問題が解決されました。ここで、「cmd.exe」から「msdeploy.exe」を実行すると、「msdeploy.exe」を直接実行しているときにハングするような動作をする理由を知りたいと思っています。同じことへの洞察は大歓迎です。

更新 2:

プロセス エクスプローラーを使用した動作を説明する画像を追加しました。プロセス エクスプローラーから msdeploy.exe を強制終了すると、そのサーバーへの次のすべての展開でビルドがハングする問題が発生しなくなります。下の画像をご覧ください

ここに画像の説明を入力

4

3 に答える 3

0

TeamCity で NUnit ビルド ステップを構成し、テストから cmd.exe を呼び出しているようです。これはテストコードの問題のようです。問題のテストを NUnit で直接実行すると、おそらく TeamCity なしで再現されます。

Richard が指摘したように、おそらく問題の根本原因は stdin/stdout 処理に関連しています。コードで修正したい場合は、stdin を明示的に閉じたり、その逆を行ったり、何かを書き込んだりしてみてください。

于 2013-05-07T08:17:23.743 に答える
0

正直なところ、入出力ストリームのリダイレクトで問題が発生しているようです。TeamCity は完全にヘッドレス環境でアプリケーションを実行しており、次に、の出力をリダイレクトして解析しようとしています。msdeploy.exe

その場合は、代わりにMSDeploy APImsdeploy.exeの使用を検討することをお勧めします。後者は前者の単なるコマンド ライン ラッパーであるため、すべての機能を利用できます。開始する際にサポートが必要な場合は、IIS ブログでサンプルの展開アプリケーションを入手できます。

于 2013-04-24T03:44:10.030 に答える
0

私たちが行った回避策は、msdeploy の実行とデプロイに 3 ~ 5 秒もかからないことを観察したことです (約 300 MB の Web サイトである最大のプロジェクトでも)。そのため、タイムアウトを 20 秒に設定します。これまでのところ、過去 1 週間から問題は発生しておらず、これ以上問題が発生しないことを願っていますが、そのような動作の理由はまだわかりません。

于 2013-05-16T11:44:49.990 に答える