我正在为 JVM 项目(Java、Spring、Grails 等)寻找一个非常简单的部署工具,具有以下功能:
- 不需要专用服务器/代理/等,我想从一台开发人员机器(或 CI 服务器)作为简单的控制台命令运行部署
- 不需要任何特殊的服务器配置,也不应该为您进行服务器配置
- 只需使用 SCP 或理想情况下使用 rsync 上传 WAR(仅更新已更改的文件)
- (理想情况下)静态文件上传到 s3/cloudfront
- 可以在远程服务器上运行命令(重新启动 tomcat 服务)
- 在服务器上存储一些最新版本,并能够回滚到其中的任何一个(基本上它应该是符号链接的更新)
- 可以配置为使用不同的服务器(测试、登台和生产)
- (理想情况下)有一个 Maven 插件或 Grails 插件
- 支持并行上传到少数服务器
应该是这样的:
$ deploytool staging deploy
$ deploytool staging rollback
或者
$ mvn deploytool:deploy -P staging
$ mvn deploytool:rollback -P staging
基本上它只是一个:
- 编译 + 测试 + 构建存档
- 在服务器上创建“日期”目录 (
/.../application/version-%date%/
) - 将 WAR 内容上传到这个目录,从本地机器
- 从以前的更新符号链接(
/.../application/current/
- >/.../application/version-%date%/
- 重启tomcat (
sudo service tomcat7 restart
) - 删除最旧版本的目录(仅保留最近 5 个版本,或最近 45 天的版本)
- 如果有问题 - 将符号链接更新到以前的版本(并重新启动 tomcat)
我看过 Puppet 和 JClouds,但似乎是不同的东西,更多的是关于集群配置,而不是部署。目前我在一个项目中使用 Ruby Capistrano,在另一个项目中使用 bash 脚本。Capistrano 很好,但需要安装 rvm、ruby、gems 等,对于非 ruby 团队来说效果不佳,并且需要对 java 项目进行大量自定义。
所以,我想知道,有没有类似 Capistrano 的 Java/JVM 项目工具?