次の方法で共有


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

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

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

Note

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

長所

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

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

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

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

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

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

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

構成ファイルで 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 をインストールすると、 acceptsなどの依存関係も保存されます。

Note

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

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

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

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

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

Note

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

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

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

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

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

  3. 歯車アイコン 歯車アイコン を選択して Feed 設定に移動しupstream ソース 選択します

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

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

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

Note

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

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

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

FAQ

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

A: アップストリーム ソースからのパッケージは、公開後すぐにダウンストリーム フィードで使用できるようになります。 ただし、パッケージはフィードに保存された後にのみ閲覧者に表示されます。 Feed および Upstream Reader (コラボレーター) 以上のアクセス許可を持つユーザーがダウンストリーム フィードにバージョンをインストールすると、パッケージが保存されます。 これにより、ダウンストリームがアップストリームからパッケージのコピーを保存し、その後は完全に保存され、すべてのリーダーがダウンストリームで使用できるようになります。 これは、パッケージのバージョンが Web UI のパッケージ バージョン セクションに表示される場合です。

Q: フィード ビューとは

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

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

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

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

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

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

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

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

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