在Azure DevOps Services for npm的快速入门指南中,它在最后的第6步:发布npm程序包中指出:
“如果您将npmjs.com配置为上游,并且程序包名称/版本存在于公共注册表中,那么您将被禁止发布”
换句话说,一旦开始使用Azure管道进行构建,并且您希望它构建一个程序包,则只有在使用程序包版本(不存在)时,它才会构建一个程序包。 。
但是,尝试这样做将导致警告,导致橙色/黄色构建状态。
是否可以检查软件包版本是否已更新,以便仅在软件包版本实际包含新版本的情况下,构建才尝试构建软件包?还是在这里推荐另一种方法?
答案 0 :(得分:2)
这里有三个步骤:
- 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')
)
答案 1 :(得分:0)
此行为是预期的,因为它不支持公共注册表中存在的覆盖包。
是否可以检查软件包版本是否已更新,以便 如果该软件包的版本,则该构建仅尝试构建一个软件包 实际包含一个新版本?
从理论上讲应该有可能,您可以尝试编写一个脚本来首先检查该脚本,如果特定版本在公共注册表中不存在,则进行构建和发布,否则停止构建。但是,如果要比较的数据量很大,则将花费大量时间来构建...甚至遇到超时问题...