我注意到在构建 https://travis-ci.org/neverendingqs/openssl-self-signed-certificate/builds/187723295 时我忘记在标记 repo 时增加补丁版本。但是,即使 npm 发布由于版本已经存在而失败,构建仍报告为 passing

这是日志的尾部:

Deploying application
NPM API key format changed recently. If your deployment fails, check your API key in ~/.npmrc.
http://docs.travis-ci.com/user/deployment/npm/
~/.npmrc size: 48
npm ERR! publish Failed PUT 403
npm ERR! Linux 4.8.12-040812-generic
npm ERR! argv "/home/travis/.nvm/v0.10.48/bin/node" "/home/travis/.nvm/v0.10.48/bin/npm" "publish"
npm ERR! node v0.10.48
npm ERR! npm  v2.15.1
npm ERR! code E403
npm ERR! "You cannot publish over the previously published version 1.1.5." : openssl-self-signed-certificate
npm ERR!
npm ERR! If you need help, you may report this error at:
npm ERR!     <https://github.com/npm/npm/issues>
npm ERR! Please include the following file with any support request:
npm ERR!     /home/travis/build/neverendingqs/openssl-self-signed-certificate/npm-debug.log
No stash found.
Done. Your build exited with 0.

如果这很重要,我将 test 中的 packages.json 脚本设置为 exit 0 ,但这发生在发布阶段之前,所以这应该不是问题(?)。

为什么 Travis CI 在发布失败时没有报告构建失败?

编辑:

我使用 Travis CI CLI 通过运行基于 https://docs.travis-ci.com/user/deployment/npm/travis setup npm 来设置 NPM 发布。

我的 .travis.yml 如下所示:
language: node_js
deploy:
  provider: npm
  email: myemail
  api_key:
    secure: blahblahblah
  on:
    tags: true
    repo: neverendingqs/openssl-self-signed-certificate

最佳答案

您的脚本必须以退出状态 0 退出。
这是特拉维斯唯一关心的事情。

如果您运行的脚本执行以下操作:

npm publish

那么它应该这样做:
npm publish || exit 1

或类似的东西,以确保如果 npm publish 命令失败,带有该命令的脚本以非零状态退出。

您没有包含任何代码示例,但我怀疑这里可能会发生这种情况。

事实上,它甚至更复杂。
假设您有一个脚本 script1 失败:
#!/bin/sh
exit 1

您还有另一个脚本 script2 运行它:
#!/bin/sh
./script1

然后运行 ​​./script2 也会导致错误 - 运行这个:
./script2 && echo OK || echo ERROR

将打印错误。但是当你稍后有另一个命令时:
#!/bin/sh
./script1
echo

那么这次运行 ./script2 就不会返回错误了。运行:
./script2 && echo OK || echo ERROR

将打印确定。

因此,如果您的 npm publish 是脚本中的最后一个命令,那么它应该导致整个脚本向系统返回错误状态,但如果不是,则系统将获得状态 0,表示成功。

这完全取决于 Travis 正在运行的脚本的实际外观。

关于node.js - 为什么即使 npm 发布失败,Travis CI 仍报告构建成功?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/41399546/

10-16 20:59