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 をインストールできません。