銀の光と碧い空

クラウドなインフラとC#なアプリ開発の狭間にいるエンジニアの日々

VSTS でPrivate Nuget リポジトリを作成する

先日こんな発表がありました。

Announcing Package Management support for VSO/TFS - Microsoft Application Lifecycle Management - Site Home - MSDN Blogs

要はVSTSのサービスとしてPrivateなNuget リポジトリを提供し、かつその認証・認可にVSTSのユーザー・グループもしくはAzure Active Direcotryが使える、というものです。これは今までのNuget リポジトリではできないことでした。なぜかというと、Nuget クライアント側はBASICもしくはNTLM認証しか対応していなかったためです。Nuget 3.3 になってCredential Providerをサポートしたため、Providerを作成すればおそらく認証・認可の仕組みを自前で構築できますが、SaaSとしてすべて準備された状態ですぐに使える、AADで既存の認証・認可をそのまま使える、古いNugetクライアントやVisual Studio Pluginも用意されている、といった点がVSTSの機能を使うメリットになります。

Credential Providers

というわけで今回はVSTSのこの機能の使い方を紹介します。

まず準備として、当然ながらVSTSを用意します。Nugetの認証にMicrosoftアカウントを使うかAADを使うかは実はこの時点で決まっており、AADを使う場合にはその組織の属するユーザーでログインした状態でVSTSを作成し、組織のAADとリンクさせておく必要があります。実際の手順はこのあたりに詳しく書いてあります*1。また現時点では、VSTSはUSリージョンに作成しないとPrivate Nugetリポジトリは利用できないようです*2

Sign up for Visual Studio Team Services

なお、AADとリンクさせている場合、Nugetの認証はその組織に属するユーザーに限定されます*3。VSTSを作成したら下記ページからPrivate Nugetが使えるようになるextensionをインストールします。

Visual Studio Marketplace

追加したら、適当なVSTSのプロジェクトを開くと、Package>Feedsというリンクが追加されます。プロジェクトの中に表示されますが、作成してFeed(Nuget リポジトリサーバー)はプロジェクト間で共有されました。Newボタンを押して、名前と説明、そのFeedの読み取り権限とパッケージの追加権限を指定します。

f:id:tanaka733:20151210004326p:plain

作成したら、次のような画面が表示され、Nugetクライアントごとに追加の手順が書いてあります。Visual Studio 2015 Update1 以降の場合は次のように普通にNugetソースを追加するだけです。

f:id:tanaka733:20151210004936p:plain

追加した後、初回のアクセス時にはVisual Studioのライセンス認証などで表示されるポップアップが出てきて、Microsoftアカウントでの認証を求められるので認証します。AADにリンクしたVSTSの場合は企業や学校のアカウントとして認証します。

それより前のVisual StudioやNugetクライアントの場合は専用のユーザー/パスワードを生成します。この画面でGenerate Keyをクリックします。

f:id:tanaka733:20151210005103p:plain

するとパスワードが生成されるので、このコマンドをそのまま実行します。Nuget 3系と2系はソースURLが違うため、パスワードも異なります。

f:id:tanaka733:20151210005115p:plain

非常にお手軽にセキュアなPrivate Nuget リポジトリが使えるようになりました。

*1:が、Azure Portalまわりのスクリーンショットが更新に追いついていない時があります

*2:記述はあるが実際にそうかは未確認

*3:そこからさらにユーザー・グループで制限することは可能