VSTS/Azure DevOps:自動遞增 NuGet 包版本
執行 .NET Core Pack 任務,如何讓輸出的 NuGet 包版本自動遞增?
因此,例如,如果我目前的版本是
1.0.0,那麼下次我呼叫 Pack 任務時,我想查看1.0.1.我正在使用環境建構變數
Build.BuildNumber並在例如等的時刻獲取輸出20180913-.2.0。我想建立一個更傳統的版本控制系統。
我可能已經想通了。對於任何撕掉頭髮的人,試試這個:
打包任務:
- *自動包版本控制:*使用環境變數
- 環境變數: Build.BuildNumber
然後,在您擁有
Tasks、Variables、Triggers、的頂部菜單中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_TYPEwhere
$RELEASE_TYPE是您可以根據建構設置的變數(即:CI、PR 等),其值為major、minor、patch等prerelease。- 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。