Azure DevOps 管道中的 npm 版本

irr*_*iss 2 npm semantic-versioning azure-devops azure-artifacts

我在 Azure DevOps 中有一个构建管道,它通过发布工件npm pack供以后发布到工件提要中。

我想通过 GIT 设置我的主要和次要版本,但补丁版本与内部版本号相关联。例如

1.2.20201212.4
Run Code Online (Sandbox Code Playgroud)

其中 1 和 2 是通过 GIT 手动更新的主要.次要版本,20201212.4 是由构建管道设置的补丁和修订号

有人可以帮我找出所需的npm version命令参数,以从源代码中保留次要.主要版本并仅更新 $(Build.BuildNumber) 变量中的补丁和修订部分吗?

Kev*_*SFT 6

在Azure中的DevOps,您可以使用替换令牌任务更换令牌扩展

然后你可以在 NPM 包任务之前添加任务来替换变量 Package.json -> Version field.

以下是步骤:

Package.Json 文件:

{
  "name": "helloword",
  "version": "0.0.#{SetNumber}#",
  "description": "Hello World",
  "main": "server.js",
...
}
Run Code Online (Sandbox Code Playgroud)

构建管道:

  1. 在构建管道中设置变量。

在此处输入图片说明

  1. 添加替换令牌任务。

在此处输入图片说明

注意:根据我的测试,npm 包在 azure devops 中不支持xx.xxx版本格式(npm publish)。它可以支持xxx-x

所以你可以像这样设置buildnumber?$(Date:yyyyMMdd)-$(Rev:r).

结果:

在此处输入图片说明

更新:

您可以尝试使用 Npm Version 命令。

npm version  0.0.$(build.buildnumber) --no-git-tag-version
Run Code Online (Sandbox Code Playgroud)

在此处输入图片说明

更新2:

您可以尝试使用以下 powershell 脚本来获取 Package.json 中的版本字段。然后更新补丁号。

$filePath = "$(Build.sourcesdirectory)\package.json" #filepath
$Jsonfile= Get-Content $filePath | ConvertFrom-Json
$version = $Jsonfile.version

echo $version

$major,$minor,$build = $version.Split('.')    

$build = "$(build.buildnumber)"    

$bumpedVersion = $major,$minor,$build  -join(".")

echo $bumpedVersion

Write-Host "##vso[task.setvariable variable=version]$bumpedVersion"
Run Code Online (Sandbox Code Playgroud)

在 Npm 版本中,您可以运行以下命令:

version $(version) --no-git-tag-version
Run Code Online (Sandbox Code Playgroud)

在此处输入图片说明

  • 谢谢凯文,这一切都很好,但是在 package.json 中使用 "version": "0.1.#{SetNumber}#" 会导致 > 执行任务: npm run build < npm ERR! 当我尝试在本地构建时,版本无效:“0.1.#{SetNumber}#”。还有其他方法或解决方法吗? (2认同)
  • 我的意思不是在管道中,而是在本地开发过程中。没有变量#{SetNumber}#,它导致了问题 (2认同)