我不喜欢在生产服务器上发布我的项目。可能我只是没有足够的经验,没有人教会我如何以正确的方式做到这一点。
现在我有几个带有scala的回购(在喷雾之上)。我有一切可以在我的本地机器上构建和运行这个项目(当然,我开发它们)。所以在我的生产服务器上安装了jenkins,以便从git,build和run中同步。它现在有效,但我不喜欢它,因为我需要在我希望运行我的项目的每台机器上安装jenkins。如果我想把我的项目展示给我在咖啡馆的朋友怎么办?
所以我想到了:如果我在构建应用程序之前运行测试,进行可移植构建(e.q.与sbt native packager)并将其保存在远程服务器“release server”上,该怎么办?该服务器只是让这些服务器准备就绪。
然后我去生产服务器,运行从发布服务器下载可执行文件的bash脚本并在一台机器上运行我的项目
将来我想:
我听说过nexus(http://www.sonatype.org/nexus/),艺术家用它来保存他们的歌曲,图像,等等。我认为应该有像我一样揭露想法的开源项目
感谢任何帮助!
答案 0 :(得分:1)
在我看来,一个常见的反模式是每次执行部署时都要构建软件。最好建议通过引入二进制存储库管理器将构建过程与部署过程分开(你已经在这样的例子中提到,nexus)。
只有成功测试版本才会被推送到存储库,因此您可以将每个成功版本视为迷你版本。这样做的副产品是您的生产服务器不必预先安装所有构建软件(如Jenkins,ANT,Maven等)。
应该注意的是,像Nexus和Artifactory这样的现代存储库管理器现在也支持Docker注册表,因此您也可以使用它们来部署docker镜像。
一个相关的厨师问题,一种没有中间二进制文件(如jar)的技术。在这种情况下,软件仍然通过创建存储在repo中的tar分发来“释放”。
chef cookbook delivery - chef server vs. artifactory + berkshelf