업스트림 소스

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

업스트림 원본을 사용하면 게시하는 원본과 다른 피드 및 공용 레지스트리(예: NuGet.org, npmjs.com, Maven Central 및 PyPI)에서 사용하는 패키지를 포함하여 다양한 원본의 패키지를 단일 피드에 편리하게 저장할 수 있습니다. 업스트림 원본을 사용하도록 설정하면 업스트림에서 설치된 패키지의 복사본이 피드에 자동으로 저장됩니다.

참고

업스트림 원본에서 패키지를 설치하려면 협력자 이상이어야 합니다.

장점

업스트림 원본을 사용하면 단일 피드에서 제품의 모든 종속성을 관리할 수 있습니다. 모든 패키지를 단일 피드에 게시하면 다음과 같은 몇 가지 이점이 있습니다.

  • 단순성: NuGet.config, npmrc 또는 settings.xml 같은 구성 파일에는 하나의 피드만 포함되므로 실수와 버그가 발생하기 쉽습니다.
  • 결정성: 피드가 패키지 요청을 순서대로 확인하므로 코드를 다시 빌드하는 것이 더 일관됩니다.
  • 출처: 피드는 업스트림 원본에서 저장한 패키지의 출처를 알고 있으므로 복사본이나 악성 패키지가 아닌 원래 패키지를 사용하고 있는지 확인할 수 있습니다.
  • 안심: 업스트림 원본에서 설치된 패키지에 대한 복사본이 피드에 저장됩니다. 따라서 업스트림 원본을 사용하지 않도록 설정하거나 제거하거나 유지 관리를 진행하는 경우 피드에 해당 패키지의 복사본이 있으므로 계속 개발하고 빌드할 수 있습니다.

모범 사례 - 패키지 소비자

패키지 소비자로서 업스트림 원본의 이점을 최대한 활용하려면 다음 모범 사례를 따르세요.

구성 파일에서 단일 피드 사용

피드가 결정적 복원을 제공하려면 nuget.config 또는 .npmrc와 같은 구성 파일이 업스트림 원본을 사용하도록 설정된 하나의 피드만 참조하는지 확인하는 것이 중요합니다.

예제:

  • nuget.config

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

    참고

    NuGet은 사용할 옵션의 전체 집합을 결정하기 위해 여러 구성 파일을 구성합니다. 를 사용하면 <clear /> 상위 수준 구성 파일에 정의된 다른 모든 패키지 원본을 무시할 수 있습니다.

  • .npmrc:

    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. 업스트림 원본에서 사용할 수 있는 패키지: 각 업스트림은 피드의 구성에 나열된 순서대로 검색됩니다.

빠른 조회 기능을 최대한 활용하려면 구성 파일에 피드를 하나만 포함하는 것이 좋습니다.

참고

NuGet 패키지 탐색기를 사용하여 업스트림에서 패키지를 검색하는 것은 지원되지 않습니다.

업스트림 소스에서 패키지를 저장합니다.

피드에 업스트림 원본을 사용하도록 설정하면 업스트림 원본에서 설치된 패키지가 피드에 자동으로 저장됩니다. 이러한 패키지는 다음과 npm install express 같이 업스트림에서 직접 설치하거나 종속성 확인의 일부로 설치할 수 있습니다(설치하면 express 와 같은 accepts종속성도 저장됨).

패키지를 저장하면 다운로드 성능이 향상되고 특히 내부 네트워크의 TFS 서버에 대한 네트워크 대역폭을 절약할 수 있습니다.

참고

사용자 지정 업스트림 원본은 npm 패키지에 대해서만 지원됩니다.

업스트림 원본에서 패키지 재정의

업스트림 원본을 사용하도록 설정하면 업스트림에 이미 있는 패키지 버전을 게시할 수 없다는 점에 유의해야 합니다. 예를 들어 NuGet.org 업스트림을 사용하도록 설정하면 동일한 패키지 버전이 이미 NuGet.org 있으므로 패키지를 게시 Newtonsoft.Json 10.0.3 할 수 없습니다.

업스트림 원본 중 하나에 이미 있는 패키지 버전을 게시해야 하는 경우 해당 업스트림 원본을 사용하지 않도록 설정하고 패키지를 게시한 다음 업스트림 원본을 다시 사용하도록 설정해야 합니다.

참고

패키지 버전은 변경할 수 없습니다. 업스트림 원본을 사용하지 않도록 설정하거나 제거해도 저장된 패키지는 피드에 남아 있습니다.

상태

피드에 실패한 업스트림 원본이 있는 경우 동일한 프로토콜의 패키지에 대해 메타데이터를 더 이상 새로 고칠 수 없습니다. 업스트림 원본의 상태를 보려면 기어 아이콘 기어 아이콘을 선택하여 피드 설정에 액세스한 다음 업스트림 원본을 선택합니다.

업스트림 원본 실패 상태를 보여 주는 스크린샷

오류가 발생하면 경고 메시지가 표시됩니다. 실패한 상태를 선택하면 실패 원인 및 해결 방법에 대한 지침과 같은 자세한 정보가 제공됩니다.

동기화 실패에 대한 세부 정보를 보여 주는 스크린샷

참고

NuGet.org 같은 퍼블릭 레지스트리의 경우 패키지가 퍼블릭 레지스트리에 푸시되는 시간과 다운로드할 수 있는 시점 사이에 3~6시간이 지연됩니다. 이 지연은 작업 타이밍 및 데이터 전파에 따라 달라집니다. 업스트림 원본이 Azure Artifacts 피드인 경우 대기 시간은 일반적으로 몇 분 이내입니다.

오프라인 업스트림 원본

업스트림 원본은 계획되지 않은 중단으로부터 소비자와 인프라를 보호하는 좋은 방법입니다. 업스트림 원본에서 패키지를 설치하면 해당 패키지의 복사본이 피드에 저장됩니다. 업스트림 원본이 다운되거나 유지 관리가 진행 중이거나 사용할 수 없는 경우 피드에서 필요한 패키지에 계속 액세스할 수 있습니다.

FAQ

Q: 피드의 업스트림 중 하나에서 볼 수 있더라도 패키지를 찾을 수 없나요?

A: 업스트림에 속하는 패키지는 게시 직후 다운스트림에서 사용할 수 있습니다. 그러나 패키지는 수집된 후에만 피드의 UI에 표시되며, 이를 위해서는 다운스트림 피드에서 처음으로 패키지 버전을 설치해야 합니다.

Q: 피드 보기란?

A: 뷰를 사용하면 개발자가 테스트 및 유효성을 검사하고 아직 개발 중이거나 품질 표시줄을 충족하지 않는 패키지를 제외한 패키지 버전의 하위 집합만 공유할 수 있습니다. 자세한 내용은 피드 보기란? 을 참조하세요.

Q: 업스트림 원본으로 구성하려는 피드를 찾을 수 없나요?

A: 피드의 소유자가 보기를 업스트림 원본으로 공유하고 있는지 확인합니다.

Q: 읽기 권한자 역할이 있는 사용자가 업스트림 원본에서 패키지를 다운로드할 수 있나요?

A: 아니요. Azure Artifacts 피드에서 읽기 권한자 역할을 가진 사용자는 피드에 저장된 패키지만 다운로드할 수 있습니다. 패키지는 협력자, 기여자 또는 소유자가 업스트림에서 해당 패키지를 설치할 때 피드에 저장됩니다.

Q: 사용자가 업스트림 원본에서 저장된 패키지를 삭제하거나 게시 취소하면 어떻게 됩니까?

A: 피드에서 패키지를 다운로드할 수 없으며 버전 번호가 영구적으로 예약됩니다. 또한 패키지는 더 이상 업스트림 원본에서 저장되지 않습니다. 이전 및 이후 버전의 패키지는 영향을 받지 않습니다.

Q: 사용자가 업스트림 원본에서 저장된 패키지를 더 이상 사용하지 않는 경우 어떻게 되나요?

A: 경고 메시지가 패키지의 메타데이터에 추가되고 피드에서 패키지를 보거나 설치할 때마다 표시됩니다.