다음을 통해 공유


Azure Pipelines를 사용하여 NuGet 패키지 게시(YAML/클래식)

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

Azure Pipelines를 사용하여 클래식 또는 YAML 파이프라인을 사용하여 조직, 다른 조직 및 nuget.org 같은 공용 레지스트리에 NuGet 패키지를 Azure Artifacts 피드에 게시할 수 있습니다. 이 문서에서는 다음을 수행하는 방법을 알아봅니다.

  • 내부 피드에 패키지 게시
  • 다른 조직의 피드에 패키지 게시
  • 패키지 버전 관리

필수 조건

동일한 조직의 피드에 NuGet 패키지 게시

참고 항목

Azure Pipelines를 사용하여 피드에 패키지를 게시하려면 프로젝트 컬렉션 빌드 서비스와 프로젝트의 빌드 서비스 ID에 피드 설정에 할당된 피드 게시자(기여자) 역할이 모두 부여되었는지 확인합니다. 자세한 내용은 권한 관리를 참조하세요.

  1. Azure DevOps 조직에 로그인한 다음 프로젝트로 이동합니다.

  2. 파이프라인을 선택한 다음 파이프라인 정의를 선택합니다.

  3. 편집을 선택한 다음 YAML 파이프라인에 다음 코드 조각을 추가합니다.

steps:
- task: NuGetToolInstaller@1                            # Minimum required NuGet version: 4.8.0.5385+.
  displayName: 'NuGet Tool Installer'

- task: NuGetAuthenticate@0
  displayName: 'NuGet Authenticate'

- script: |
      nuget.exe push -Source "https://pkgs.dev.azure.com/<ORGANIZATION_NAME>/<PROJECT_NAME>/_packaging/<FEED_NAME>/nuget/v3/index.json" -ApiKey az $(Build.ArtifactStagingDirectory)\*.nupkg
  displayName: Push
  1. Azure DevOps 조직에 로그인한 다음 프로젝트로 이동합니다.

  2. 파이프라인을 선택한 다음 파이프라인 정의를 선택합니다.

  3. 편집을 선택한 다음 YAML 파이프라인에 다음 코드 조각을 추가합니다.

steps:
- task: NuGetToolInstaller@1                            # Minimum required NuGet version: 4.8.0.5385+.
  displayName: 'NuGet Tool Installer'

- task: NuGetAuthenticate@1
  displayName: 'NuGet Authenticate'

- script: |
      nuget.exe push -Source "https://pkgs.dev.azure.com/<ORGANIZATION_NAME>/<PROJECT_NAME>/_packaging/<FEED_NAME>/nuget/v3/index.json" -ApiKey az $(Build.ArtifactStagingDirectory)\*.nupkg
  displayName: Push

다른 조직의 피드에 NuGet 패키지 게시

다른 Azure DevOps 조직의 피드에 NuGet 패키지를 게시하려면 먼저 대상 조직에서 PAT(개인 액세스 토큰)를 만들어야 합니다. 대상 피드를 호스팅하는 조직으로 이동하고 패키징>읽기 및 쓰기 범위를 사용하여 개인용 액세스 토큰을 만듭니다. PAT가 만들어지면 서비스 연결을 설정하기 위해 다음 섹션에서 필요하므로 안전한 위치에 복사하여 저장합니다.

  1. 파이프라인이 실행되는 Azure DevOps 조직에 로그인한 다음 프로젝트로 이동합니다.

  2. 프로젝트 설정>서비스 연결이동합니다.

  3. 새 서비스 연결을 선택하고 NuGet을 선택한 다음, 다음을 선택합니다.

  4. 인증 방법으로 외부 Azure DevOps Server선택한 다음, 대상 피드 URL을 입력합니다. 이전에 만든 개인용 액세스 토큰을 붙여넣고, 서비스 연결의 이름을 제공하고, 시나리오에 해당하는 경우 모든 파이프라인에 액세스 권한 부여를 확인합니다.

  5. 완료되면 저장을 선택합니다.

    다른 조직의 외부 피드를 사용하여 인증하도록 NuGet 서비스 연결을 설정하는 방법을 표시하는 스크린샷

  1. Azure DevOps 조직에 로그인한 다음 프로젝트로 이동합니다.

  2. 파이프라인을 선택한 다음 파이프라인 정의를 선택합니다.

  3. 편집을 선택한 다음 YAML 파이프라인에 다음 코드 조각을 추가합니다.

    - task: NuGetToolInstaller@1                                # Minimum required NuGet version: 4.8.0.5385+.
      displayName: 'NuGet Tool Installer'
    
    - task: NuGetAuthenticate@1
      inputs:
        nuGetServiceConnections: <SERVICE_CONNECTION_NAME>
    
    - script: |
          nuget.exe push -Source "https://pkgs.dev.azure.com/<ORGANIZATION_NAME>/<PROJECT_NAME>/_packaging/<FEED_NAME>/nuget/v3/index.json" -ApiKey az $(Build.ArtifactStagingDirectory)\*.nupkg
      displayName: Push       
    
  1. Azure DevOps 조직에 로그인한 다음 프로젝트로 이동합니다.

  2. 파이프라인을 선택한 다음 파이프라인 정의를 선택합니다.

  3. 편집을 선택한 다음 YAML 파이프라인에 다음 코드 조각을 추가합니다.

    - task: NuGetToolInstaller@1                            # Minimum required NuGet version: 4.8.0.5385+.
      displayName: 'NuGet Tool Installer'
    
    - task: NuGetAuthenticate@0
      inputs:
        nuGetServiceConnections: <SERVICE_CONNECTION_NAME>
    
    - script: |
        nuget.exe push -Source "https://pkgs.dev.azure.com/<ORGANIZATION_NAME>/<PROJECT_NAME>/_packaging/<FEED_NAME>/nuget/v3/index.json" -ApiKey az $(Build.ArtifactStagingDirectory)\*.nupkg
      displayName: Push          
    

다른 조직의 피드에 성공적으로 게시된 패키지를 표시하는 스크린샷.

NuGet 작업 패키지 버전 관리

Azure Pipelines는 의미 체계 버전 지정을 지원하며 NuGet 작업에 대해 다음과 같은 구성 옵션을 제공합니다.

  • 날짜 및 시간 사용(클래식) | byPrereleaseNumber(YAML): 패키지 버전은 Major, Minor 및 Patch 값을 유연하게 사용자 지정할 수 있는 Major.Minor.Patch-ci-datetime 형식을 따릅니다.

  • 환경 변수 사용(클래식) | byEnvVar (YAML): 패키지 버전이 지정된 환경 변수의 값으로 설정됩니다.

  • 빌드 번호 사용(클래식) | byBuildNumber (YAML): 패키지 버전이 빌드 번호로 설정됩니다. 파이프라인 옵션 에서 빌드 번호 형식을 .로 $(BuildDefinitionName)_$(Year:yyyy).$(Month).$(DayOfMonth)$(Rev:.r)정의해야 합니다. YAML에서 형식을 지정하려면 파이프라인의 루트에 속성을 추가하고 name: 형식을 정의합니다.

다음은 날짜 및 시간 버전 관리를 사용하여 Major.Minor.Patch-ci-datetime 형식의 SemVer 규격 패키지를 생성하는 방법을 보여 주는 예제입니다.

variables:
  Major: '1'
  Minor: '0'
  Patch: '0'

steps:
- task: NuGetCommand@2
  inputs:
    command: pack
    versioningScheme: byPrereleaseNumber
    majorVersion: '$(Major)'
    minorVersion: '$(Minor)'
    patchVersion: '$(Patch)'

참고 항목

DotNetCore System.InvalidCastExceptions DotNetStandard 를 방지하려면 태스크와 함께 DotNetCoreCLI@2 패키지를 패키지해야 합니다. 자세한 내용은 .NET Core CLI 작업을 참조하세요.

task: DotNetCoreCLI@2
inputs:
    command: pack
    versioningScheme: byPrereleaseNumber
    majorVersion: '$(Major)'
    minorVersion: '$(Minor)'
    patchVersion: '$(Patch)'