65.9K
CodeProject 正在变化。 阅读更多。
Home

使用 Bear 将 Tomcat/Grails 应用部署到集群

starIconstarIconstarIconstarIcon
emptyStarIcon
starIcon

4.27/5 (3投票s)

2014年1月19日

公共领域

4分钟阅读

viewsIcon

14698

一个使用 Bear 部署 GitHub 上的 Petclinic Grails 演示项目的例子

引言

本文将介绍如何快速设置一个 Bear 项目,以便部署和运行 Tomcat/Grails 应用。

  • 在集群上安装软件:JDK、Maven、Tomcat、Grails 等。
  • 将您的应用程序部署到已安装的基础架构上
  • 管理 Tomcat 主机和实例:启动、停止、检查状态

完整的演示可以在 Bear 的 GitHub 项目页面 找到。如果您想运行这个例子,一种更简单的方法是修改这个演示以适应您自己的情况并运行它。

背景

Bear 是一个轻量级的、用于 Groovy/Java/JVM 的远程自动化工具。Bear 与其他现有工具的不同之处在于它使用了编程方法。在 Bear 中,您的部署是一个普通的 Java 类,它可以有自己的 main() 方法。Bear 偏爱 static 类型安全、链式方法调用、FP 和流畅的编程技术。

安装 Bear

Bear 需要

  • 1 台及以上具有 Linux 操作系统、标准密码身份验证的远程机器
  • JDK 8(推荐用于 UI),JDK 7+ 用于运行控制台/UI
  • Maven 3+。mvn 必须在命令行中可用。

如何在 Windows 上安装 Maven

要安装 Bear,请在您的命令行中输入(可能需要管理员权限)

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

创建项目

要在现有项目中或只是在一个空文件夹中创建一个新的 Bear 项目

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

这将创建一个名为 .bear 的文件夹,其中包含自动生成的项目文件。
注意:当前版本中密码存储不安全。如果您想在本地文件中存储密码,可以编辑 .bear/petclinic.properties 文件。

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

$ bear pet-clinic.ls

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

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

添加插件

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

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

JavaPlugin java
MavenPlugin maven                  // optional, will install Maven
GitCLIPlugin git
MySqlPlugin mysqlPlugin
DeploymentPlugin deployment        // deployment builder, a Builder class to glue the plugins together
DumpManagerPlugin dumpManager      // optional, can be used for defining DbDump jobs
TomcatPlugin tomcat
GrailsPlugin2 grails

现在让我们看看工具版本是如何设置的,变量是如何链接的

@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")      // this will create 2 Tomcat instances on each host
  tomcat.warName.setEqualTo(grails.warName);  // links tomcat war-name to deploy to grails war-name

  dumpManager.dbType.set(mongo.name());       // DB type for dump manager: mysql or mongodb

  bear.appStartTimeoutSec.set(600)            // override startup timeout for 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

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

$ bear pet-clinic.setup --ui

或者在 main()

new PetClinicProject().setup()

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

添加部署

GitHub 项目地址在注解中设置

@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 中的 $
 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()     // actions to take when there is an error
    .beforeLinkSwitch({_, task -> _.run(tomcat.stop); } as TaskCallable)
    .afterLinkSwitch({_, task -> _.run(tomcat.start, tomcat.watchStart); } as TaskCallable)
  .endRollback()

整个过程看起来有点繁琐,但很难为相同的语义找到更短的语法。它的作用是将任务分配给部署阶段,这些阶段将在其他地方重用,例如启动、停止或回滚发布。

部署和管理 Tomcat

要部署您的应用程序,只需键入(main() 版本始终可用)

$ bear pet-clinic.deploy --ui

部署完成后,在您的浏览器中导航到其中一个主机,如果一切顺利,您将看到绿色的宠物。

要停止或启动 Tomcat 实例,请键入

$ bear pet-clinic.start --ui
$ bear pet-clinic.stop --ui

完整的演示可以在 Bear 的 GitHub 项目页面 找到。

关注点

整个过程可能看起来很乏味,但实际上您只需要复制和修改原始项目。而且我相信这比手动配置多实例 Tomcat 集群要少得多,而且还有其他一些优点。

如果在某个时候,您厌倦了按照说明操作,可以尝试探索命令 API(参见 Wiki),编写自己的部署或研究源代码(呃……好吧,有些东西还在开发中 ;-))。Bear 的编写初衷是保持简单。如果您只需要构建 WAR 并将其复制到多个主机,那就直接去做吧!

在接下来的文章中,我将介绍快速 Java 集群设置和一个简单的“无部署”构建示例。

祝您部署好运!

 
© . All rights reserved.