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 피드에 패키지를 게시하려면 먼저 해당 피드에 연결할 서비스 연결을 만들어야 합니다. 서비스 연결을 만들려면 다음을 수행합니다.
- 프로젝트 설정>서비스 연결>새 서비스 연결로 이동합니다.
- NuGet을 선택한 다음, 다음을 선택합니다.
- 양식을 작성하고 완료되면 저장을 선택합니다.
자세한 내용은 서비스 연결 관리를 참조하세요.
참고 항목
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에 게시
Azure DevOps 프로젝트로 이동한 다음 프로젝트 설정을 선택합니다.
서비스 커넥트 선택한 다음 새 서비스 연결을 선택합니다.
NuGet을 선택한 다음, 다음을 선택합니다.
인증 방법으로 ApiKey를 선택합니다. 피드https://api.nuget.org/v3/index.json URL에 다음 URL을 사용합니다.
이전에 생성한 ApiKey를 입력한 다음 서비스 연결 이름을 입력합니다.
모든 파이프라인에 대한 액세스 권한 부여를 선택한 다음, 완료되면 저장을 선택합니다. 이 옵션을 선택하려면 서비스 연결 관리이 필요합니다.
파이프라인 정의에 다음 YAML 코드 조각을 추가합니다.
steps:
- task: NuGetCommand@2
displayName: 'NuGet push'
inputs:
command: push
nuGetFeedType: external
publishFeedCredentials: nuget.org
관련된 문서
피드백
https://aka.ms/ContentUserFeedback
출시 예정: 2024년 내내 콘텐츠에 대한 피드백 메커니즘으로 GitHub 문제를 단계적으로 폐지하고 이를 새로운 피드백 시스템으로 바꿀 예정입니다. 자세한 내용은 다음을 참조하세요.다음에 대한 사용자 의견 제출 및 보기