ありがとうございます。私は、リモートXMLのマニフェストファイルにアセンブリメタデータを保持する私のMSBuildスクリプトで使用するカスタムターゲットのセットを書くことを選択しました。新しいTeamCityプロジェクトが作成されると、ビルドスクリプトはInitターゲットを呼び出して、未処理のテンプレートから新しいマニフェストファイルを作成します。
<Copy SourceFiles="@(ManifestTemplate)" DestinationFiles="@(ManifestTemplate->'$(ManifestFile)')" Condition="!Exists('$(ManifestFile)')" />
MSBuild Extentionsパックを使用して、マニフェストファイルのバージョン情報などの属性を読み込みます。
私は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)"/>
このファイルには、このようにチームシティーのビルド番号を無視して、バージョンや他のメタデータの永続性を処理します。 XMLメタデータファイルは集中管理されているので、Nuspec、AssemblyInfo、およびWiX Installerのメタデータを入力したり、サービスメッセージを通じてバージョンやその他の関連情報をTeamCityに渡したりすることができます。
パッケージの詳細が変更された場合、私のチームがファイルの内容をリモートで編集できるように、単純なMVC Webインターフェイスを追加しました。これで、著作権情報や特定のビルドプロジェクトのその他のメタデータなどの情報を更新する場所が1つだけになりました。また、私はTeamCityビルド構成へのアクセスを許可せずに、非devの人々にMVCサイトへのアクセス権を与えて、ブランディング情報を更新することもできます。
TeamCityにバージョンを中継するために使用されるサービスメッセージを除いて、TeamCityと結合されたサービスメッセージはほとんどありません。私はカスタムターゲットに機能を持たせ、別のビルド管理ソリューションに移行する機会を逃してTeamCityからスクリプトを削除するのが好きです。そのため、私はTeamCityプラグインを構築する時間を取ることを想定していませんが、近いうちにブログシリーズが出る可能性があります。
興味のある方は、より多くのコードと詳細な説明をお寄せください。
ご回答いただきありがとうございます。これは、依存する成果物を持つ同じビルド構成で正常に動作します。私がここで持っているのは、3つの異なるステップセットを持つ3つの別々のビルド構成です。私はバージョン番号を構成全体に保持し、ステップを構築する必要はありません。 –
さらに明確にするために、CIビルドはvcsのコミット時に行われ、たとえばバージョン2.19.123を追い出すべきです。マイナーリリースビルドは手動で実行され、バージョン2.20.0を追い出す必要があります。メジャーリリースビルドも手動で実行され、バージョン3.0.0を追い出す必要があります。このすべてが起こるためには、バージョンを保存して以降のビルドのために参照できる中心的な場所がなければなりません。 –
@DaveBaxter - あなたは私の答えを理解していません。私は同じビルド構成について話しているわけではありません。私は構成全体を話している。もう一度それを読んでみてください。 – manojlds