しばやん雑記

Azure とメイドさんが大好きなフリーランスのプログラマーのブログ

Azure Artifacts を使って自前 NuGet サーバー運用を捨てる

最近 Azure DevOps 周りを弄ってますが、あまり話として Azure Artifacts について聞いた覚えがないので軽く確認しておきました。単なるプライベート NuGet リポジトリではないのは確かです。

とりあえずドキュメントは参照しておきますが、思ったより機能は多くないです。

NuGet 以外にも npm / Maven / Gradle / pip にも対応しています。Azure Artifacts にフィードを 1 つ作れば、対応している全てのパッケージマネージャに対応できるのが利点です。

雑に機能と特徴をまとめてみると以下の通りでしょうか。

  • メジャーなパッケージマネージャに対応
  • 複数のパッケージソースをまとめて管理できる
    • Azure Artifacts フィード自体もパッケージソースとして追加できる
  • Organization 内のプロジェクトで共有される
  • フィードとして公開するパッケージやバージョンを管理可能

あくまでも組織やプロジェクト内部で使うのが目的のようなので、MyGet みたいにパブリックなフィードを作ることは出来ないようです。なので置き換えるようなサービスではないです。

作成したフィードを実際に開発で使うためのコマンドは Connect to feed から確認出来ます。

f:id:shiba-yan:20181125201014p:plain

プレビュー扱いですが Universal Package としてどんなフォーマットでも管理できるようにもなっています。

実際に使うためには VSTS の CLI が必要みたいなので少し面倒ですが、Azure Pipelines などでの成果物を何らかのバージョン管理をしつつ扱いたい場合には有用でしょう。

この後は NuGet に関してのみ書いてますが、他のリポジトリでも大体は同じです。

パッケージのプッシュ / 復元

Azure Pipelines 内では Azure Artifacts のフィードを使ってパッケージのプッシュと復元が簡単に行えます。

新しく NuGet のタスクを追加して Command を push や restore にすると、よい感じにデフォルトの処理が追加されます。push の場合は *.nupkg を自動で探してプッシュしてくれます。

f:id:shiba-yan:20181125023037p:plain

プッシュ先はドロップダウンで組織内のフィードが一覧表示されるので選ぶだけです。

restore も同様にデフォルトの設定で良いですが、フィードの設定で Upstream を使うようになっている場合には、nuget.org を使わないように変更しておいても良さそうです。

f:id:shiba-yan:20181125022726p:plain

一番使うことが多いのは、この二つだと思います。なのでこれだけ覚えておけば大体 OK です。

Upstream の扱い

フィードの作成時に nuget.org や npmjs.com をパッケージソースとして使うように設定すると、Azure Artifacts がパッケージ取得のリクエストを透過的に処理して、パッケージ自体をフィードに保存するようになります。キャッシュに近い形で扱うことが出来ます。

デフォルトのソースは Feed の設定から追加や削除が行えます。複数のパブリックソースは npm しか行えないようですが、Azure Artifacts のフィードは問題なく追加できるようです。

f:id:shiba-yan:20181126004620p:plain

ビルドに必要なパッケージを Azure Artifacts に保存できるので、NuGet や npm に障害が発生した場合や必要なパッケージが削除された場合でも、バージョンが変わらない限りはビルドを壊すことはありません。

Azure Blog に Deep dive が公開されているので、見ておくと良さそうな感じです。

ネットワーク的に有利なはずなので、ビルドの速度改善に繋がるのではと期待しましたが、試した限りでは特に差は出なかったです。この辺りは少し残念でした。

Upstream パッケージの管理

Azure Artifacts が保存しているパッケージは分かりやすく一覧表示されます。パッケージソースで絞り込むことも出来るので、NuGet / npm を使っていても安心。

f:id:shiba-yan:20181125022604p:plain

保存されているバージョンも確認出来ます。NuGet Gallery よりも扱いやすい UI だと思います。

f:id:shiba-yan:20181125194825p:plain

パッケージやバージョンは簡単に削除やリストからの非表示も出来ます。ここから選択したバージョンを後述する View に追加することも出来ます。

面白そうなのが新しいバージョンが出た時に通知する機能です。

f:id:shiba-yan:20181126010856p:plain

実際にどういうタイミングで通知されるのか分からないですが、試してみたい感じです。

View の使いどころ

正直、いまいち良いユースケースが理解できないのですが、公式的にはちゃんとテストして互換性のあるバージョンだけを利用するために、Release や Prerelease といった View を使っていく方向らしいです。

f:id:shiba-yan:20181126013558p:plain

大きなチームでの開発時に好き勝手にパッケージを入れられたり、互換性を確認出来ていないバージョンにアップデートされることは防げますが、開発者を信用しなさすぎという気もして微妙な気持ちです。

むしろ最近はパッケージがアップデート全くされないことの方が多いと思うので。