持续集成&x2B&引用;“部署”;npm模块的定义?

持续集成&x2B&引用;“部署”;npm模块的定义?,npm,travis-ci,Npm,Travis Ci,情景: 我正在持续集成+在每次提交给master时部署一个节点web应用程序,例如通过Travis提交给Heroku (两个选项:,或者。重要的是,只有在CI成功/测试通过的情况下,这两种方法才部署) 我想将此应用程序的一些部分维护为独立的、可重用的模块,例如在它们自己的git回购中 为了简单起见,我们假设一切都是公开的 - 我希望在每次提交给主模块(或w/e分支)时,同样地持续集成+部署(即,使应用程序可用)这些模块: 每次更新我的web应用程序时,我都希望使用这些模块的最新稳定版(即测

情景:

  • 我正在持续集成+在每次提交给master时部署一个节点web应用程序,例如通过Travis提交给Heroku

    (两个选项:,或者。重要的是,只有在CI成功/测试通过的情况下,这两种方法才部署

  • 我想将此应用程序的一些部分维护为独立的、可重用的模块,例如在它们自己的git回购中

  • 为了简单起见,我们假设一切都是公开的

-

我希望在每次提交给主模块(或w/e分支)时,同样地持续集成+部署(即,使应用程序可用)这些模块:

  • 每次更新我的web应用程序时,我都希望使用这些模块的最新稳定版(即测试版)

  • 重要的是,如果我意外地将一个bug提交到一个模块,并且CI失败,则web应用程序的更新不应拾取此更改

  • 我不想在每次提交时手动转储版本,或发布标记等

-

我已经调查了许多选择,但找不到任何简单的方法来实现这三个目标

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

  • Travis可以在成功完成CI后自动将模块发布到npm,但npm注册表每次都需要一个唯一的版本,并且无法自动将版本升级到AFAICT

  • 我希望Travis能够自动更新标记,但它只能在标记上执行此操作(这意味着更多用于发布构建资产),所以仍然是手动的

-


有办法吗?谢谢

我想到的一个选项是,尽管需要手动实现,但在成功后更新Travis
上的分支(命名为
stable
tested
或w/e)(有点像手动部署挂钩)

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


您需要使GitHub用户cred可用于脚本,例如通过secure env vars,但它们可以与Travis本身使用的相同。不过,我不确定是否还有其他问题。例如,我假设Travis脚本可以使用git。

如果Travis将其作为内置部署选项提供,那就太好了!