Я здебільшого працював без власного скрипта msbuild. Ось відповідні налаштування конфігурації збірки TeamCity:
Шляхи артефактів:% system.teamcity.build.workingDir% \ MyProject \ obj \ Debug \ Package \ PackageTmp
Тип бігуна: MSBuild (Бігун для файлів MSBuild)
Шлях до файлу збірки: MyProject \ MyProject.csproj
Робочий каталог: те саме, що і каталог замовлення
Версія MSBuild: Microsoft .NET Framework 4.0
MSBuild Tools Версія: 4.0
Запустити платформу: x86
Цілі: Пакет
Параметри командного рядка для MSBuild.exe: / p: Конфігурація = Налагодження
Це скомпілює, упакує (із перетворенням web.config) та збереже вихідні дані як артефакти. Єдине, чого не вистачає - це копіювання вихідних даних у вказане місце, але це можна зробити або в іншій конфігурації збірки TeamCity із залежністю артефакту, або за допомогою скрипта msbuild.
Оновлення
Ось скрипт msbuild, який буде компілювати, упаковувати (із перетворенням web.config) та копіювати вихідні дані на мій проміжний сервер
<?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">
<Error Condition=" '$(ProjectName)' == '' " Text="ProjectName is required." />
</Target>
<Target Name="Build" DependsOnTargets="VerifyProperties">
<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