aur*_*ath 6 continuous-integration nuget semantic-versioning azure-devops azure-pipelines
我正在设置一个Azure Pipelines版本,该版本需要将C#.NET类库打包到NuGet包中。
在本文档中,它列出了几种自动生成SemVer字符串的不同方法。我特别想实现这一点:
$(Major).$(Minor).$(rev:.r),其中Major和Minor是在构建管道中定义的两个变量。此格式将自动使用新的补丁程序号递增内部版本号和软件包版本。它将使主要版本和次要版本保持不变,直到您在构建管道中手动更改它们为止。
但这就是他们所说的,没有提供任何示例。要了解更多信息的链接,将带您到本文档,其中说:
对于
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使用此版本控制方案?
Dan*_*ann 13
byBuildNumber使用您在 YAML 中定义的内部版本号和name字段。
前任: name: $(Build.DefinitionName)-$(date:yyyyMMdd)$(rev:.r)
因此,如果您将构建格式设置为name: 1.0.$(rev:.r),它应该会按您的预期工作。
使用YAML进行打包/版本化的工作示例 byBuildNumber
注意-的第二个参数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'
Run Code Online (Sandbox Code Playgroud)
我的问题:
因此,我使用了@LanceMcCarthy 的这个解决方案。
设置变量:
variables:
major: '1'
minor: '0'
revision: $[counter(variables['minor'], 1)] # This will get reset every time minor gets bumped.
nugetVersion: '$(major).$(minor).$(revision)'
Run Code Online (Sandbox Code Playgroud)
然后在打包时用作nugetVersion 环境变量:
- task: NuGetCommand@2
inputs:
command: 'pack'
packagesToPack: '**/*.csproj'
packDestination: '$(Build.ArtifactStagingDirectory)'
versionEnvVar: 'nugetVersion'
versioningScheme: 'byEnvVar'
Run Code Online (Sandbox Code Playgroud)
\n\n\nAzure Pipeline Nuget 包版本控制方案,如何获取 \xe2\x80\x9c1.0.$(Rev:r)\xe2\x80\x9d
\n
这应该是文档中的一个问题。当我$(Major).$(Minor).$(rev:.r)在构建管道的选项中设置构建编号格式时,我重现了这个问题:
然而,经过多次构建测试后,我突然注意到该格式的构建号不正确:
\n\n\n\n0 和 2 之间有两个点.(在新选项卡中打开上图)。显然,这是非常奇怪的。因此,我将内部版本号格式更改为:
$(Major).$(Minor)$(rev:.r)\nRun Code Online (Sandbox Code Playgroud)\n\n或者
\n\n$(Major).$(Minor).$(rev:r)\nRun Code Online (Sandbox Code Playgroud)\n\n现在,一切正常。
\n\n作为测试,我只是将内部版本号格式设置为$(rev:.r),内部版本号为.x。因此,我们可以确认默认$(rev:.r)包含的值。.
注意:由于 whereMajor和Minor是构建管道中定义的两个变量,因此我们需要在变量中手动定义它们。
希望这可以帮助。
\n我有类似的问题,现在让我说清楚。
根据Azure Pipeline YAML 方案的官方文档,是
name: string # build numbering format
resources:
containers: [ containerResource ]
repositories: [ repositoryResource ]
variables: { string: string } | [ variable | templateReference ]
trigger: trigger
pr: pr
stages: [ stage | templateReference ]
Run Code Online (Sandbox Code Playgroud)
看第一行:
name: string # build numbering format
Run Code Online (Sandbox Code Playgroud)
对,就是那样!
所以你可以像这样定义它
name: 1.0.$(Rev:r)
Run Code Online (Sandbox Code Playgroud)
如果您更喜欢语义版本控制。然后
versioningScheme: 'byBuildNumber'任务 NuGetCommand@2 中的含义是什么?这真的很简单:只需使用name!
Package Versioning和Pack NuGet 包的官方文档没有明确说明内部版本号到底是什么以及如何定义它。这真的是误导。作为一名 MS 员工,我感到非常难过,因为我不得不求助于外部资源来澄清这一切。
| 归档时间: |
|
| 查看次数: |
2655 次 |
| 最近记录: |