如果此 npm 包的版本比 npm 注册表中的版本新,Azure 管道仅发布 npm 包

Rem*_*emi 1 npm azure-devops azure-pipelines

在适用于 npm 的 Azure DevOps Services 快速入门指南中,它在最后的第 6 步:发布 npm 包中说明了以下内容:

“如果您将 npmjs.com 配置为上游并且包名称/版本存在于公共注册表中,那么您将被阻止发布”

换句话说,一旦使用 Azure 管道的构建开始,并且您希望它构建包,它只会在使用不存在的包版本时构建包。

但是,尝试这样做会导致出现橙色/黄色构建状态的警告。

是否可以检查包版本是否已更新,以便构建仅在包版本实际包含新版本时才尝试构建包?或者这里有推荐的另一种方法吗?

k2s*_*n69 5

这里有三个步骤:

  1. 获取本地包版本(如果被撞了,则为新版本)
  2. 获取已发布的包版本
  3. 仅在新版本和发布版本不匹配时发布
  - script: |
      PackageName=$(npm list --json --depth=0 | sed -n 2p | cut -d '"' -f4)
      NewPackageVersion=$(npm list --json --depth=0 | sed -n 3p | cut -d '"' -f4)
      PublishedPackageVersion=$(npm show $PackageName version)
      echo "##vso[task.setvariable variable=NewPackageVersion;]$NewPackageVersion"
      echo "##vso[task.setvariable variable=PublishedPackageVersion;]$PublishedPackageVersion"
    displayName: "Extract package versions"

  - task: Npm@1
    inputs:
      command: publish
    displayName: "Publish"
    condition: |
      and(
        ne(variables['NewPackageVersion'], variables['PublishedPackageVersion']), 
        succeeded(), 
        eq(variables['Build.SourceBranch'], 'refs/heads/master')
      )
Run Code Online (Sandbox Code Playgroud)

  • 如果 npm 注册表是 Azure Artifacts npm 源,则此方法不起作用。在不创建 PAT 的情况下,是否有其他替代方案? (2认同)