1

我有一个 git 存储库,其中包含一个简单的 Web 应用程序。Web 应用程序作为典型的 Scala 应用程序运行(我使用未过滤来具体说明)。换句话说,我可以使用“sbt start”在生产环境中运行 Web 应用程序。

我希望有一种更简单的方法来将更新部署到 Web 应用程序。我一直在创建一个程序集,将其复制到服务器,手动停止旧服务器,并启动一个新的服务器实例。

我的想法是拥有一个web直接推送到生产服务器的新远程存储库。然后我可以在生产 git 存储库上添加一个post-receive钩子,它会杀死旧服务器并启动一个新服务器。

这是自动部署的合理设置吗?是否有任何工具可以帮助执行此操作sbtgit

4

3 回答 3

1

我通常使用 Git 钩子部署 PHP 应用程序。基本思想是,从更新后挂钩执行第二个(非裸)存储库的更新和新版本的签出。之后,更新脚本更新数据库并向我发送电子邮件。

您可以使用这种方法进行最少的更改。克隆您的存储库以在 Web 服务器上构建区域并制作一个脚本,该脚本将:

  1. cd 到第二个存储库。
  2. 重置 GIT_DIR 环境变量(它说明您的原始存储库在哪里,但您现在不想使用它)。
  3. 从原始存储库 ( git fetch origin) 获取更改。
  4. 检查它们(git checkout --force master && git reset --hard或类似的东西,只是为了确保它总是会成功)。
  5. 构建您的应用程序并进行部署。

然后从原始存储库中的更新后挂钩运行此脚本。这里没有什么复杂的。

于 2013-03-01T03:17:41.713 回答
1

是的,您的解决方案适用于简单的情况。但它的扩展性很差,因为当你的软件变得更复杂时,你需要以命令的方式改变钩子。

看看其中一个持续集成服务器JenkinsTravis是很好的起点)。当您只指定所需的结果时,使用 CI 服务器允许您使用声明性方法。CI 服务器负责您的大部分任务:从 repo 中获取最新代码、构建它、测试、打包、部署、发送电子邮件。此外,在与并行分支中的团队合作时,它也会很有用。总结:CI 为您的构建过程带来可扩展性,当您的代码库日益复杂并不会干扰您的部署时。

于 2013-02-28T23:38:56.497 回答
0

https://rubygems.org/gems/git-runner

它是一个 ruby​​ gem(你不需要在你的应用程序中使用 Ruby 来利用它)在推送到 git 存储库后执行任务。然后,您可以编写自己的类来执行所需的部署任务(或查看使用/修改现有的 git-runner-deploy gem)。这可能符合您的要求,但如果您已经在流程中的某个地方使用了 ruby​​,那么使用它可能会更开心?

于 2013-03-01T01:58:12.733 回答