使用 Maven 快速部署 Cloud Foundry 应用程序

工程 | Gunnar Hillert | 2011年9月22日 | ...

Apache Maven 在 Java 社区中是构建和部署应用程序的流行选择。Cloud Foundry 团队发布了 Cloud Foundry Maven Plugin(Cloud Foundry Maven 插件)以集成应用程序的开发生命周期,包括部署到云端。同一个 Maven 插件可以用于管理对任何 Cloud Foundry 实例的应用程序推送和更新。

Cloud Foundry 的主要承诺之一是在不限制可用选择的情况下,让开发者的生活变得更加轻松。Cloud Foundry 不仅支持多种语言(Java、Groovy、Scala、Ruby 等)和框架(Spring、Grails、Rails、Sinatra、Lift 等),还允许您将应用程序部署到不同的环境中。这包括公共云,例如 Cloudfoundry.comAppFog.com合作伙伴提供的云产品,单虚拟机 Micro Cloud Foundry,以及使用 Cloud Foundry 开源构建的私有云,后者在宽松的 Apache 许可证 v2 下对所有人开放。

我们希望为您提供将应用程序部署到 Cloud Foundry 的完整选择。目前您可以通过以下途径:

介绍 Cloud Foundry Maven Plugin。使用 Cloud Foundry Maven Plugin,开发者现在可以轻松地将云部署集成到他们的 Maven 项目生命周期中。此插件还提供了从持续集成服务器(如 HudsonJenkins)部署应用程序的更简便方法。此外,Cloud Foundry Maven Plugin 还允许您:
  • 将基于 Maven 的项目部署(推送)到 Cloud Foundry
  • 从 Cloud Foundry 卸载基于 Maven 的项目
  • 重新部署(更新)基于 Maven 的 Cloud Foundry 项目
虽然此插件仿照 VMC、Grails 插件和 STS,但它确保用户体验感觉就像 Maven 原生一样。其底层使用了开源的 Cloud Foundry Java Client 库,STS Cloud Foundry 插件也使用了该库。要使用 Cloud Foundry Maven Plugin,您只需安装 Apache Maven

使用 Cloud Foundry Maven Plugin,您只需使用以下命令即可构建和部署应用程序:


$ mvn cf:push

如果您不熟悉 Maven,请参阅 Josh Long 的博客文章《青豆:Maven 与 Spring 入门》。

示例应用程序

为了入门并演示基本步骤,我想使用 SpringSource 的 Cloud Foundry 示例集合中一个超级简单的基于 Maven 的 Hello Java 应用程序。此应用程序的唯一功能是输出该应用程序运行的主机和端口。

Screenshot of the deployed Cloud Foundry sample application

让我们下载并构建示例应用程序(请确保已安装 Git


$ git clone https://github.com/SpringSource/cloudfoundry-samples.git
$ cd cloudfoundry-samples/hello-java
$ mvn clean package

这应该会在项目的 target 文件夹中生成一个名为 ‘hello-java-1.0.war’ 的 war 文件。

初次部署到 CloudFoundry.com

现在,让我们设置 Cloud Foundry Maven Plugin。作为最低配置,您需要将该插件添加到项目的 pom.xml 文件中:


    <plugin>
        <groupId>org.cloudfoundry</groupId>
        <artifactId>cf-maven-plugin</artifactId>
        <version>1.0.0.M1</version>
    </plugin>

此外,该插件的里程碑版本尚未在 Maven Central 仓库中发布。因此,请确保您也在 pom.xml 文件中添加 Spring Framework Milestone Repository



 <pluginRepositories>
         ...
	<pluginRepository>
	    <id>repository.springframework.maven.milestone</id>
	    <name>Spring Framework Maven Milestone Repository</name>
	    <url>http://maven.springframework.org/milestone</url>
	</pluginRepository>
        ...
</pluginRepositories>

这代表了最基本的配置。当然,您通常会想添加更多配置选项,例如:

  • Cloud Foundry 目标 URL
  • 用户凭据(用户名和密码)
  • 应用程序 URL
  • 使用的 Cloud Foundry 服务(例如 MySQL 或 Mongo)
以下是包含附加参数的 pom.xml 文件:


    <project>
	      ...
	    <build>
	        <plugins>
	            <plugin>
	                <groupId>org.cloudfoundry</groupId>
	                <artifactId>cf-maven-plugin</artifactId>
	                <version>1.0.0.M1</version>
	                <configuration>
	                    <server>mycloudfoundry-instance</server>
	                    <target>http://api.cloudfoundry.com</target>
	                    <url>hello-java-maven.cloudfoundry.com</url>
	                    <memory>256</memory>
	                </configuration>
	            </plugin>
	        </plugins>
	    </build>
	      ...
    </project>

Cloud Foundry 登录凭据怎么办?虽然可以将这些凭据作为配置参数存储在 pom.xml 文件中,但我们建议将其单独存储在 Maven 的 settings.xml 文件中。此文件通常位于用户主目录下的 .m2 文件夹中,例如 ~/.m2/settings.xml

一个典型的条目可能看起来像这样:



    <settings>
        ...
	    <servers>
	        ...
	        <server>
	          <id>mycloudfoundry-instance</id>
	          <username>[email protected]</username>
	          <password>s3cr3t</password>
	        </server>
	    </servers>
	    ...
    </settings>

注意,在您的 pom.xml 文件中,您使用与 settings.xml 文件中的 `` 元素匹配的配置参数(值 ‘mycloudfoundry-instance’)来引用 settings.xml 文件中的服务器参数。作为另一种选择,您还可以将 Cloud Foundry 凭据作为命令行参数提供。

请记住,所有配置参数都可以通过命令行属性设置,这对于一次性操作、测试等非常方便。例如,您可以将上面显示的所有配置参数表示为:


$ mvn cf:info [email protected] -Dcf.password=s3cr3t -Dcf.memory=256 -Dcf.url=hello-java-maven.cloudfoundry.com \
              -Dcf.target=http://api.cloudfoundry.com

Cloud Foundry Maven Plugin 的命令行参数优先于基于 pom.xml 的参数。此外,许多配置参数都有合理的默认值。有关更多详细信息,请阅读参考文档:https://github.com/cloudfoundry/vcap-java-client

为了本示例的目的,我们将继续使用 pom.xml 和 settings.xml 中的扩展配置。

现在我们已经为项目配置好了插件,接下来可以执行一些命令了。通常,所有使用 Maven 插件的调用都遵循相似的模式:


$ mvn cf:<<command>> [-Dcf.some_parameters] [-Dcf.some_other_parameter...]

让我们进行初次部署并将应用程序推送到 Cloudfoundry.com:


$ mvn cf:push

这可能会失败,因为我们上面为应用程序定义的 URL (hello-java-maven.cloudfoundry.com) 可能已经被占用(我的实例)。因此,您将看到以下错误消息:

...'The URI: "hello-java.cloudfoundry.com" has already been taken or reserved'...

因此,请确保您为应用程序选择的 URL 未被其他人使用。请使用唯一的 URL 参数重试 - 几秒钟后,我希望可以祝贺您使用 Maven 成功将您的第一个应用程序部署到 Cloud Foundry!

接下来我们将进行应用程序更新。让我们编辑:

/src/main/java/org/cloudfoundry/samples/HelloServlet.java

我将修改一些文本输出,例如:


    public class HelloServlet extends HttpServlet {

         protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
            ...
            writer.println("Cloud Foundry Rocks - Your application host's Ip address and port is: " + System.getenv("VCAP_APP_HOST") + ":" + System.getenv("VCAP_APP_PORT"));
            ...
        }
    }

修改后,执行以下 Maven 命令:


$ mvn clean cf:update

命令完成后,您应该会在已部署的应用程序中看到这些更改。

部署到您的本地 Micro Cloud Foundry

随着 Micro Cloud Foundry 的最新发布,您现在可以直接从您的笔记本电脑离线运行您的云应用程序,当然 Cloud Foundry Maven Plugin 也将支持您的这些本地部署。要设置您的 Micro Cloud Foundry 实例,请按照以下步骤操作:

http://support.cloudfoundry.com/entries/20316811

一旦您的 Micro Cloud Foundry 运行起来,您需要设置一个本地用户。为此,请执行以下 Maven 命令:


$ mvn cf:register -Dcf.target=http://api.YOURMICROCLOUDNAME.cloudfoundry.me -Dcf.username=<provide new username> \
               -Dcf.password=<provide new password>

请注意,用户名必须是电子邮件地址的形式。之后,我们可以开始使用我们的本地 Micro Cloud Foundry 实例了。命令与部署到 Cloudfoundry.com 时完全相同。例如,您可以通过执行以下命令在本地部署示例应用程序:


$ mvn cf:apps -Dcf.target=http://api.YOURMICROCLOUDNAME.cloudfoundry.me -Dcf.password=s3cr3t -Dcf.username=the_username_registered_above \
              -Dcf.url=hello-java.YOURMICROCLOUDNAME.cloudfoundry.me

我们的应用程序现在应该正在运行。为了验证,让我们获取已部署应用程序的列表:


$ mvn cf:apps -Dcf.target=http://api.YOURMICROCLOUDNAME.cloudfoundry.me -Dcf.password=s3cr3t -Dcf.username=the_username_registered_above
    ...
+-------------+---+---------+--------+-----------------------------------------------+----------+
| Application | # | Health  | Memory | URLS                                          | Services |
+-------------+---+---------+--------+-----------------------------------------------+----------+
| hello-java  | 1 | STARTED | 512    | hello-java.YOURMICROCLOUDNAME.cloudfoundry.me |          |
+-------------+---+---------+--------+-----------------------------------------------+----------+

未来发展

目前,Cloud Foundry Maven Plugin 仅提供了 VMC 功能的一个子集。在接下来的几周内,我们期望在有意义的范围内实现功能对等。请关注 Github 上的项目,我们将非常感谢您的反馈。让我们开始编码吧——担心基础设施已经是过去式了!

资源

获取 Spring 新闻通讯

通过 Spring 新闻通讯保持联系

订阅

领先一步

VMware 提供培训和认证,助您加速进步。

了解更多

获取支持

Tanzu Spring 在一个简单的订阅中提供 OpenJDK™、Spring 和 Apache Tomcat® 的支持和二进制文件。

了解更多

即将举行的活动

查看 Spring 社区所有即将举行的活动。

查看全部