3

Webサイトプロジェクトアプリケーション(* .wdprojを使用)とWeb配置アプリケーションをIISに展開するようにTeamCityを設定しています。

MSBuild.exeとMSDeployPublishを使用してアプリケーションをビルドし、展開するビルド構成があります。

ここで、アプリケーションを複数のターゲット環境にデプロイする必要があるため、ターゲット環境に基づいてさまざまな設定を提供する方法が必要です。

私はparameters.xmlファイルをWebDeploymentProjectに追加し、ここで設定されたパラメーターがターゲットIISサーバーを完全に通過し、正しく適用されていることを確認しました。

今私がやりたいのは、環境ごとに異なるパラメーター設定を行うことです。MSDeploy.exe -setParam引数のようなものを使用して、環境ごとに異なる値を指定できることを望んでいましたが、コマンドラインからパラメーター値をMSBuildに取得する方法が見つかりません。

次のいずれかを実行する必要があると思います。

  1. MSBuildとMSDeployを別々のビルドステップに分割します。

  2. パイプラインのどこかにタスクを構成して、nバージョンのparameters.something.xmlの1つを取得し、それをparameters.xmlに移動して、パイプラインの残りの部分で取得されるようにします。

私はこの時点で前進するための最も簡単な方法を探しています、どんな提案も歓迎します。

参考までに、これが私が今実験しているコマンドです:

msbuild /target:MSDeployPublish MySite_deploy.wdproj /P:Configuration=Debug
/P:DeployOnBuild=True /P:DeployTarget=MSDeployPublish
/P:MsDeployServiceUrl=www.myserver.com:8172/MsDeploy.axd
/P:AllowUntrustedCertificate=True /P:MSDeployPublishMethod=WMSvc
/P:CreatePackageOnPublish=True /P:UserName=MyUser /p:Password=MyPassword
/P:DeployIisAppPath=www.myserver.com/MySite
/P:ServerURL=http://www.tryingtoforcethis.com

私がparameters.xmlで定義したパラメーターであるServerURLの値がターゲットサイトに到達していないことを除いて、これはうまく機能しています。ただし、parameters.xmlで指定したデフォルトはです。したがって、パラメーターが機能していることはわかっていますが、msbuildコマンドラインにパラメーターを追加する方法がわかりません。

4

3 に答える 3

3

簡単に言うと、MSBuild 4.0とVS2010では、MSBuildの呼び出しからMSDeployPublishに任意のパラメーターを渡すことはできないということです。

私はこれらの投稿が役に立ちました:

http://forums.iis.net/t/1167657.aspx/1-MingChenのコメント

http://www.hanselman.com/blog/TinyHappyFeatures3PublishingImprovementsChainedConfigTransformsAndDeployingASPNETAppsFromTheCommandLine.aspx-下部にあるRichardSzalayからのコメント

これらを読み、Microsoft.Web.Publishing.targetsファイルをしばらく調べて「方法」を見つけようとした後、最終的に、ソース管理のプロジェクトフォルダーにParameters.xmlの複数のコピーを作成することにしました。彼らの環境例:

  • Parameters.Test.xml
  • Parameters.Staging.xml
  • Parameters.Live.xml

次に、パッケージ化してデプロイする前に、これらのファイルの1つをParameters.xmlにコピーするだけで、残りのパイプラインによって取得されます-完了です!

ところで、ある種のファイルアクセスの問題のように思われるため、単一のMSBuild.exe呼び出し内でparameters.xmlコピーとその後のクリーンアップを機能させるための一時的な問題が発生しました。ここで、詳細を説明します。

ファイルのバージョンがすでにターゲットに表示されていない限り、MSBuild.exeコピータスクが正しく機能しません

于 2013-03-23T21:55:39.960 に答える
1

質問に答えるために、コマンドラインのパラメーター化はMSBuildの問題ではありません。代わりに、外部ツールを利用する必要があります。たとえば、バッチファイルからmsbuildコマンドを実行する場合は、パラメーターをバッチファイルに渡し、環境ごとに異なるパラメーターを使用して実行できます。もう1つのアプローチは、TeamCityやVSTSなどのビルドシステムを使用し、それらのパラメーター化メカニズムを利用することです。VSTSまたはTFSに適合した場合、コマンドは次のようになります。

msbuild MySite_deploy.wdproj /target:MSDeployPublish /p:Configuration=Debug
/p:DeployOnBuild=True /p:MsDeployServiceUrl=$(IIsHostNameIp)
/p:AllowUntrustedCertificate=True /p:MSDeployPublishMethod=WMSvc
/p:CreatePackageOnPublish=True /p:UserName=$(IIsUserName) /p:Password=$(IIsPassword)
/p:DeployIisAppPath=$(IIsSite)

さらに、元のコマンドラインをクリーンアップすることをお勧めします。

  1. / p:targetと/ p:DeployTargetの両方を使用することは冗長です。それらのいずれか1つで十分です。また、/ p:WebPublishMethodに置き換えることもできます。
  2. / p:MSDeployServiceUrlの場合、DNS名またはIPのみを提供するだけで十分です。ポートとURLは、/ p:MSDeployPublishingMethod=WMSVCから自動的に取得されます。
  3. カスタムパラメータ/p:ServerURLは不明であり、どこにもマップされません。
于 2017-05-01T15:15:16.523 に答える
0
msbuild.exe {build-script.proj}  /property:{someParameter=someValue}

ビルドスクリプトでは、変数として$(someParameter)を使用できます

于 2013-03-22T05:01:14.977 に答える