Azure Artifacts アップストリーム ソース

Azure DevOps Services | Azure DevOps Server 2022 - Azure DevOps Server 2019

アップストリーム ソースを使用すると、さまざまなソースのパッケージを 1 つのフィードに簡単に格納できます。 これには、発行するパッケージと、外部フィードや、NuGet.org、npmjs.com、Maven Central、PyPI などのパブリック レジストリから使用するパッケージが含まれます。 アップストリーム ソース(これらのアップストリーム ソースからインストールされたパッケージ)を有効にすると、コピーがフィードに自動的に保存されます。

Note

アップストリームからパッケージを保存するには、フィードおよびアップストリーム 閲覧者 (コラボレーター) ロール以上が必要です。 詳細については、「 アクセス許可」を参照してください。

長所

アップストリーム ソースを有効にすると、1 つのフィード内で製品の依存関係を管理するためのいくつかの利点があります。

  • 簡略化: すべてのパッケージを 1 つのフィードに発行すると、NuGet.config、npmrc、settings.xmlなどの構成ファイルが簡略化されます。 構成ファイルに 1 つのフィードを含めるだけで、エラーやバグの可能性が減り、セットアップが合理化されます。

  • 決定性: フィードはパッケージ要求を順番に解決するため、コードを再構築するときの一貫性が高くなります。

  • 実証: フィードには、アップストリーム ソースから保存されたパッケージに関する情報が保持されます。 これにより、コピーや悪意のある可能性のあるバージョンではなく、元のパッケージを使用していることを確認できます。

  • 安心: アップストリーム ソースからインストールされたすべてのパッケージは、フィードに自動的に保存されます。 つまり、アップストリーム ソースが無効、削除、またはメインテナントを受けている場合でも、フィードにそのパッケージのコピーがあるため、自信を持って開発とビルドを続けることができます。

ベスト プラクティス - パッケージ コンシューマー

パッケージ コンシューマーとしてのアップストリーム ソースの利点を最大限に活用するには、次のベスト プラクティスに従います。

構成ファイルで 1 つのフィードを使用します。

フィードで決定論的な復元を提供するには、nuget.config や .npmrc などの構成ファイルが、アップストリーム ソースが有効になっている 1 つのフィードのみを参照していることを確認します。 次の例を見てください。

<packageSources>
  <clear />
  <add key="FabrikamFiber" value="https://pkgs.dev.azure.com/fabrikam/_packaging/FabrikamFiber/nuget/v3/index.json" />
</packageSources>

Note

NuGet は複数 の構成ファイル をコンパイルして、適用するオプションの完全なセットを決定します。 使用 <clear />すると、上位レベルの構成ファイルで指定されている他のすべてのパッケージ ソースを効果的に無視できます。

registry=https://pkgs.dev.azure.com/fabrikam/_packaging/FabrikamFiber/npm/registry/
always-auth=true

アップストリーム ソースを意図的に並べ替えます。

nuget.org や npmjs.com などのパブリック レジストリのみを使用している場合、アップストリーム ソースの順序は関係ありません。 フィードへの要求は、検索順序セクションで詳しく説明されている順序に従います。

ただし、フィードとパブリック レジストリの組み合わせを含む複数のソースを管理する場合、各アップストリーム ソースはフィードの構成設定に記載されている順序で検索されます。 この場合は、アップストリーム ソースの一覧の最初にパブリック レジストリを配置することをお勧めします。

一部の固有のシナリオでは、特定の組織がオープンソース ソフトウェア (OSS) パッケージをカスタマイズすることを選択します。 これには、セキュリティ上の問題に対処したり、機能を強化したり、パッケージをパブリック リポジトリから直接取得するのではなく、パッケージを内部的に再構築する必要がある特定の要件を満たすことが含まれる場合があります。 組織がこのプラクティスに従っている場合は、これらの変更された OSS パッケージを含むアップストリーム ソースをパブリック パッケージ マネージャーの前に配置することをお勧めします。 この配置により、組織のカスタマイズされたバージョンが確実に使用されます。

推奨される既定のビューを使用します。

アップストリーム ソースとしてリモート フィードを追加する場合は、そのフィードのビューを選択する必要があります。 これにより、アップストリーム ソースは使用可能なパッケージのセットを構築できます。 詳細については、 アップストリームが使用可能なパッケージ のセットを構築する方法を参照してください。

ベスト プラクティス: フィード所有者/パッケージ発行元

フィードがアップストリーム ソースとして簡単に構成されるようにするには、次のベスト プラクティスを適用することを検討してください。

既定のビューを使用します。

新しく作成されたすべてのフィードの既定の @Local ビューはビューであり、フィードに発行されたすべてのパッケージ、またはアップストリーム ソースから保存されたすべてのパッケージが含まれます。

新しくリリースされたパッケージ バージョンのビューなどの他のビューを使用する場合は、パッケージをビューに @Release 昇格させ、そのビューをパッケージ コンシューマーが使用できるようにします。

パッケージ グラフを作成します。

パッケージ グラフを作成するには、フィードの既定のビューに接続し、共有するパッケージをインストールするだけです。 パッケージを既定のビューに保存すると、パッケージを使用するユーザーはパッケージ グラフを解決し、目的のパッケージをインストールできます。 アップストリーム ソースからのパッケージは、対応するアップストリーム ソースの構成済みビューに基づいて表示されます。

検索の順番

NuGet や Maven などの複数のフィードをサポートするパブリック パッケージ マネージャーの場合、フィードのクエリ順序が不明確または非決定的な場合があります。 たとえば、NuGet では、並列クエリは構成ファイル内のすべてのフィードに送信され、応答は先入れ先出し (FIFO) 方式で処理されます。

アップストリーム ソースは、フィードとそのアップストリーム ソースを次の順序で検索することで、この非決定論的な動作に対処します。

  1. フィードに直接発行されたパッケージ。

  2. アップストリーム ソースから保存されたパッケージ。

  3. アップストリーム ソースから利用できるパッケージ。 各アップストリーム ソースは、フィードの構成に記載されている順序で検索されます。

高速参照機能を最大限に活用するには、構成ファイルに含めるフィードを 1 つだけにすることをお勧めします。

Note

NuGet パッケージ エクスプローラーを使用したアップストリーム ソースでのパッケージの検索はサポートされていません。

アップストリーム ソースからパッケージを保存

フィードのアップストリーム ソースを有効にし、アップストリーム ソースからパッケージをインストールすると、そのパッケージの自動コピーがフィードに保存されます。 この方法では、ダウンロードのパフォーマンスが向上し、ネットワーク帯域幅が節約されます。

たとえば、npm install express などのコマンドを使用して、アップストリーム ソースから直接パッケージをインストールできます。 または、依存関係解決プロセスの一部としてパッケージがインストールされる場合があります。 後者のシナリオでは、express をインストールすると、受け入れなどの依存関係も保存されます

Note

カスタム アップストリーム ソースは、npm パッケージでのみサポートされます。

アップストリーム ソースからのパッケージをオーバーライドする

アップストリーム ソースを有効にする場合は、アップストリーム ソースに既に存在するパッケージ バージョンを発行できないことに注意することが重要です。 たとえば、アップストリーム NuGet.org を有効にした場合、NuGet.org に正確なバージョンが既に存在するため、Newtonsoft.Json 10.0.3 パッケージを発行することはできません。

アップストリーム ソースのいずれかに既に存在するパッケージ バージョンを発行する必要がある場合は、次の手順に従う必要があります。

  1. 関連するアップストリーム ソースを無効にします。
  2. パッケージを発行します。
  3. アップストリーム ソースを再度有効にします。

Note

パッケージ バージョンは不変です。 アップストリーム ソースが無効または削除された場合でも、保存されたパッケージはフィードに残ります。

アップストリーム ソースの正常性状態

フィードに障害が発生したアップストリーム ソースがある場合、同じプロトコルのパッケージのメタデータを更新できなくなります。 アップストリーム ソースの正常性状態をチェックするには、次の手順に従います。

  1. Azure DevOps 組織にサインインしてから、プロジェクトに移動します。

  2. [ 成果物] を選択し、ドロップダウン メニューからフィードを選択します。

  3. 歯車アイコン歯車アイコンを選択してフィード設定移動し、[アップストリーム ソース] を選択します

    アップストリーム ソースの最後の同期状態を示すスクリーンショット。

  4. エラーが発生した場合は、警告メッセージが表示されます。 失敗した状態をクリックすると、エラーの原因や解決方法などの詳細が表示されます。

    同期の失敗の詳細を示すスクリーンショット。

Note

NuGet.org などのパブリック レジストリの場合、パッケージがパブリック レジストリにプッシュされてからダウンロードできるようになるまで、3 ~ 6 時間の遅延があります。 この遅延は、ジョブのタイミングとデータ伝達によって異なります。 ただし、アップストリーム ソースが Azure Artifacts フィードの場合、待機時間は通常数分以下です。

オフライン アップストリーム ソース

アップストリーム ソースは、コンシューマーとインフラストラクチャにとって重要なセーフガードとして機能し、予期しない停止からそれらを保護します。 アップストリーム ソースからパッケージをインストールすると、そのパッケージのコピーがフィードに保存されます。 アップストリーム ソースでダウンタイムが発生したり、メインテナントが発生したり、一時的に使用できなくなったりした場合でも、フィードから必要なパッケージを取得して開発を続行できます。

FAQ

Q: フィードのアップストリームのいずれかでパッケージが表示されていても、パッケージが見つかりませんか?

A: アップストリーム ソースからのパッケージは、公開されるとすぐにダウンストリームで使用できるようになります。 ただし、パッケージは、取り込まれた後にのみフィードの UI に表示されます。 インジェストは、フィードリーダーとアップストリームリーダー(コラボレーター)以上がアップストリームからパッケージバージョンをインストールしたときにトリガーされます。

Q: フィード ビューとは

A: ビューを使用すると、開発者は、まだ開発中または品質基準を満たしていないパッケージを除き、テストおよび検証されたパッケージ バージョンのサブセットを選択的に共有できます。 詳細については、「フィード ビューとは」を参照してください

Q: アップストリーム ソースとして構成するフィードが見つかりませんか?

A: フィードの所有者がアップストリーム ソースとしてビューを共有していることを確認します。

Q: フィード リーダー ロールを持つユーザーは、アップストリーム ソースからパッケージをダウンロードできますか?

A: いいえ。 Azure Artifacts フィードのフィード閲覧者ロールを持つユーザーは、フィードに保存されているパッケージのみをダウンロードできます。 フィードとアップストリーム リーダー (コラボレーター)、フィードパブリッシャー (共同作成者)またはフィード所有者がアップストリームからこれらのパッケージをインストールすると、パッケージがフィードに保存されます。

Q: ユーザーがアップストリーム ソースから保存されたパッケージを削除または発行解除するとどうなりますか?

A: パッケージはフィードからダウンロードできなくなり、バージョン番号は完全に予約されます。 さらに、パッケージはアップストリーム ソースから保存されなくなります。 以前のバージョンとそれ以降のバージョンのパッケージはメイン影響を受けません。

Q: ユーザーがアップストリーム ソースから保存されたパッケージを非推奨にした場合はどうなりますか?

A: ユーザーがパッケージを非推奨にすると、パッケージのメタデータに警告メッセージが追加されます。これは、パッケージがフィードから表示またはインストールされるたびに表示されます。