kkamegawa's weblog

Visual Studio,TFS,ALM,VSTS,DevOps関係のことについていろいろと書いていきます。Google Analyticsで解析を行っています

NuGet.org公開前にVSTSのパッケージ管理機能でテストする

はじめに

VSTS/TFS 2017にはNuGetパッケージサーバー機能が提供されています。VSTSの場合、最初の5名までは無料です。パブリックに公開するようなパッケージではnuget.orgを使えばいいのですが、内部でパッケージの開発&テストするときにはVSTSのパッケージサーバー機能を使うと便利です。

いくつかパッケージ公開していますが、いずれも確認用はVSTSでテストして、問題なければnuget.orgに公開しています。

フィード作成

f:id:kkamegawa:20161127084348p:plain Package Managementからフィードを作成します。用途に応じて好きに設定します。チームメンバーか、だれでも使えるか。

誰でもパッケージを追加できるか、ビルド時のみパッケージ追加か。要はVSTSもしくは外部リポジトリ(GitHubなど)にあるソースをビルドして、VSTSに取り込むという方法です。

最近追加された新機能でnpmもサポートされました。

ソースファイル

f:id:kkamegawa:20161127084344p:plain

NuGetパッケージはこんな感じで作っています。NuGetパッケージごとにリポジトリ作っておけばよかったかなと思いつつも、ぼっちプロジェクトなのでいいかなと。GitHubにもミラーしています。

github.com

github.com

ビルド

ビルドはdevブランチとmasterブランチの二つに対して設定しています。devにpushすると、VSTSのCIで、VSTSのパッケージ管理に登録されます。masterにpushすると、nuget.orgに公開しています。

f:id:kkamegawa:20161127084345p:plain

こちらがdevブランチをビルドした時のNuGet公開タスク設定。フィードにInternal NuGetとfeed URLを指定するだけでOKです。

f:id:kkamegawa:20161127084350p:plain

devブランチをビルドするときはパッケージ番号にRelease番号を付けています。これは同じバージョン番号でNuGetパッケージを上書きできないという仕様によるものです。正式版はセマンテックバージョンに従って手動で上げていきます。

正確にはこんな風にバージョン番号をファイルに記録しているので、この番号を変更するだけですが。

Python27Dev_NuGet/VERSION at master · kkamegawa/Python27Dev_NuGet · GitHub

f:id:kkamegawa:20161127084346p:plain

masterブランチのNuGet PublisherタスクではExternal NuGet Feed(nuget.org)を指定しています。これは外部サービス機能で事前にAPI KEYを登録しておきます。

f:id:kkamegawa:20161127084347p:plain

devブランチをビルドすると、こんな感じで、NuGetフィードがVSTSに登録されます。不要になったものはDeleteで消せます。Unlistすると、表示もされなくなります。

フィードに接続する

f:id:kkamegawa:20161127084349p:plain

Package Managementの右上にあるConnect to feedをクリックすると、VSおよび、npmで接続するための方法が表示されます。

Visual StudioではPackage source URLをこんな風に登録します。

f:id:kkamegawa:20161127120605p:plain

オプションのNuGetパッケージマネージャーにある、パッケージソースに登録します。これでInstall-packageコマンドレットで自動的に登録が可能になります。

npmの場合、npmに対応した認証マネージャーがあるので、connect to feedの画面でダウンロードしておいてください。

VSTS/TFSのPackage Manager機能は非公開および、内部でテスト用のパッケージ作るとき便利ですよ。