持续集成 + "deployment" 个 npm 模块?

Continuous integration + "deployment" of npm modules?

场景:

我想在每次提交给他们的 master(或w/e分支):

  • 每次更新我的网络应用程序时,我都想使用最新的稳定(即测试)版本这些模块。

  • 重要的是,如果我不小心将错误提交到模块,并且 CI 失败了,对网络应用程序的更新应该 接受这个变化。

  • 我不想在每次提交时手动修改版本、发布标签等。

我研究了多种选择,但找不到实现所有这三个目标的任何简单方法!

  • npm git dependency: 我可以将我的网络应用程序的 package.json 直接指向每个模块的 GitHub 存储库(例如 "foo": "git://github.com/alice/foo.git#1.x") 以获得该模块回购的连续 "deployment"(可用性)。但是,如果我不小心犯了一个错误,即使模块的 CI 失败,应用程序在下一次部署时也会被破坏。

  • Travis npm publish: Travis可以在成功后自动发布模块到npm CI,但是npm registry需要唯一每次都更新版本,并且无法自动提升版本 AFAICT。

  • Travis GitHub release: 我希望 Travis 可以自动更新标签,但它只能在 标签(更多用于发布构建资产),所以仍然是手动的。

有什么办法吗?谢谢!

想到的一个选项是在 Travis 上更新分支(例如命名为 stabletested 或 w/e),尽管它需要手动实施after_success(有点像手动部署挂钩)。

然后,您可以自由地提交到 master,但是这个其他分支将只包含通过 CI 的提交。这将允许您将 npm 指向该分支,例如foo.git#stable。如果您通过非强制更新 git push,您可以保证该分支仅包含 ffwd 提交。

您需要使 GitHub 用户信用可用于脚本,例如通过安全环境变量,但它们可以与 Travis 本身使用的相同。我不确定是否还会有其他问题。例如。我假设 git 可用于 Travis 脚本。