Azure Pipeline을 사용해서 .NET 라이브러리를 빌드하여 Azure DevOps의 Artifact에 있는 Private Nuget Feed에 올리고자 합니다.
이 과정에서 일반적으로 Azure Pipeline에서 제공하는 변수들이 아닌 프로젝트 파일에서 패키지 버전을 읽어와서 nuget pack 때 버전으로 적용하고 싶습니다. 예를 들면 프로젝트 파일에 패키지 버전이 1.0.0이 라면, 제가 패키지 버전을 수정하지 않은 채로 pipeline이 동작했을 때 계속 패키지 버전이 유지되는 것입니다. 제가 1.0.1 같은 번호로 수정했을 때만 패키지 버전이 1.0.1로 변경되었으면 합니다.
조금 찾아보니 Azure DevOps 확장을 찾긴 했는데 이걸 이용하면 가능해 보이지만 어떤식으로 적용하는지 잘 감이 안 옵니다.
혹시 이 확장을 이용해서 본 프로젝트 파일의 버전을 가져와서 패키지 해본 분이 계실까요?
관련해서 제가 찾아본 것들입니다.
Assembly Info 위키
빌드 번호를 동적으로 생성하기
Assembly Info를 사용하는 영상 // 이 영상은 regacy 형태로 구성되어 있어서 yaml 파일에서 참고하기가 어려웠습니다.
1개의 좋아요
그냥 *.csproj
파일에서 빌드 후 패키지 생성하도록 하는 것은 어떤가요?
GeneratePackageOnBuild
를 True
로 주면 됩니다.
자세한 내용은 여기에 있습니다.
이 방식이면 *.csproj
파일에서 version
만 수정하면 패키지 버전도 같이 반영됩니다.
이때 주의해야 할 점이 업로드 할 때 충돌 허용하는 옵션이 있는데 그 옵션도 true
로 설정해두시면 private feed에 업로드할 때 이미 같은 버전이 있다면 스킵합니다.
생성된 *.nupkg
를 private feed로 옮기는 것은 이미 파이프라인 스탭에 있을 테니 생략하겠습니다 
4개의 좋아요
하…어제 하루를 부었는데…이런 쉬운게 있었다니…정말 감사합니다…

혹 별건 아니지만 yaml 파일 올려둡니다.
.NET 클래스 라이브러리를 빌드하여 Azure DevOps의 Artifact Private Feed로 배포하는 파이프라인입니다.
피드 Guid만 가리겠습니다…
# Starter pipeline
# Start with a minimal pipeline that you can customize to build and deploy your code.
# Add steps that build, run tests, deploy, and more:
# https://aka.ms/yaml
trigger:
branches:
include:
- main
variables:
BuildConfiguration: Release
ProjectName: TestNugetPackagePush
stages:
- stage: Build
jobs:
- job: buildapp
pool:
vmImage: ubuntu-20.04
steps:
- task: NuGetToolInstaller@1
inputs:
versionSpec:
- task: UseDotNet@2
displayName: Use .NET 5 SDK
inputs:
packageType: 'sdk'
version: '5.0.x'
includePreviewVersions: true
performMultiLevelLookup: true
- task: DotNetCoreCLI@2
displayName: dotnet restore
inputs:
command: 'restore'
projects: '$(System.DefaultWorkingDirectory)/TestNugetPackagePush/$(ProjectName).csproj'
feedsToUse: 'select'
vstsFeed: '00000000-0000-0000-0000-000000000000'
- task: DotNetCoreCLI@2
displayName: dotnet build $(BuildConfiguration)
inputs:
command: 'build'
arguments: '--configuration $(BuildConfiguration)'
projects: '$(System.DefaultWorkingDirectory)/TestNugetPackagePush/$(ProjectName).csproj'
- task: NuGetCommand@2
displayName: nuget restore
inputs:
command: 'restore'
restoreSolution: '$(System.DefaultWorkingDirectory)/TestNugetPackagePush/$(ProjectName).csproj'
feedsToUse: 'select'
vstsFeed: '00000000-0000-0000-0000-000000000000'
- task: NuGetCommand@2
displayName: nuget pack
inputs:
command: 'pack'
packagesToPack: '$(System.DefaultWorkingDirectory)/TestNugetPackagePush/$(ProjectName).csproj'
versioningScheme: 'off'
- task: NuGetCommand@2
displayName: nuget push
inputs:
command: 'push'
packagesToPush: '$(Build.ArtifactStagingDirectory)/$(ProjectName)*.nupkg'
nuGetFeedType: 'internal'
vstsFeed: '00000000-0000-0000-0000-000000000000'
allowPackageConflicts: true
3개의 좋아요
추가적으로… .NET Library 프로젝트가 .NET 5 이던, .NET Standard 2.0 이던 두 프로젝트의 형식을 가리지 않고 위의 yml 파일로 빌드되는 것을 확인했습니다.
.NET Standard 에 대한 SDK를 개발하시는 분들도 위의 YAML에서 수정해서 사용하시면 될 것 같습니다.
2개의 좋아요