나는 주로 사용자 정의 msbuild 스크립트없이 작동합니다. 관련 TeamCity 빌드 구성 설정은 다음과 같습니다.
이슈 경로 : % system.teamcity.build.workingDir % \ MyProject \ obj \ Debug \ Package \ PackageTmp
러너 유형 : MSBuild (MSBuild 파일의 러너)
빌드 파일 경로 : MyProject \ MyProject.csproj
작업 디렉토리 : 체크 아웃 디렉토리와 동일
MSBuild 버전 : Microsoft .NET Framework 4.0
MSBuild 도구 버전 : 4.0
플랫폼 실행 : x86
대상 : 패키지
MSBuild.exe에 대한 명령 줄 매개 변수 : / p : Configuration = Debug
컴파일하고 (web.config 변환으로) 출력을 아티팩트로 저장합니다. 유일하게 누락 된 것은 출력을 지정된 위치에 복사하는 것입니다. 그러나 이슈에 종속 된 다른 TeamCity 빌드 구성 또는 msbuild 스크립트를 사용하여 수행 할 수 있습니다.
최신 정보
다음은 컴파일하고 (web.config 변환으로) 패키지를 내 스테이징 서버로 복사하는 msbuild 스크립트입니다.
<?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
업데이트 2
이 질문은 여전히 트래픽의 좋은 거래를 얻을 수 있기 때문에, 나는 그것을 사용하는 내 현재 스크립트 내 대답을 업데이트하는 가치라고 생각 웹 배포를 (또한 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