アップストリーム ソースとは
Azure DevOps Services | Azure DevOps Server 2022 - Azure DevOps Server 2019
Azure Artifacts アップストリーム ソースを使用すると、開発者は、発行したパッケージや、外部フィードや NuGet.org、npmjs.com などのパブリック レジストリからインストールされたものなど、さまざまなソースのパッケージを 1 つのフィードに簡単に格納できます。 アップストリーム ソースが有効になると、アップストリーム ソースからインストールされたすべてのパッケージがフィードに自動的に保存されます。
注
アップストリームからパッケージを保存するには、 Feed およびアップストリーム 閲覧者 (コラボレーター) ロール以上が必要です。 詳細については、「 管理のアクセス許可 を参照してください。
アップストリーム ソースを使用する理由
アップストリーム ソースを有効にすると、1 つのフィード内で製品の依存関係を管理するためのいくつかの利点があります。
簡易: すべてのパッケージを 1 つのフィードに格納すると、NuGet.config、npmrc、settings.xmlなどの構成ファイルが簡略化されます。 構成ファイルにフィードが 1 つしかないので、エラーの可能性を減らし、セットアップを合理化できます。
一貫性のあるビルド: フィードは、定義された順序でパッケージ要求を解決し、より予測可能で信頼性の高いビルドを保証します。
パッケージの整合性: フィードにはアップストリーム ソースから保存されたパッケージに関するメタデータが保持されるため、その信頼性を確認し、コピーや悪意のある可能性のあるバージョンではなく、元のバージョンを使用していることを確認できます。
信頼性: アップストリーム ソースからインストールされたパッケージは、フィードに自動的に保存されます。 これにより、メンテナンスやその他の問題によってアップストリーム ソースが使用できなくなった場合でも、継続的なアクセスが保証されるため、自信を持って開発と構築を続けることができます。
パッケージ コンシューマーのベスト プラクティス
パッケージ コンシューマーとしてのアップストリーム ソースの利点を最大限に活用するには、次のベスト プラクティスに従います。
1. 構成ファイルで 1 つのフィードを使用する
フィードが 決定論的な復元を提供するには、構成ファイル (nuget.config や npmrc など) がアップストリーム ソースが有効になっている 1 つのフィードのみを参照していることを確認します。
例:
registry=https://pkgs.dev.azure.com/fabrikam/_packaging/FabrikamFiber/npm/registry/ always-auth=true
<packageSources> <clear /> <add key="FabrikamFiber" value="https://pkgs.dev.azure.com/fabrikam/_packaging/FabrikamFiber/nuget/v3/index.json" /> </packageSources>
注記
NuGet は複数の 構成ファイルをコンパイル 適用するオプションの完全なセットを決定します。
<clear />
を使用すると、上位レベルの構成ファイルで指定されている他のすべてのパッケージ ソースが無視されます。
2. アップストリーム ソースを意図的に注文する
NuGet.org や npmjs.com などのパブリック レジストリのみを使用している場合、アップストリーム ソースの順序は関係ありません。 フィードへの要求は、「検索順序」セクションで説明されている順序に従います。
ただし、フィードとパブリック レジストリの組み合わせなど、複数のソースを管理する場合、各アップストリーム ソースはフィードの構成設定で定義されている順序で検索されます。 この場合は、アップストリーム ソースの一覧の最初にパブリック レジストリを配置することをお勧めします。
一部の固有のシナリオでは、セキュリティ上の問題に対処したり、機能を強化したり、パブリック リポジトリから直接取得するのではなく、パッケージを内部的に再構築する必要がある特定の内部要件を満たすために、オープンソース ソフトウェア (OSS) パッケージを変更する組織もあります。 組織がこの方法に従う場合は、これらのカスタマイズされた OSS パッケージを含むアップストリーム ソースを他のパブリック レジストリの前に配置します。 これにより、カスタマイズしたバージョンがパブリックバージョンではなく使用されるようになります。
フィード所有者とパッケージ発行元のベスト プラクティス
フィードをアップストリーム ソースとして簡単に構成できるようにするには、次のベスト プラクティスに従います。
1. 既定のビューを使用する
新しく作成されたすべてのフィードの既定のビューは @Local
です。このビューには、フィードに発行されたすべてのパッケージと、アップストリーム ソースから保存されたパッケージが含まれます。
新しくリリースされたパッケージ バージョンのビューなどの他のビューを使用する場合は、パッケージを @Release
ビューに昇格させ、そのビューをターゲット コンシューマーが使用できるようにします。 詳細については、「フィードビュー」を参照してください。
2. パッケージ グラフを作成する
パッケージ グラフを作成するには、フィードの既定のビューに接続し、共有するパッケージをインストールするだけです。 パッケージが既定のビューに保存されると、パッケージを使用するユーザーはパッケージ グラフを解決し、目的のバージョンをインストールできます。 アップストリーム ソースからのパッケージは、対応するアップストリーム ソースの構成済みビューに基づいて表示されます。 詳細については、「 アップストリームが使用可能なパッケージのセットを構築する方法 を参照してください。
検索の順番
NuGet や Maven など、複数のフィードをサポートするパブリック パッケージ マネージャーの場合、フィードのクエリ順序が不明確または非決定的な場合があります。 たとえば、NuGet は、構成ファイル内のすべてのフィードに並列クエリを送信し、先入れ先出し (FIFO) 方式で応答を処理するため、結果に不整合が生じる可能性があります。
アップストリーム ソースは、フィードとそのアップストリーム ソースを次の順序で検索することで、構造化された検索順序を適用することで、この不確定性を排除します。
フィードに直接公開されたパッケージ。
アップストリーム ソースから保存されたパッケージ。
アップストリーム ソースから利用できるパッケージ。 各アップストリーム ソースは、フィードの構成に記載されている順序で検索されます。
Note
Azure Artifacts では、Visual Studio の NuGet パッケージ エクスプローラーを使用したアップストリーム ソースでのパッケージの検索はサポートされていません。
アップストリーム ソースからパッケージを保存
フィードでアップストリーム ソースが有効になっている場合、Azure Artifacts は、コラボレーター以上がアップストリームからインストールしたパッケージのコピーを自動的に保存します。
たとえば、 npm install express などのコマンドを使用して、アップストリーム ソースから直接パッケージをインストールできます。 または、依存関係解決プロセスの一部としてパッケージがインストールされる場合があります。 この場合、express をインストールすると、がを受け入れるなど、依存関係が保存されます。
アップストリーム ソースは、コンシューマーとインフラストラクチャに重要なセーフガードを提供し、予期しない停止から保護します。 アップストリーム ソースでダウンタイム、メンテナンスが発生した場合、または一時的に使用できなくなった場合でも、フィードから必要なパッケージを取得し、開発を続行できます。
Note
カスタム アップストリーム ソースは、npm パッケージでのみサポートされます。
アップストリーム ソースからのパッケージをオーバーライドする
アップストリーム ソースを有効にする場合は、アップストリーム ソースに既に存在するパッケージ バージョンを発行できないことに注意してください。 たとえば、アップストリームで NuGet.org を有効にした場合、NuGet.org で既にそのバージョンを使用できるため、Newtonsoft.Json 10.0.3 パッケージを発行することはできません。
アップストリーム ソースのいずれかに既に存在するパッケージ バージョンを発行する必要がある場合は、次の手順に従う必要があります。
関連するアップストリーム ソースを無効にします。
パッケージを発行します。
アップストリーム ソースを再度有効にします。
このプロセスにより、アップストリーム ソースの整合性を維持しながら、目的のバージョンを発行できるようになります。
注
パッケージ バージョンは不変です。 アップストリーム ソースが無効または削除された場合でも、保存されたパッケージはフィードに残ります。
アップストリーム ソースの正常性状態
フィードに障害が発生したアップストリーム ソースがある場合、同じプロトコルのパッケージのメタデータを更新できなくなります。 アップストリーム ソースの正常性状態を確認するには、次の手順に従います。
Azure DevOps 組織にサインインしてから、プロジェクトに移動します。
[ 成果物] を選択し、ドロップダウン メニューからフィードを選択します。
歯車アイコン
を選択して Feed 設定に移動しupstream ソース 選択します。
エラーが発生した場合は、警告メッセージが表示されます。 失敗した 状態をクリックすると、エラーの原因や解決方法などの追加の詳細が表示されます。
Note
NuGet.org などのパブリック レジストリの場合、パッケージがパブリック レジストリにプッシュされてからダウンロード可能になるまでに 3 ~ 6 時間の遅延があります。 この遅延は、ジョブのタイミングとデータ伝達によって異なります。 ただし、アップストリーム ソースが Azure Artifacts フィードの場合、待機時間は通常数分以下です。
FAQ
Q: フィードのアップストリームの 1 つではパッケージが表示されているのに、パッケージが見つからないのはなぜですか?
A: アップストリーム ソースからのパッケージは、公開後すぐにダウンストリーム フィードで使用できるようになります。 ただし、パッケージはフィードに保存された後にのみ閲覧者に表示されます。 Feed および Upstream Reader (コラボレーター) 以上のアクセス許可を持つユーザーがダウンストリーム フィードにバージョンをインストールすると、パッケージが保存されます。 これにより、ダウンストリームがアップストリームからパッケージのコピーを保存し、その後は完全に保存され、すべてのリーダーがダウンストリームで使用できるようになります。 これは、パッケージのバージョンが Web UI のパッケージ バージョン セクションに表示される場合です。
Q: フィード ビューとは
A: ビューを使用すると、開発者は、まだ開発中または品質基準を満たしていないパッケージを除き、テストおよび検証されたパッケージ バージョンのサブセットを選択的に共有できます。 詳細については、「フィード ビュー とは」を参照してください。
Q: アップストリーム ソースとして構成するフィードが見つかりませんか?
A: フィードの所有者がアップストリーム ソースとしてビューを共有していることを確認します。 詳細については、「アップストリーム ソース として別の組織にフィードを追加する」を参照してください。
Q: Feed Reader ロールを持つユーザーは、アップストリーム ソースからパッケージをダウンロードできますか。
A: いいえ。 Azure Artifacts フィードの フィード閲覧者 ロールを持つユーザーは、フィードに保存されているパッケージのみをダウンロードできます。 パッケージは、フィードとアップストリーム リーダー (コラボレーター)、フィード パブリッシャー (共同作成者)、またはフィード所有者 がアップストリームからこれらのパッケージをインストールすると、フィードに保存されます。
Q: ユーザーがアップストリーム ソースから保存されたパッケージを削除または発行解除するとどうなりますか?
A: パッケージはフィードからダウンロードできなくなり、バージョン番号は完全に予約されます。 さらに、パッケージはアップストリーム ソースから保存されなくなります。 以前のバージョンとそれ以降のバージョンのパッケージは影響を受けません。
Q: ユーザーがアップストリーム ソースから保存されたパッケージを非推奨にした場合はどうなりますか?
A: ユーザーがパッケージを非推奨にすると、パッケージのメタデータに警告メッセージが追加されます。 この警告は、パッケージがフィードから表示またはインストールされるたびに表示されます。