J'ai eu la plupart du temps de travail sans un custom script msbuild. Voici les TeamCity construire des paramètres de configuration:
Artefact chemins: %système.teamcity.construire.workingDir%\Monprojet\obj\Debug\Package\PackageTmp
Type de coureur: MSBuild (Runner pour MSBuild fichiers)
Construire chemin d'accès du fichier: Monprojet\Monprojet.csproj
Répertoire de travail: la même que la caisse répertoire
MSBuild version: Microsoft .NET Framework 4.0
MSBuild ToolsVersion: 4.0
Exécution plate-forme: x86
Objectifs: Package
Paramètres de ligne de commande MSBuild.exe: /p:Configuration=Debug
Cela permettra de compiler, l'ensemble (avec web.config de transformation), et d'enregistrer le résultat en tant qu'objets. La seule chose qui manque est la copie de la sortie vers un emplacement spécifié, mais qui pourrait être fait soit dans un autre TeamCity de configuration de la compilation avec un artefact de dépendance ou avec un script msbuild.
Mise à jour
Voici un msbuild script de compilation, l'ensemble (avec web.config de transformation), et de copier la sortie de mon serveur de test
<?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>
Vous pouvez également supprimer le SolutionName et ProjectName propriétés de la PropertyGroup balise et de les transmettre à msbuild.
msbuild build.xml /p:Configuration=Deploy;SolutionName=MySolution;ProjectName=MyProject
Mise à jour 2
Étant donné que cette question n'en est toujours une bonne affaire de trafic, j'ai pensé qu'il valait la mise à jour de ma réponse avec mon script qui utilise le déploiement Web (également connu comme 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>
Dans TeamCity, j'ai les paramètres nommés env.Configuration
, env.ProjectName
et env.DeployServiceUrl
. MSBuild coureur a le bâtir chemin d'accès au fichier et les paramètres sont transmis automatiquement (vous n'avez pas à spécifier dans les paramètres de ligne de Commande).
Vous pouvez également l'exécuter à partir de la ligne de commande:
msbuild build.xml /p:Configuration=Staging;ProjectName=MyProject;DeployServiceUrl=http://staging-server/MSDeployAgentService