使用Bear自动化部署Java应用

Bear是一个轻量级的远程自动化工具,专为Groovy/Java/JVM设计。它与其他自动化工具不同,因为它采用了程序化的方法。在Bear中,部署是一个常规的Java类,可以包含一个main()方法。Bear偏爱静态类型安全、链式方法调用、函数式编程和流畅的编程技术。

安装Bear

Bear需要以下条件:

  • 至少一台远程Linux机器,使用标准密码认证
  • JDK 8(推荐用于UI),JDK 7+用于运行控制台/UI
  • Maven 3+。必须在命令行中可用mvn

在Windows上安装Maven:

sh $ mvn com.chaschev:installation-maven-plugin:1.4:install -Dartifact=com.chaschev:bear

创建项目

要在现有项目中或空文件夹中创建一个新的Bear项目,请执行以下操作:

sh $ cd pet-clinic sh $ bear --create pet-clinic --user my-actual-ssh-user --password my-actual-password --host my-remote-host

这将创建一个包含自动生成项目文件的.bear文件夹。

注意:当前版本中密码存储不安全。如果想在本地文件中存储密码,可能需要编辑.bear/petclinic.properties文件。

接下来,如果有多个主机,请编辑创建的项目中的hosts和stages,在文件.bear/PetClinicProject.groovy中。要快速检查设置,请运行:

sh $ bear pet-clinic.ls

这将启动一个预定义的ls作业,这是一个用@Method注解标记的Java类中的常规方法。这应该会显示UI:

接下来,可以运行冒烟测试以确保一切正常。

添加插件

可以在喜欢的JavaIDE或文本编辑器中编辑Bear项目。有关如何使用Intellij Idea进行操作的说明。如果想在Eclipse或Netbeans中编辑Bear项目,并且在编辑Groovy类时遇到麻烦,可以将其转换为Java并作为Java类进行编辑。

通过在Bear项目中声明插件类型的字段来添加插件。插件实例将在项目初始化期间注入:

JavaPlugin java MavenPlugin maven //可选,将安装Maven GitCLIPlugin git MySqlPlugin mysqlPlugin DeploymentPlugin deployment //部署构建器,一个Builder类,用于将插件粘合在一起 DumpManagerPlugin dumpManager //可选,可用于定义DbDump作业TomcatPlugin tomcatGrailsPlugin2 grails

现在让看看如何设置工具版本和变量链接:

Java@Override protected GlobalContext configureMe(GlobalContextFactory factory) throws Exception { maven.version.set("3.1.1"); java.versionName.set("jdk-7u51-linux-x64"); java.version.set("1.7.0_51"); grails.version.set("2.1.1") tomcat.instancePorts.set("8080, 8081") //这将在每个主机上创建2个Tomcat实例 tomcat.warName.setEqualTo(grails.warName); //将Tomcat war名称链接到部署到grails war名称 dumpManager.dbType.set(mongo.name()); //dump manager的DB类型:mysql或mongodb bear.appStartTimeoutSec.set(600) //覆盖Tomcat的启动超时 }

使用project.setup安装软件

要远程安装JDK,需要手动下载Oracle JDK发行版(对于Node.js项目不需要),并将其放到以下位置。在这个例子中,使用的是JDK 7u51:

(Windows) c:\bear\shared\tools\jdk\jdk-7u51-linux-x64.gz (Unix) /var/lib/bear/shared/tools/jdk/jdk-7u51-linux-x64.gz

这将在将来被脚本化,目前下载是手动的。然后在控制台中:

sh $ bear pet-clinic.setup --ui

或者在main()中:

Java new PetClinicProject().setup()

这将安装并验证软件,还将使可执行文件从命令行可用。

GitHub项目地址在注释中设置:

Java @Configuration( ... vcs = "https://github.com/grails-samples/grails-petclinic.git", branch = "master"... )

使用DeploymentPlugin构建部署。下面是任务的描述。每个任务都是一个函数,它将在每个主机上运行。

global.tasks.vcsUpdate - 从GitHub检出或更新项目 grails.build - 使用Grails构建WAR tomcat.stop, tomcat.start - 启动/停止Tomcat实例 tomcat.deployWar - 将WAR解压缩到Tomcat tomcat.watchStart - 通过监视日志等待应用程序启动 _ - 一个通用对象,类似于jQuery中的$ Java defaultDeployment = deployment.newBuilder() .CheckoutFiles_2({_, task -> _.run(global.tasks.vcsUpdate); } as TaskCallable) .BuildAndCopy_3({_, task -> _.run(grails.build); } as TaskCallable) .StopService_4({_, task -> _.run(tomcat.stop); OK; } as TaskCallable) .StartService_6({_, task -> _.run(tomcat.deployWar, tomcat.start, tomcat.watchStart); } as TaskCallable) .endDeploy() .ifRollback() //当出现错误时采取的操作 .beforeLinkSwitch({_, task -> _.run(tomcat.stop); } as TaskCallable) .afterLinkSwitch({_, task -> _.run(tomcat.start, tomcat.watchStart); } as TaskCallable) .endRollback()

整个过程可能看起来繁琐,但实际上只需要复制并修改原始项目。相信这比手动配置多实例Tomcat集群要少一些烦恼,而且还有其他一些好处。

如果在某个时候对遵循指令感到厌烦,尝试探索命令API(见Wiki),编写自己的部署或研究源代码(嗯...好吧,那里的一些事情仍在进行中;-))。Bear的编写是本着保持简单的想法。如果只需要构建并将WAR复制到几个主机,那么就这样去做吧!

沪ICP备2024098111号-1
上海秋旦网络科技中心:上海市奉贤区金大公路8218号1幢 联系电话:17898875485