You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Azure Pipeline中使用变量配置npm预发布版本报错,能否解决?

Azure Pipeline npm version命令执行失败问题

配置的YAML脚本

name: $(Build.BuildId)-${{ variables['Build.SourceBranchName']}}

- ${{ if not(or(eq(variables['Build.SourceBranchName'], 'master'), eq(variables['Build.SourceBranchName'], 'main'))) }}:
  - task: Npm@1
    displayName: 'npm version' 
    inputs:
      workingDir: '$(Build.SourcesDirectory)/Thingamajig'
      command: custom
      customCommand: version prerelease --preid=$(name)

执行错误信息

npm verb stack Error: Invalid version: "0.0.1-$(name).0"

问题解答

当前配置能否正常工作?

不能。原因是Azure Pipeline的运行时变量语法$(name)无法在npm的customCommand中被正确解析,npm会直接把$(name)当作字符串字面量使用,生成了不符合语义化版本规范的无效版本号。

解决方法

方法1:使用模板表达式引用变量

name是Pipeline编译阶段定义的变量,改用模板表达式${{ variables.name }}引用,在编译阶段就会替换为实际值:

- ${{ if not(or(eq(variables['Build.SourceBranchName'], 'master'), eq(variables['Build.SourceBranchName'], 'main'))) }}:
  - task: Npm@1
    displayName: 'npm version' 
    inputs:
      workingDir: '$(Build.SourcesDirectory)/Thingamajig'
      command: custom
      customCommand: version prerelease --preid=${{ variables.name }}

方法2:通过任务传递运行时变量

如果需要使用运行时变量,先将name的值存入Pipeline运行时变量,再在npm命令中引用:

- ${{ if not(or(eq(variables['Build.SourceBranchName'], 'master'), eq(variables['Build.SourceBranchName'], 'main'))) }}:
  - task: PowerShell@2
    displayName: 'Set version preid variable'
    inputs:
      targetType: 'inline'
      script: |
        Write-Host "##vso[task.setvariable variable=versionPreid]$(name)"
  - task: Npm@1
    displayName: 'npm version' 
    inputs:
      workingDir: '$(Build.SourcesDirectory)/Thingamajig'
      command: custom
      customCommand: version prerelease --preid=$(versionPreid)

额外注意

npm预发布版本的--preid参数值仅允许包含字母、数字和连字符,需确保name变量的内容符合该规则,避免再次触发无效版本号错误。

内容的提问来源于stack exchange,提问作者Richard Barraclough

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.30 07:12:38