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 を強制終了すると、そのサーバーへの次のすべての展開でビルドがハングする問題が発生しなくなります。下の画像をご覧ください