Dot-Net-Core

VSTS/Azure DevOps:自動遞增 NuGet 包版本

  • October 26, 2021

執行 .NET Core Pack 任務,如何讓輸出的 NuGet 包版本自動遞增?

因此,例如,如果我目前的版本是1.0.0,那麼下次我呼叫 Pack 任務時,我想查看1.0.1.

我正在使用環境建構變數Build.BuildNumber並在例如等的時刻獲取輸出20180913-.2.0。我想建立一個更傳統的版本控制系統。

我可能已經想通了。對於任何撕掉頭髮的人,試試這個:

打包任務:

  • *自動包版本控制:*使用環境變數
  • 環境變數: Build.BuildNumber

然後,在您擁有TasksVariablesTriggers、的頂部菜單中Options,點擊Options並設置:

  • 內部版本號格式:1.0$(Rev:.r)

保存並排隊。這將產生例如 1.0.1。

(如果我錯了,或者如果這不能長期工作,請糾正我。)

docs中,變數Rev:.r每日建構修訂計數。被接受的“解決方案”將導致一天完成一個版本1.0.12,然後第二天就會是1.0.1

如果您想要一個簡單的增量和唯一的semver,請使用1.0.$(BuildID).

$(BuildID)是建構的內部不可變計數器,因此比$(BuildNumber).


BuildID 將始終遞增 - 無需重置。因此,在輕微顛簸之後,您最終會說1.2.123成為1.3.124.

如果您想很好地執行此任務,可以使用npm 版本或類似版本來完成,例如用於 Dart 或 Flutter 建構的pubspec_version 。

- script: npm version $RELEASE_TYPE

where$RELEASE_TYPE是您可以根據建構設置的變數(即:CI、PR 等),其值為majorminorpatchprerelease

- script: npm version $RELEASE_TYPE
 condition: startsWith(variables['build.sourceBranch'], 'refs/head/release/')
 env:  
   releaseType: minor

更新:Bump Repo 版本和在建構中使用(使用 npm)

為了更新 repo 版本,我最終將npm 版本作為 DevDependency 包含在內,它的 precommit 鉤子可以在任何送出時碰撞項目版本。

這種技術可以應用於其他項目類型,將它們放在子文件夾中 - 儘管可能會導致伺服器作業系統要求復雜化。

要在您的建構中使用此版本,請添加此bash 腳本 task,它將獲取版本並將其導出為任務變數:

v=`node -p "const p = require('./package.json'); p.version;"`
echo "##vso[task.setvariable variable=packageVersion]$v"

.Net Core Task 唯一版本

不幸的是,沒有回購碰撞。

解決方法 1:

jobs:
 - job: versionJob #reads version number from the source file
   steps:
     - powershell: |
         $fv = Get-Content versionFile
         Write-Host ("##vso[task.setvariable variable=versionFromFile;isOutput=true]$fv")
       displayName: 'version from file' 
       name: setVersionStep  


 - job: buildJob # consumes version number, calculates incremental number and set version using assemblyinfo.cs
   dependsOn: versionJob
   variables:
     versionFromFile: $[ dependencies.versionJob.outputs['setVersionStep.versionFromFile'] ] # please note that spaces required between $[ and dependencies
     buildIncrementalNumber: $[ counter(dependencies.versionJob.outputs['setVersionStep.versionFromFile'],1) ] #can't use $versionFromFile here


   steps:
     - powershell: |
         Write-Host ($env:versionFromFile)
         Write-Host ($env:versionFromFile + '.' + $env:buildIncrementalNumber)
       displayName: 'version from file output' 

解決方法 2:

這篇文章描述了其他幾個,使用version-prefix並自動應用 BuildNumber 作為version-suffix

引用自:https://stackoverflow.com/questions/52312672