为什么Travis CI会报告构build成功,即使npm发布失败?
我注意到生成https://travis-ci.org/neverendingqs/openssl-self-signed-certificate/builds/187723295 ,我忘了增加补丁版本时,标记回购。 但是,即使由于版本已经存在导致npm发布失败,构build报告也会通过。
这里是日志的尾部:
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.
如果这很重要,我将packages.json
的test
脚本设置为exit 0
,但是在发布阶段之前发生,所以不应该是问题(?)。
为什么Travis CI在发布失败时报告构build失败?
编辑:
我使用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
简单的答案是,Travis CI不检查npm publish
命令的退出状态。
目前这是部署的一个普遍问题。 见https://github.com/travis-ci/dpl/issues/143
您的脚本必须退出,退出状态为0.这是Travis唯一关心的事情。
如果你正在运行一个脚本,
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表示成功的状态。
这一切都取决于特拉维斯运行的脚本实际上是怎样的。