TFVC のラベル名をファイルのバージョンに埋め込んで、Nuget リリースまでする
Git 全盛の時代、TFVC を使っており、かつラベル運用をしているなんて珍しいかもしれませんが、
必要になりそうだったので、作ってみました。
Azure DevOps Service 使ってます。
やったこと
ラベル名を指定して、Build -> Nuget リリース を行う際に以下を実行。
- 製品バージョンにはラベル名を埋め込む
- ファイルバージョンは自動インクリメント方式 *1 を自前で設定(同一のビルドジョブはすべて同じとしたい)
- Nuget バージョン に加工して反映する
例えば、以下のようになります。
内容 | 設定値 |
---|---|
ラベル名 | 1.0.Lib.20200131 |
製品バージョン | 1.0.0+1.0.Lib.20200131 |
ファイルバージョン | 1.0.7355.22838 |
Nuget バージョン | 1.0.20200131 |
ラベル名は任意の文字列を設定できます。
製品・Nugetバージョンは決められたバージョン記法があるため、ラベル名と同様にして Patch バージョン部分に文字を入れることができません。
ラベル名もそれらに合わせたらよいのですが、今回はあえてラベル名に文字を入れてます。
Build 設定
詳細な設定手順は省略します。設定後の Yaml ファイルは以下です。
TFVC の場合は Yaml を直接インポートできない?ので、UI からポチポチやっていきます。
TFVCのラベル名をファイルのバージョンに埋め込んで、Nugetリリースまでする
ポイントは、中盤当たりにある PowerShell です。
ソース取得からビルド前までに csproj ファイルを書き換えています。
加工すれば、csproj ファイルで設定できる他の情報も書き換え可能です。
余談ですが、PowerShell で C# のコード書けるの便利ですね!
Release 設定
Yaml ファイルは以下です。Nuget に Push しているだけですが載せておきます。
TFVCのラベル名をファイルのバージョンに埋め込んで、Nugetリリースまでする(Release)
あと、Release 側のトリガー設定をするのをよく忘れるので、画面ショットを貼っておきます。
実行
Build 画面よりキューを入れます。
ラベルを指定する場合は、Source version に L
+ ラベル名で設定します。
実行中の画面にラベル名が表示されます。
Nuget の Push まで成功すると、Artifacts 画面から指定した Nuget バージョンで作成されているのが確認できます。
Nuget 参照する
適当にプロジェクトを作って、Nuget 参照してみます。
右上のパッケージソースを変更するのを忘れないようにします。(事前設定が必要)
落ちてきた DLL のプロパティを見ると、設定されているのが確認できました。
*1:よくやるコレ⇒ [assembly: AssemblyFileVersion("1.0.*")]