제안 해 주셔서 감사합니다. 원격 XML "매니페스트"파일에 어셈블리 메타 데이터를 유지 관리하는 내 MSBuild 스크립트와 함께 사용할 사용자 지정 대상 집합을 작성했습니다. 새로운 TeamCity 프로젝트가 생성되면, 빌드 스크립트는 초기화되지 않은 템플릿으로부터 새로운 매니 페스트 파일을 생성하는 Init 타겟을 호출합니다.
<Copy SourceFiles="@(ManifestTemplate)" DestinationFiles="@(ManifestTemplate->'$(ManifestFile)')" Condition="!Exists('$(ManifestFile)')" />
MSBuild Extentions 팩을 사용하여 매니페스트 파일의 버전 정보와 같은 특성을 읽습니다.
<MSBuild.ExtensionPack.Xml.XmlFile TaskAction="ReadElementText" File="$(ManifestFile)" XPath="/Package/Version/Major">
<Output PropertyName="PackageVersionMajor" TaskParameter="Value"/>
</MSBuild.ExtensionPack.Xml.XmlFile>
TeamCity 빌드 구성을 CI, 테스트, 마이너 릴리스 및 메이저 릴리스로 구분하여 각기 다른 이벤트를 트리거합니다. 내 프로젝트 빌드 스크립트의 해당 대상에서 DependsOnTargets
특성에 새 대상을 추가하여 사용자 지정 대상을 호출하여 적절한 버전 번호를 업데이트하고이를 매니페스트 파일에 저장합니다.
<Target Name="Test" DependsOnTargets="IntializeBuildProject;Build-UpdateVersion-Build">
<MSBuild Projects="$(SolutionFile)" Targets="Rebuild" Properties="Configuration=$(Configuration)" />
<TeamCitySetBuildNumber BuildNumber="$(PackageVersion)" />
버전 업데이트를 처리 할 수있는 사용자 정의 대상의 코드는 :
<MSBuild.ExtensionPack.Science.Maths TaskAction="Add" Numbers="$(PackageVersionBuild);1">
<Output PropertyName="PackageVersionBuild" TaskParameter="Result"/>
</MSBuild.ExtensionPack.Science.Maths>
<MSBuild.ExtensionPack.Xml.XmlFile TaskAction="UpdateElement" File="$(ManifestFile)" XPath="/Package/Version/Build" InnerText="$(PackageVersionBuild)"/>
이 파일은 버전에 따라서 인 TeamCity 빌드 번호를 무시하고 다른 메타 데이터의 지속성을 처리합니다. XML 메타 데이터 파일은 중앙 집중식이므로이 값을 사용하여 Nuspec, AssemblyInfo 및 WiX Installer 메타 데이터를 채울뿐만 아니라 버전 및 기타 관련 정보를 서비스 메시지를 통해 TeamCity에 다시 전달할 수 있습니다.
패키지 정보가 변경된 경우 팀에서 원격으로 파일 콘텐츠를 편집 할 수 있도록 간단한 MVC 웹 인터페이스를 추가했습니다. 이제는 주어진 빌드 프로젝트에 대한 저작권 정보 및 기타 메타 데이터를 업데이트하는 단일 장소가 있습니다. 또한 비 Dev 팀 구성원에게 내 TeamCity 빌드 구성에 대한 액세스를 허용하지 않고 브랜딩 정보를 업데이트하기 위해 MVC 사이트에 액세스 할 수 있습니다.
TeamCity로 버전을 릴레이하는 데 사용되는 서비스 메시지를 제외하면 TeamCity와 결합 된 서비스 메시지가 거의 없습니다. 필자는 다른 빌드 관리 솔루션으로 이동할 기회가있을 때 TeamCity에서 제거 된 스크립트를 빌드하고 사용자 지정 대상에 기능을 추가하는 것을 좋아합니다. 이런 이유로 TeamCity 플러그인을 구축하는 데 시간을 할애하지는 않지만 블로그 시리즈가 곧 출시 될 수 있습니다.
관심있는 모든 사용자에게 더 많은 코드와 자세한 설명을 제공해 드리겠습니다.
답변 해 주셔서 감사합니다. 이것은 종속 아티팩트가있는 동일한 빌드 구성에서 정상적으로 작동합니다. 여기서 내가 가진 것은 세 가지 단계로 구성된 세 가지 빌드 구성입니다. 빌드 단계가 아닌 구성 전반에 걸쳐 버전 번호를 유지할 수 있어야합니다. –
더 명확히하기 위해, CI 빌드는 vcs 커밋시 발생할 것이며 버전 2.19.123을 예를 들어 제거해야합니다. 마이너 릴리스 빌드는 수동으로 실행되며 버전 2.20.0을 쫓아 내야합니다. 주요 릴리즈 빌드도 수동으로 실행되며 버전 3.0.0을 제거해야합니다. 이 모든 일이 일어나기 위해서는 후속 빌드를 위해 버전을 저장하고 참조 할 수있는 중심적인 장소가 있어야합니다. –
@DaveBaxter - 내 대답을 이해하지 못했습니다. 나는 같은 빌드 구성에 대해 말하는 것이 아닙니다. 나는 구성을 가로 질러 이야기하고있다. 다시 읽으십시오. – manojlds