Tôi đã nhận nó chủ yếu làm việc mà không có một kịch bản msbuild tùy chỉnh. Dưới đây là các cài đặt cấu hình bản dựng TeamCity có liên quan:
Đường dẫn giả tạo:% system.teamcity.build. WorkDir% \ MyProject \ obj \ Debug \ Package \ PackageTmp
Loại người chạy: MSBuild (Người chạy cho các tệp MSBuild)
Xây dựng đường dẫn tệp: MyProject \ MyProject.csproj
Thư mục làm việc: giống như thư mục thanh toán
Phiên bản MSBuild: Microsoft .NET Framework 4.0
Công cụ MSBuildVersion: 4.0
Chạy nền tảng: x86
Mục tiêu: Gói
Tham số dòng lệnh tới MSBuild.exe: / p: Cấu hình = Gỡ lỗi
Điều này sẽ biên dịch, gói (với chuyển đổi web.config) và lưu kết quả đầu ra dưới dạng các tạo phẩm. Điều duy nhất còn thiếu là sao chép đầu ra vào một vị trí được chỉ định, nhưng điều đó có thể được thực hiện trong một cấu hình xây dựng TeamCity khác với sự phụ thuộc giả tạo hoặc với tập lệnh msbuild.
Cập nhật
Đây là tập lệnh msbuild sẽ biên dịch, gói (với chuyển đổi web.config) và sao chép đầu ra vào máy chủ dàn của tô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>
Bạn cũng có thể xóa các thuộc tính SolutionName và ProjectName khỏi thẻ Propertygroup và chuyển chúng cho msbuild.
msbuild build.xml /p:Configuration=Deploy;SolutionName=MySolution;ProjectName=MyProject
Cập nhật 2
Vì câu hỏi này vẫn nhận được nhiều lưu lượng truy cập, tôi nghĩ rằng nó đáng để cập nhật câu trả lời của tôi với tập lệnh hiện tại của tôi sử dụng Triển khai Web (còn được gọi là 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>
Trong TeamCity, tôi có các thông số được đặt tên env.Configuration
, env.ProjectName
và env.DeployServiceUrl
. Trình chạy MSBuild có đường dẫn tệp xây dựng và các tham số được truyền tự động (bạn không phải chỉ định chúng trong tham số dòng lệnh).
Bạn cũng có thể chạy nó từ dòng lệnh:
msbuild build.xml /p:Configuration=Staging;ProjectName=MyProject;DeployServiceUrl=http://staging-server/MSDeployAgentService