मैं इसे ज्यादातर एक कस्टम msbuild स्क्रिप्ट के बिना काम कर रहा है। यहाँ प्रासंगिक टीम बिल्ड बिल्ड कॉन्फ़िगरेशन सेटिंग्स हैं:
विरूपण साक्ष्य पथ:% system.teamcity.build.workingDir% \ MyProject \ obj \ Debug \ Package \ पैकेजTmp
धावक का प्रकार: MSBuild (MSBuild फ़ाइलों के लिए धावक)
फ़ाइल पथ बनाएँ: MyProject \ MyProject.csproj
कार्य निर्देशिका: चेकआउट निर्देशिका के समान
MSBuild संस्करण: Microsoft .NET ढाँचा 4.0
MSBuild ToolsVersion: 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>
आप PropertyGroup टैग से SolutionName और ProjectName गुण भी निकाल सकते हैं और उन्हें msbuild को पास कर सकते हैं।
msbuild build.xml /p:Configuration=Deploy;SolutionName=MySolution;ProjectName=MyProject
अपडेट २
चूँकि यह प्रश्न अभी भी ट्रैफ़िक का एक अच्छा सौदा है, मुझे लगा कि यह मेरे वर्तमान स्क्रिप्ट के साथ मेरे उत्तर को अपडेट करने लायक था जो वेब डिप्लॉय (जिसे 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