Çoğunlukla özel bir msbuild betiği olmadan çalıştım. İlgili TeamCity derleme yapılandırma ayarları şunlardır:
Yapay yollar:% system.teamcity.build.workingDir% \ MyProject \ obj \ Debug \ Package \ PackageTmp
Koşucu türü: MSBuild (MSBuild dosyaları için koşucu)
Derleme dosya yolu: MyProject \ MyProject.csproj
Çalışma dizini: ödeme dizini ile aynı
MSBuild sürümü: Microsoft .NET Framework 4.0
MSBuild Araçları Sürüm: 4.0
Çalışma platformu: x86
Hedefler: Paket
MSBuild.exe komut satırı parametreleri: / p: Configuration = Debug
Bu derlenir, paketlenir (web.config dönüşümü ile) ve çıktıyı yapay olarak kaydeder. Eksik olan tek şey, çıktıyı belirtilen bir konuma kopyalamaktır, ancak bu başka bir TeamCity derleme yapılandırmasında bir yapay nesne bağımlılığıyla veya bir msbuild komut dosyasıyla yapılabilir.
Güncelleme
İşte derleme, paketleme (web.config dönüşümü ile) ve çıktısı hazırlama sunucuma kopyalayacak bir msbuild betiği
<?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 ve ProjectName özelliklerini PropertyGroup etiketinden kaldırabilir ve msbuild'e iletebilirsiniz.
msbuild build.xml /p:Configuration=Deploy;SolutionName=MySolution;ProjectName=MyProject
Güncelleme 2
Bu soru hala iyi bir trafik aldığından, cevabımı Web Deploy'u (MSDeploy olarak da bilinir) kullanan mevcut komut dosyanızla güncellemeye değer olduğunu düşündüm .
<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'de env.Configuration
, env.ProjectName
ve adlı parametreler var env.DeployServiceUrl
. MSBuild koşucusu derleme dosyası yoluna sahiptir ve parametreler otomatik olarak iletilir (bunları Komut satırı parametrelerinde belirtmeniz gerekmez).
Komut satırından da çalıştırabilirsiniz:
msbuild build.xml /p:Configuration=Staging;ProjectName=MyProject;DeployServiceUrl=http://staging-server/MSDeployAgentService