Azure Artifacts のパッケージ グラフ
Azure DevOps Services | Azure DevOps Server 2022 - Azure DevOps Server 2019
パッケージをリリースするときは、アップストリーム ソースからパッケージを使用して、そのパッケージのすべての依存関係をフィードで使用できるようにすることが重要です。 アップストリーム ソースからパッケージを使用すると、コピーがフィードに保存されます。 これにより、アップストリーム ソースにアクセスできなくなった場合でも、コピーは引き続きユーザーとフィード コンシューマーの両方が使用できるようになります。
アップストリームが使用可能なパッケージのセットを構築する方法
Azure Artifacts フィードにはアップストリームとして他のフィードを含めることができるので、アップストリーム ソースのサイクルを作成する可能性があります。この場合、フィード A のアップストリームは B をフィードし、アップストリームは C をフィードし、最終的には C アップストリームをフィード A に送り返します。このようなサイクルが適切に管理されていない場合、パッケージ要求に関する問題が発生し、ユーザーがフィード A からパッケージを要求し、次に A が B から要求し、B が C から要求し、最後に C が A に要求してループを形成する無限ループが作成される可能性があります。
アップストリーム ソースは、このような状況を防ぐために設計されています。 フィードは、アップストリーム ソースからパッケージを検索すると、そのアップストリーム ソース用に構成されたビューでパッケージを受け取ります。 つまり、ビューは読み取り専用であるため、フィード A にクエリを実行しても、C (A - B ->> C) をフィードする推移的なクエリはトリガーされません。 その結果、フィード A は、以前にユーザーによって B に保存された C のパッケージにアクセスできますが、C で使用できるパッケージの完全なセットにはアクセスできません。
これにより、ローカル パッケージが完全な依存関係グラフを表していることを確認する責任がフィード B に配置されます。 これにより、別のフィードのアップストリーム ソースを介して B のパッケージを使用するユーザーは、問題なくグラフを正常に解決し、目的 の B パッケージをインストールできます。
例: 使用可能なパッケージのセットを構築する
Fabrikam、Contoso、AdventureWorks の 3 つのフィードについて考えてみましょう。 この図では、アップストリーム ソースを紹介する中で、Fabrikam フィードで使用可能なパッケージを確認します。
当初、Fabrikam にはアップストリーム ソースがないため、Fabrikam に接続されているユーザーは Widgets パッケージのバージョン 1.0.0 と 2.0.0 のみをインストールできます。 同様に、Contoso にはアップストリーム ソースがないため、Contoso に接続されているユーザーは、Gizmos パッケージのバージョン 1.0.0 と 3.0.0 のみをインストールするように制限されます。 これは AdventureWorks フィードにも当てはまります。接続されているユーザーは、ガジェット パッケージのバージョン 1.0.0 と 2.0.0 またはバージョン 1.0.0 の Things パッケージのみをインストールできます。
次に、Contoso がアップストリーム ソースとして AdventureWorks を追加するシナリオを見てみましょう。 ユーザーが Contoso に接続されると、より広範なパッケージにアクセスできます。 任意のバージョンのギズモ、ガジェット、またはモノをインストールできます。 たとえば、ユーザーが Gadgets@2.0.0 をインストールした場合、この特定のパッケージ バージョンは、AdventureWorks へのリンクと共に Contoso に保存されます。
次に、Fabrikam フィードがアップストリーム ソースとして Contoso を追加する状況を考えてみましょう。 Fabrikam に接続されているユーザーは、任意のバージョンのウィジェット、任意のバージョンの Gizmos をインストールできますが 、保存された バージョンのガジェット (2.0.0) のみをインストールできます。
これらのパッケージ バージョンは Contoso ユーザーによって Contoso に保存されていないため、ユーザーはバージョン 1.0.0 のガジェットまたは任意のバージョンの Things をインストールできません。