最近 Azure DevOps 周りを弄ってますが、あまり話として Azure Artifacts について聞いた覚えがないので軽く確認しておきました。単なるプライベート NuGet リポジトリではないのは確かです。
とりあえずドキュメントは参照しておきますが、思ったより機能は多くないです。
NuGet 以外にも npm / Maven / Gradle / pip にも対応しています。Azure Artifacts にフィードを 1 つ作れば、対応している全てのパッケージマネージャに対応できるのが利点です。
雑に機能と特徴をまとめてみると以下の通りでしょうか。
- メジャーなパッケージマネージャに対応
- 複数のパッケージソースをまとめて管理できる
- Azure Artifacts フィード自体もパッケージソースとして追加できる
- Organization 内のプロジェクトで共有される
- フィードとして公開するパッケージやバージョンを管理可能
あくまでも組織やプロジェクト内部で使うのが目的のようなので、MyGet みたいにパブリックなフィードを作ることは出来ないようです。なので置き換えるようなサービスではないです。
作成したフィードを実際に開発で使うためのコマンドは Connect to feed から確認出来ます。
プレビュー扱いですが Universal Package としてどんなフォーマットでも管理できるようにもなっています。
実際に使うためには VSTS の CLI が必要みたいなので少し面倒ですが、Azure Pipelines などでの成果物を何らかのバージョン管理をしつつ扱いたい場合には有用でしょう。
この後は NuGet に関してのみ書いてますが、他のリポジトリでも大体は同じです。
パッケージのプッシュ / 復元
Azure Pipelines 内では Azure Artifacts のフィードを使ってパッケージのプッシュと復元が簡単に行えます。
新しく NuGet のタスクを追加して Command を push や restore にすると、よい感じにデフォルトの処理が追加されます。push の場合は *.nupkg を自動で探してプッシュしてくれます。
プッシュ先はドロップダウンで組織内のフィードが一覧表示されるので選ぶだけです。
restore も同様にデフォルトの設定で良いですが、フィードの設定で Upstream を使うようになっている場合には、nuget.org を使わないように変更しておいても良さそうです。
一番使うことが多いのは、この二つだと思います。なのでこれだけ覚えておけば大体 OK です。
Upstream の扱い
フィードの作成時に nuget.org や npmjs.com をパッケージソースとして使うように設定すると、Azure Artifacts がパッケージ取得のリクエストを透過的に処理して、パッケージ自体をフィードに保存するようになります。キャッシュに近い形で扱うことが出来ます。
デフォルトのソースは Feed の設定から追加や削除が行えます。複数のパブリックソースは npm しか行えないようですが、Azure Artifacts のフィードは問題なく追加できるようです。
ビルドに必要なパッケージを Azure Artifacts に保存できるので、NuGet や npm に障害が発生した場合や必要なパッケージが削除された場合でも、バージョンが変わらない限りはビルドを壊すことはありません。
Azure Blog に Deep dive が公開されているので、見ておくと良さそうな感じです。
ネットワーク的に有利なはずなので、ビルドの速度改善に繋がるのではと期待しましたが、試した限りでは特に差は出なかったです。この辺りは少し残念でした。
Upstream パッケージの管理
Azure Artifacts が保存しているパッケージは分かりやすく一覧表示されます。パッケージソースで絞り込むことも出来るので、NuGet / npm を使っていても安心。
保存されているバージョンも確認出来ます。NuGet Gallery よりも扱いやすい UI だと思います。
パッケージやバージョンは簡単に削除やリストからの非表示も出来ます。ここから選択したバージョンを後述する View に追加することも出来ます。
面白そうなのが新しいバージョンが出た時に通知する機能です。
実際にどういうタイミングで通知されるのか分からないですが、試してみたい感じです。
View の使いどころ
正直、いまいち良いユースケースが理解できないのですが、公式的にはちゃんとテストして互換性のあるバージョンだけを利用するために、Release や Prerelease といった View を使っていく方向らしいです。
大きなチームでの開発時に好き勝手にパッケージを入れられたり、互換性を確認出来ていないバージョンにアップデートされることは防げますが、開発者を信用しなさすぎという気もして微妙な気持ちです。
むしろ最近はパッケージがアップデート全くされないことの方が多いと思うので。