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

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

Azure Pipelines에서 클래식 편집기 또는 YAML 작업을 사용하여 파이프라인 내의 NuGet 패키지, Azure Artifacts 피드 또는 nuget.org 같은 공용 레지스트리에 게시할 수 있습니다.

NuGet 패키지 만들기

Visual Studio를 사용하여 NuGet 패키지를 압축하는 등 NuGet 패키지를 만드는 다양한 방법이 있습니다. 이미 MSBuild 또는 다른 작업을 사용하여 패키지를 만드는 경우 이 섹션을 건너뛰고 NuGet 패키지 게시 섹션으로 이동합니다.

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: 추가하고 형식을 추가합니다.

다음 예제에서는 날짜 및 시간 버전 관리 옵션을 사용하여 형식이 지정된 SemVer 규격 버전을 Major.Minor.Patch-ci-datetime생성하는 방법을 보여줍니다.

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)'

NuGet 패키지 게시

파이프라인에서 Azure Artifacts 피드에 패키지를 게시하려면 파이프라인 ID에 피드에 대한 피드 게시자(기여자) 역할이 있어야 합니다. 자세한 내용은 파이프라인 사용 권한을 참조 하세요.

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

외부 NuGet 피드에 패키지를 게시하려면 먼저 해당 피드에 연결할 서비스 연결을 만들어야 합니다. 서비스 연결을 만들려면 다음을 수행합니다.

  1. 프로젝트 설정>서비스 연결>새 서비스 연결로 이동합니다.
  2. NuGet을 선택한 다음, 다음을 선택합니다.
  3. 양식을 작성하고 완료되면 저장을 선택합니다.

자세한 내용은 서비스 연결 관리를 참조하세요.

참고 항목

NuGetAuthenticate@1 작업은 기본 인증을 사용하여 서비스 연결을 지원합니다. 작업은 NuGet API 키 인증을 지원하지 않습니다. 서비스 연결에서 ApiKey를 사용하는 경우 NuGetCommand@2 작업을 사용하고 인수 필드에 NuGet API 키를 지정해야 합니다. 자세한 내용은 NuGet 작업을 참조 하세요.

외부 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. API 키를 생성합니다.

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

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

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

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

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

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

파이프라인 정의에 다음 YAML 코드 조각을 추가합니다.

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