2016-12-30 71 views
2

我注意到构建https://travis-ci.org/neverendingqs/openssl-self-signed-certificate/builds/187723295,我忘了增加标签回购时的补丁版本。但是,即使npm发布由于版本已经存在而失败,构建报告为passing即使npm发布失败,为什么Travis CI会报告构建成功?

这里是日志的末尾:

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在发布失败时报告构建失败?

编辑:

我用特拉维斯CI CLI通过运行travis setup npm,基于https://docs.travis-ci.com/user/deployment/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

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

如果你正在运行一个脚本,做:

npm publish 

那么它应该做的:

npm publish || exit 1 

或类似的东西,以确保与非该命令退出脚本-zero状态,如果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,意味着成功。

这一切都取决于特拉维斯运行的脚本实际上是怎样的。

+0

我已经更新我如何生成'.travis.yml'内容的问题。 – neverendingqs

0

我遇到了一个不同的问题,因为我们的一些封装和缩小脚本位于after_success部分,甚至连接命令并没有使构建失败,直到我后来发现这是设计。

https://docs.travis-ci.com/user/customizing-the-build/#Breaking-the-Build

“如果任何在构建生命周期的第一四个阶段的命令返回一个非零退出代码,构建已破坏: 如果before_install,安装或before_script返回非零退出代码,构建有差错时,立即停止。 如果script返回非零退出代码,构建失败,而是继续被标记为失败之前运行。 after_success退出代码,after_failureafter_script和后续阶段不会影响构建结果。但是,如果这些阶段超时一个,构建被标记为失败。”

所以我提出这些命令install和非零退出代码并开始失败的构建。

相关问题