如何在OpenShift上使用Gradle构建Java项目

Tags: java gradle openshift

OpenShift简介

OpenShift是红帽公司推出的一个云计算服务平台,开发人员可以用它来构建和发布web应用。Openshift广泛支持多种编程语言和框 架,如Java,Ruby和PHP等。另外它还提供了多种集成开发工具如Eclipse integration,JBoss Developer Studio和 Jenkins等。OpenShift 基于一个开源生态系统为移动应用,数据库服务等,提供支持。

OpenShift Online服务构建在Red Hat Enterprise Linux上。Red Hat Enterprise Linux提供集成应用程序,运行库和一个配置可伸缩的多用户单实例的操作系统,以满足企业级应用的各种需求。更详细的信息请参考:OpenShift技术架构

Gradle简介

Gradle 是以 Groovy 语言为基础,面向Java应用为主。基于DSL(领域特定语言)语法的自动化构建工具。

前言

自从OpenShift的第一个版本开始,Apache Maven就是是OpenShift上默认的Java项目构建工具。所有在OpenShift上创建的Java项目都依基于Maven。几个月前,我们还 添加了Apache Ant支持,所有的OpenShift Gears(注:Gears 一系列资源的容器,允许用户在其中运行应用)都已安装了Apache Ant,如果要使用Ant构建系统仅需要更新OpenShift的build action hook。更详细的内容,可以参考如何在OpenShift上使用Ant构建Java项目这篇文章。

后来,我们看到很多开发人员在询问如何才能在OpenShift上使用Gradle构建他们的项目。Gradle。 Gradle综合了Ant的能力和灵活性与Maven的依赖管理和规范的同时,使用了一个更有效的方法来构建系统。很多开源项目和企业项目都使用 Gradle作为他们的构建系统。在这篇文章中,我们将要学习如何配置OpenShift Java项目使用Gradle替换Apache Maven进行构建。

先决条件

在我们开始构建应用之前,我们需要先做一些配置工作:

  1. 注册一个OpenShift账号

    OpenShift账号是免费的,并且Redhat为每位用户提供3个免费的Gear来运行应用。目前,每位用户可使用的资源是1.5GB内存和3GB磁盘空间。

  2. 在你的计算机上安装rhc客户端工具

    rhc是由Ruby gem管理的,因此需要在你的计算机上安装ruby 1.8.7及更高版本。使用命令sudo gem install rhc来安装rhc。如果已经安装过rhc的话,需要确保rhc是最新版本。可以使用命令sudo gem update rhc来升级你的rhc。可以访问https://openshift.redhat.com/community/developers/rhc-client-tools-install来获得更多rhc的配置帮助信息。

  3. 使用rhc setup来设置OpenShift账号。这个命令可以帮助你配置一个命名空间同时上传你的ssh秘钥到OpenShift服务器上。

步骤1:创建OpenShift Tomcat 7应用

配置完OpenShift账号后,下一件要做的事情就是创建应用。可以使用以下命令来创建应用:

$ rhc app create gradledemo tomcat-7

上面的命令将为我们创建一个应用容器,称之为"gear",并且为我们生成了必要的SELinux策略和cgroup配置,然后OpenShift 会在gear上安装必要的软件。OpenShift会在gear上安装一个私有的git容器(包含一些模板代码),我们需要clone这个git容器到本 地。最后,OpenShift会向外部传播账号的DNS信息。

应用程序可以通过https://gradledemo-{domain-name}.rhcloud.com/访问。{domain-name}需要替换为账号的域名。

步骤2:删除应用程序的模板代码

当我们完成步骤1后,OpenShift会创建一个基于Maven的Java应用模板,我们需要删除这些代码

$ git rm -rf src/
$ git rm -f pom.xml
$ git commit -am "removed template application source code"

步骤3:从github上pull源代码 下面我们将从我的github容器上pull源代码。它是一个简单的使用Gradle来构建的spring mvc应用程序。

$ git remote add upstream -m master https://github.com/shekhargulati/spring-mvc-gradle-quickstart.git
$ git pull -s recursive -X theirs upstream master

项目包含一个简单的SampleController控制器,映射到"home"上下文。如果用户访问http://localhost:8080 /home可以在浏览器中看到"Hello, Gradle User!"信息。如果你的计算机上安装了Gradle,那么可以执行gradle jettyRunWar来启动应用,并且通过http://localhost:8080/home来访问。

Gradle_Demo.png

build.gradle

如果你没有接触过Gradle,build.gradle文件用来定义构建脚本的。下面是这个项目的build.gradle文件:

1. apply plugin: 'war'
2. apply plugin: 'jetty'
3. apply plugin: 'eclipse-wtp'

4. repositories {
   mavenCentral()
}

5. dependencies {
   providedCompile 'javax.servlet:servlet-api:2.5'
   compile 'org.springframework:spring-webmvc:3.2.2.RELEASE'
   runtime 'javax.servlet:jstl:1.1.2'
}

/* Change context path (base url). otherwise defaults to name of project */
6. jettyRunWar.contextPath = ''

build.gradle是自解释的非常容易理解。

  1. build.gradle文件最上面三行用来定义项目中要使用的插件。我们将使用war插件来装配war文件,jetty插件用来在本地启动jetty容器,eclipse-wtp插件是用来生产eclipse需要的项目文件。

  2. 第4行开始是定义我们的项目使用Maven中央库来下载所有的依赖

  3. 第5行开始的区块用来定义我们项目需要的依赖

  4. 在第6行中,我们定义装配后的应用程序将使用根上下文访问。如果修改第6行"sampleapp",那么组装后的应用将需要通过http://localhost:8008/sampleapp/home地址来访问。

步骤4:更新build.gradle

为了让build.gradle能在OpenShift上工作,我们需要修改两个地方。首先需要修改war的文件名为"ROOT.war"这样应用 就可以使用根路径进行访问。下一个修改是修改war文件生成的路径到webapps目录下。我们可以通过调整war插件的配置完成这些工作:

war{
 archiveName = 'ROOT.war'
 destinationDir = file('webapps')
}

修改后的build.gradle文件在这里

步骤5:创建OpenShift的Action Hooks

最后,我们需要配置OpenShift gear安装Gradle以及使用Gradle来构建项目。要完成这个工作我们需要配置两个actioin hooks:pre_build 和 build。pre_build action hook会在构建之前被调用,它是安装Gradle的理想位置。build action hook回来部署脚本开始前被调用,我们使用它来构建项目。

创建 pre_build action hook

.openshift/action_hooks目录下创建pre_build文件:

$ touch .openshift/action_hooks/pre_build

将下面内容放到pre_build文件中,这些命令用来下载gradle的可执行安装包,并解压到指定目录$OPENSHIFT_DATA_DIR/gradle-1.6然后删除安装包。这个动作只会在第一次构建时执行一次(因为代码中判断$OPENSHIFT_DATA_DIR/gradle-1.6是否存在)。

#!/bin/bash
set -x
if [ ! -d $OPENSHIFT_DATA_DIR/gradle-1.6 ]
then
    cd $OPENSHIFT_DATA_DIR
    mkdir gradle
    wget http://services.gradle.org/distributions/gradle-1.6-bin.zip
    unzip gradle-1.6-bin.zip
    rm -f gradle-1.6-bin.zip
fi

创建build action hook

接下来我们继续创建build action hook,这个文件同样创建在.openshift/action_hooks目录下。

$ touch .openshift/action_hooks/build

使用下面内容更新build文件。这些命令创建一些Gradle需要的环境变量。在OpenShift环境中只有$OPENSHIFT_DATA_DIR目录是可写的,最后一条命令将在$OPENSHIFT_REPO_DIR目录下执行gradle build

#!/bin/bash
set -x
cd $OPENSHIFT_REPO_DIR
export GRADLE_USER_HOME=$OPENSHIFT_DATA_DIR/gradle
export GRADLE_HOME=$OPENSHIFT_DATA_DIR/gradle-1.6
export PATH=$GRADLE_HOME/bin:$PATH
gradle build

默认情况下,我们创建的这些action hooks是不可执行的,因此OpenShift gear无法执行他们。使用下面命令修改文件属性,使他们可执行:

$ chmod +x .openshift/action_hooks/pre_build
$ chmod +x .openshift/action_hooks/build

步骤6:commit 和 push

最后,我们需要提交所做的修改,并且push这些修改到OpenShift gear。

$ git add .
$ git commit -am "added action hooks"
$ git push

现在可以通过http://gradledemo-{domain-name}.rhcloud.com/home访问应用程序了,记得修改{domain-name}为你的账号的domain name。

步骤7:与Jenkins协同 在OpenShift中使用Jenkins可以参考:如何在OpenShift环境中使用Jenkins构建混合持久化应用 这篇文章。 使用Jenkins来构建项目有很多好处。其中给一个主要的优点是,使用Jenkins来构建项目时,构建过程是在jenkins自身的gear中进行。 如果不适用jenkins,应用程序的构建过程会在应用程序自身的gear中执行,这有可能使gear超出资源限制(如:内存限制)。

要使用jenkins,首先需要创建Jenkins应用。下面的命令用来创建Jenkins应用,成功时会返回Jenkins管理员的账号和密码(最好把它们记录下来):

$ rhc app create jenkins jenkins

创建好Jenkins饮用后,想gradledemo应用增加Jenkins客户端的cartridge。

$ rhc cartridge add jenkins-client --app gradledemo

使用之前记录的管理员账号和密码登陆Jenkins实例。选择gradledemo项目的点击左侧的"Build Now"立即构建项目。

Gradle_demo_build.png

嗯哼,现在所有的action hooks将由Jenkins构建进程调用,正如我们预期的那样。

结论

在这篇文章中,我们讨论了如何在OpenShift中使用Gradle构建项目。OpenShift的灵活性是的我们可以非常容易的在其上使用我们习惯的工具。所以,如果你是Gradle的用户,尝试一下在使用Gradle在OpenShift上构建项目吧。

来源:Run Gradle Builds on OpenShift

翻译:4byte.cn

本文链接:http://www.4byte.cn/learning/119976/ru-he-zai-openshift-shang-shi-yong-gradle-gou-jian-java-xiang-mu.html