我正在设置一个Azure Pipelines构建,需要将C#.NET类库打包到NuGet包中。
在this documentation中,它列出了几种不同的自动生成SemVer字符串的方法。特别是,我想实现这个:
$(Major).$(Minor).$(rev:.r)
,其中Major
和Minor
是构建管道中定义的两个变量。此格式将使用新的修补程序编号自动增加内部版本号和软件包版本。它会使主要版本和次要版本保持不变,直到您在构建管道中手动更改它们。
但这就是他们所说的,没有提供任何例子。了解更多信息的链接将您带到this documentation,它会说:
对于
byBuildNumber
,版本将设置为内部版本号,确保您的内部版本号是正确的SemVer,例如1.0.$(Rev:r)
。如果选择byBuildNumber,则任务将提取虚线版本1.2.3.4
并仅使用该版本,删除任何标签。要按原样使用内部版本号,您应该如上所述使用byEnvVar,并将环境变量设置为BUILD_BUILDNUMBER
。
同样,没有提供示例。看起来我想使用versioningScheme: byBuildNumber
,但我不太确定如何设置构建号,我认为它从BUILD_BUILDNUMBER
环境变量中提取它,但我找不到设置环境变量的方法,只有脚本变量。此外,我想把它设置为1.0.$(Rev:r)
或$(Major).$(Minor).$(rev:.r)
?我担心这会直接解释它。
谷歌搜索文字字符串“versioningScheme:byBuildNumber”返回一个结果...有没有人有这个版本控制方案的工作azure-pipelines.yml
?
byBuildNumber
使用您在YAML中使用name
字段定义的内部版本号。
例如:name: $(Build.DefinitionName)-$(date:yyyyMMdd)$(rev:.r)
因此,如果您将构建格式设置为name: 1.0.$(rev:.r)
,它应该按预期工作。
使用byBuildNumber
处理包装/版本控制的YAML示例
注意counter
的第二个参数 - 它是一个种子值,在从其他构建系统(如TeamCity)迁移构建时非常有用;它允许您在迁移时显式设置下一个构建版本。在Azure DevOps中迁移和初始构建之后,可以将种子值设置回零或每次更改majorMinorVersion
时可能更喜欢的任何起始值(如100):
name: $(majorMinorVersion).$(semanticVersion) # $(rev:r) # NOTE: rev resets when the default retention period expires
pool:
vmImage: 'vs2017-win2016'
# pipeline variables
variables:
majorMinorVersion: 1.0
# semanticVersion counter is automatically incremented by one in each execution of pipeline
# second parameter is seed value to reset to every time the referenced majorMinorVersion is changed
semanticVersion: $[counter(variables['majorMinorVersion'], 0)]
projectName: 'MyProjectName'
buildConfiguration: 'Release'
# Only run against master
trigger:
- master
# Build
- task: DotNetCoreCLI@2
displayName: Build
inputs:
projects: '**/*.csproj'
arguments: '--configuration $(BuildConfiguration)'
# Package
- task: DotNetCoreCLI@2
displayName: 'NuGet pack'
inputs:
command: 'pack'
configuration: $(BuildConfiguration)
packagesToPack: '**/$(ProjectName)*.csproj'
packDirectory: '$(build.artifactStagingDirectory)'
versioningScheme: byBuildNumber # https://docs.microsoft.com/en-us/azure/devops/pipelines/tasks/build/dotnet-core-cli?view=azure-devops#yaml-snippet
# Publish
- task: DotNetCoreCLI@2
displayName: 'Publish'
inputs:
command: 'push'
nuGetFeedType: 'internal'
packagesToPush: '$(build.artifactStagingDirectory)/$(ProjectName)*.nupkg'
publishVstsFeed: 'MyPackageFeedName'
Azure管道Nuget包版本控制方案,如何获得“1.0。$(Rev:r)”
这应该是文档中的问题。当我在构建管道选项中以Build编号格式设置$(Major).$(Minor).$(rev:.r)
时,我重现了这个问题:
但是,我突然发现许多构建测试后,使用该格式的构建号不正确:
在0和2之间有两个点.
(在新选项卡中打开上面的图像)。显然这很奇怪。所以,我将Build号格式更改为:
$(Major).$(Minor)$(rev:.r)
要么
$(Major).$(Minor).$(rev:r)
现在,一切都运转良好。
作为测试,我只是将Build number格式设置为$(rev:.r)
,内部版本号为.x。因此,我们可以确认$(rev:.r)
的值,包括默认的.
。
注意:由于Major
和Minor
是构建管道中定义的两个变量,因此我们需要手动在变量中定义它们。
希望这可以帮助。
我有类似的问题,现在让我说清楚。
根据Azure Pipeline YAML scheme的官方文件,它是
name: string # build numbering format
resources:
containers: [ containerResource ]
repositories: [ repositoryResource ]
variables: { string: string } | [ variable | templateReference ]
trigger: trigger
pr: pr
stages: [ stage | templateReference ]
看第一行:
name: string # build numbering format
对,就是那样!
所以你可以定义它
name: 1.0.$(Rev:r)
如果您更喜欢语义版本控制。然后
versioningScheme: 'byBuildNumber'
的含义是什么?它非常简单:只需使用name
定义的格式!
关于Package Versioning和Pack NuGet packages的官方文件没有明确说明构建号是什么以及如何定义它。这真的很误导。我作为一名MS员工感到非常伤心,因为我要借助外部资源来清楚地说明这一点。