다음을 통해 공유


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

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

Azure Pipelines를 사용하면 클래식 또는 YAML 파이프라인을 사용하여 NuGet 패키지를 Azure Artifacts 피드, 외부 피드 또는 공용 레지스트리(예: nuget.org)에 게시할 수 있습니다. 이 문서에서는 다음 방법을 알아봅니다.

  • Azure Pipelines에서 NuGet 패키지 생성
  • 내부 및 외부 피드에 패키지 게시
  • NuGet.org 패키지 게시

필수 조건

NuGet 패키지 만들기

Dotnet 또는 nuget.exe CLI를 사용하여 패키지를 압축하는 등 여러 가지 방법으로 NuGet 패키지를 만들 수 있습니다. 이미 MSBuild 또는 다른 작업을 사용하여 패키지를 만드는 경우 이 섹션을 건너뛰고 다음 섹션으로 진행할 수 있습니다.

NuGet 패키지를 만들려면 YAML 파일에 다음 코드 조각을 추가합니다. 자세한 내용은 NuGet 작업을 참조하세요.

- task: NuGetCommand@2
  inputs:
    command: pack
    packagesToPack: '**/*.csproj'
    packDestination: '$(Build.ArtifactStagingDirectory)'
  • packagesToPack: 태스크가 압축할 csproj 디렉터리를 검색하는 데 사용하는 패턴입니다.
  • packDestination: 패키지를 만드는 디렉터리입니다. 비어 있으면 원본 루트에 패키지가 만들어집니다.

패키지 버전 관리

NuGet 패키지는 이름 및 버전 번호로 정의됩니다. 의미 체계 버전 관리를 사용하는 것은 패키지 버전을 효과적으로 관리하는 데 권장되는 방법입니다. 의미 체계 버전은 주, 부 및 패치의 세 가지 숫자 구성 요소로 구성됩니다.

버그를 수정한 후 패치 번호가 증가합니다. 이전 버전과 호환되는 새로운 기능을 릴리스할 때 부 버전을 증가시키고 패치 버전을 0으로 다시 설정합니다. 반대로 이전 버전과 호환되지 않는 변경을 수행할 때 주 버전을 증가시키고 버전과 패치 버전을 모두 0으로 다시 설정합니다.

의미 체계 버전 관리에서는 패키지에 태그를 지정하기 위해 시험판 레이블을 사용할 수도 있습니다. 하이픈을 추가한 다음 시험판 태그(예: 1.0.0-beta)를 추가하기만 하면 됩니다.

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

  • 날짜 및 시간 사용(클래식) | byPrereleaseNumber(YAML): 패키지 버전은 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)'

내부 피드에 패키지 게시

참고 항목

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

steps:
- task: NuGetAuthenticate@1
  displayName: 'NuGet Authenticate'
- task: NuGetCommand@2
  displayName: 'NuGet push'
  inputs:
    command: push
    publishVstsFeed: '<projectName>/<feed>'
    allowPackageConflicts: true

외부 피드에 패키지 게시

다른 Azure DevOps 조직 또는 nuget.org 피드와 같은 외부 NuGet 피드 또는 공용 레지스트리에 패키지를 게시하려면 먼저 서비스 연결을 만들어 해당 서비스를 인증해야 합니다.

  1. Azure DevOps 프로젝트에서 프로젝트 설정>서비스 연결로 이동합니다.>

  2. 새 서비스 연결>NuGet 다음>선택합니다.

  3. 필요한 필드를 입력한 다음 완료되면 저장을 선택합니다. 자세한 내용은 서비스 연결 관리를 참조하세요.

참고 항목

NuGetAuthenticate@1 작업은 기본 인증을 사용하는 서비스 연결을 지원하지만 Apikey 인증은 지원하지 않습니다. ApiKey 인증을 사용하려면 NuGetCommand@2 작업을 대신 사용해야 합니다.

다른 조직의 피드에 NuGet 패키지를 게시하려면 YAML 파이프라인에 다음 코드 조각을 추가합니다.

  • 명령줄 작업 및 NuGet.exe 사용:

      - task: NuGetAuthenticate@1
        inputs:
          nuGetServiceConnections: <NAME_OF_YOUR_SERVICE_CONNECTION>
    
      - script: |
          nuget push <PACKAGE_PATH> -src https://pkgs.dev.azure.com/<ORGANIZATION_NAME>/<PROJECT_NAME>/_packaging/<FEED_NAME>/nuget/v3/index.json -ApiKey <ANY_STRING>
        displayName: "Push"          
    
  • 명령줄 작업 및 dotnet 사용:

        - task: NuGetAuthenticate@1
          inputs:
            nuGetServiceConnections: <NAME_OF_YOUR_SERVICE_CONNECTION>
    
        - script: |
            dotnet build <CSPROJ_PATH> --configuration <CONFIGURATION>
            dotnet pack <CSPROJ_PATH> -p:PackageVersion=<YOUR_PACKAGE_VERSION> --output <OUTPUT_DIRECTORY> --configuration <CONFIGURATION>
            dotnet nuget push <PACKAGE_PATH> --source https://pkgs.dev.azure.com/<ORGANIZATION_NAME>/<PROJECT_NAME>/_packaging/<FEED_NAME>/nuget/v3/index.json --api-key <ANY_STRING>
          displayName: "Build, pack and push"          
      ```
    
    

참고 항목

ApiKey 필수이지만 Azure Artifacts 피드에 게시할 때 문자열을 사용할 수 있습니다.

NuGet.org에 게시

  1. nuget.org 계정에 로그인하고 API 키를 생성합니다.

  2. Azure DevOps 프로젝트로 이동한 다음 프로젝트 설정을 선택합니다 기어 아이콘 .

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

  4. NuGet을 선택한 다음, 다음을 선택합니다.

  5. 인증 방법으로 ApiKey를 선택하고 피드 https://api.nuget.org/v3/index.jsonURL에 다음 URL을 사용합니다.

  6. 이전에 생성한 ApiKey를 입력한 다음 서비스 연결 이름을 제공합니다.

  7. 모든 파이프라인에 대한 액세스 권한 부여를 선택한 다음, 완료되면 저장을 선택합니다. 이 옵션을 선택하려면 서비스 연결 관리자 역할이 필요합니다.

steps:
- task: NuGetCommand@2
  displayName: 'NuGet push'
  inputs:
    command: push
    nuGetFeedType: external
    publishFeedCredentials: nuget.org