カスタムmsbuildスクリプトなしでほとんど動作しました。関連する TeamCity ビルド構成設定は次のとおりです。
アーティファクト パス: %system.teamcity.build.workingDir%\MyProject\obj\Debug\Package\PackageTmp
ランナーのタイプ: MSBuild (MSBuild ファイルのランナー)
ビルド ファイル パス: MyProject\MyProject.csproj
作業ディレクトリ: チェックアウト ディレクトリと同じ
MSBuild バージョン: Microsoft .NET Framework 4.0
MSBuild ツールバージョン: 4.0
実行プラットフォーム: x86
対象:パッケージ
MSBuild.exe へのコマンド ライン パラメーター: /p:Configuration=Debug
これにより、コンパイル、パッケージ化 (web.config 変換を使用) が行われ、出力がアーティファクトとして保存されます。欠けている唯一のことは、指定された場所に出力をコピーすることですが、それはアーティファクトの依存関係を持つ別の TeamCity ビルド構成または msbuild スクリプトを使用して行うことができます。
アップデート
これは、コンパイル、パッケージ化 (web.config 変換を使用)、および出力をステージング サーバーにコピーする msbuild スクリプトです。
<?xml version="1.0" encoding="utf-8" ?>
<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup>
<Configuration Condition=" '$(Configuration)' == '' ">Release</Configuration>
<SolutionName>MySolution</SolutionName>
<SolutionFile>$(SolutionName).sln</SolutionFile>
<ProjectName>MyProject</ProjectName>
<ProjectFile>$(ProjectName)\$(ProjectName).csproj</ProjectFile>
</PropertyGroup>
<Target Name="Build" DependsOnTargets="BuildPackage;CopyOutput" />
<Target Name="BuildPackage">
<MSBuild Projects="$(SolutionFile)" ContinueOnError="false" Targets="Rebuild" Properties="Configuration=$(Configuration)" />
<MSBuild Projects="$(ProjectFile)" ContinueOnError="false" Targets="Package" Properties="Configuration=$(Configuration)" />
</Target>
<Target Name="CopyOutput">
<ItemGroup>
<PackagedFiles Include="$(ProjectName)\obj\$(Configuration)\Package\PackageTmp\**\*.*"/>
</ItemGroup>
<Copy SourceFiles="@(PackagedFiles)" DestinationFiles="@(PackagedFiles->'\\build02\wwwroot\$(ProjectName)\$(Configuration)\%(RecursiveDir)%(Filename)%(Extension)')"/>
</Target>
</Project>
SolutionName プロパティと ProjectName プロパティを PropertyGroup タグから削除して、msbuild に渡すこともできます。
msbuild build.xml /p:Configuration=Deploy;SolutionName=MySolution;ProjectName=MyProject
更新 2
この質問にはまだ多くのトラフィックが寄せられているため、Web Deploy (MSDeploy とも呼ばれます) を使用する現在のスクリプトで回答を更新する価値があると考えました。
<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003" DefaultTargets="Build" ToolsVersion="4.0">
<PropertyGroup>
<Configuration Condition=" '$(Configuration)' == '' ">Release</Configuration>
<ProjectFile Condition=" '$(ProjectFile)' == '' ">$(ProjectName)\$(ProjectName).csproj</ProjectFile>
<DeployServiceUrl Condition=" '$(DeployServiceUrl)' == '' ">http://staging-server/MSDeployAgentService</DeployServiceUrl>
</PropertyGroup>
<Target Name="VerifyProperties">
<!-- Verify that we have values for all required properties -->
<Error Condition=" '$(ProjectName)' == '' " Text="ProjectName is required." />
</Target>
<Target Name="Build" DependsOnTargets="VerifyProperties">
<!-- Deploy using windows authentication -->
<MSBuild Projects="$(ProjectFile)"
Properties="Configuration=$(Configuration);
MvcBuildViews=False;
DeployOnBuild=true;
DeployTarget=MSDeployPublish;
CreatePackageOnPublish=True;
AllowUntrustedCertificate=True;
MSDeployPublishMethod=RemoteAgent;
MsDeployServiceUrl=$(DeployServiceUrl);
SkipExtraFilesOnServer=True;
UserName=;
Password=;"
ContinueOnError="false" />
</Target>
</Project>
TeamCity にはenv.Configuration
、env.ProjectName
とという名前のパラメーターがありますenv.DeployServiceUrl
。MSBuild ランナーにはビルド ファイル パスがあり、パラメーターは自動的に渡されます (コマンド ライン パラメーターで指定する必要はありません)。
コマンドラインから実行することもできます:
msbuild build.xml /p:Configuration=Staging;ProjectName=MyProject;DeployServiceUrl=http://staging-server/MSDeployAgentService