다음을 통해 공유


Azure Artifacts의 패키지 그래프

Azure DevOps Services | Azure DevOps Server 2022 | Azure DevOps Server 2020

패키지를 릴리스할 때는 업스트림 원본에서 패키지를 사용하여 해당 패키지의 모든 종속성을 피드에서 사용할 수 있도록 하는 것이 중요합니다. 업스트림 원본에서 패키지를 사용하면 복사본이 피드에 저장됩니다. 이렇게 하면 업스트림 원본에 액세스할 수 없게 되더라도 사용자 및 피드 구독자 모두가 복사본을 계속 이용할 수 있습니다.

업스트림이 사용 가능한 패키지 집합을 구성하는 방법

Azure Artifacts 피드는 다른 피드를 업스트림 소스로 가질 수 있으므로 업스트림 소스의 사이클이 생성될 가능성이 있습니다. 여기서 피드 AB를 업스트림 소스로 사용하고, BC를 업스트림으로 설정하며, 결국 C는 다시 A를 업스트림으로 설정합니다. 이러한 사이클은 제대로 관리되지 않으면 패키지 요청 문제를 야기할 수 있으며, 사용자가 피드 A에서 패키지를 요청하면 AB에서 요청하고, BC에게 요청하고, 마지막으로 C가 A에 다시 요청하여 무한 루프를 형성할 수 있습니다.

업스트림 원본은 이러한 상황을 방지하도록 설계되었습니다. 피드가 업스트림 원본에서 패키지를 조회하면 해당 업스트림 원본에 대해 구성된 보기에서 패키지를 받습니다. 즉, 쿼리 피드 A는 보기가 읽기 전용이므로 C(A - B ->> C)에 대한 전이적 쿼리를 트리거하지 않습니다. 따라서 피드 A는 사용자가 이전에 B에 저장했지만 C에서 사용할 수 있는 패키지의 전체 집합은 아닌 C의 모든 패키지에 액세스할 수 있습니다.

이로 인해 피드 B는 로컬 패키지가 전체 종속성 그래프를 완전히 나타낼 수 있도록 보장할 책임을 갖게 됩니다. 이렇게 하면 다른 피드에서 업스트림 원본을 통해 B의 패키지를 사용하는 사용자는 문제가 발생하지 않고 그래프를 성공적으로 해결하고 원하는 B 패키지를 설치할 수 있습니다.

예: 사용 가능한 패키지 집합 생성

Fabrikam, Contoso 및 AdventureWorks의 세 가지 피드를 살펴보겠습니다. 이 그림에서는 업스트림 소스를 소개할 때 Fabrikam 피드에서 사용할 수 있는 패키지를 살펴봅니다.

처음에 Fabrikam에는 업스트림 원본이 없으므로 Fabrikam에 연결된 사용자가 위젯 패키지의 버전 1.0.0 및 2.0.0만 설치할 수 있습니다. 마찬가지로 Contoso에는 업스트림 원본이 없으므로 Contoso에 연결된 사용자가 Gizmos 패키지의 버전 1.0.0 및 3.0.0만 설치하도록 제한합니다. 연결된 사용자가 가젯 패키지의 버전 1.0.0 및 2.0.0 또는 Things 패키지 버전 1.0.0만 설치할 수 있는 AdventureWorks 피드에도 동일하게 적용됩니다.

업스트림 원본이 없는 세 가지 다른 피드를 보여 주는 그림입니다.

이제 Contoso가 AdventureWorks를 업스트림 원본으로 추가하는 시나리오를 살펴보겠습니다. 사용자가 Contoso에 연결되면 더 광범위한 패키지에 액세스할 수 있습니다. 모든 버전의 Gizmos, 가젯 또는 사물을 설치할 수 있습니다. 예를 들어 사용자가 Gadgets@2.0.0을 설치하는 경우 이 특정 패키지 버전은 AdventureWorks에 대한 링크와 함께 Contoso에 저장됩니다.

AdventureWorks를 업스트림 원본으로 추가하는 Contoso의 그림입니다.

이제 Fabrikam 피드가 Contoso를 업스트림 원본으로 추가하는 상황을 살펴보겠습니다. Fabrikam에 연결된 사용자는 모든 버전의 위젯, 모든 버전의 Gizmos를 설치할 수 있지만 저장된 버전의 가젯 설치할 수 있습니다(2.0.0).

Contoso를 업스트림 원본으로 추가하는 Fabrikam의 그림입니다.

Contoso 사용자가 해당 패키지 버전을 Contoso에 저장하지 않았기 때문에 사용자는 가젯 버전 1.0.0 또는 모든 버전의 사물을 설치할 수 없습니다.

Fabrikam 사용자가 사용할 수 있는 패키지의 그림입니다.