2016-12-30 69 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和非零退出代碼並開始失敗的構建。

相關問題