领先一步
VMware 提供培训和认证,助您加速进步。
了解更多Apache Maven 在 Java 社区中是构建和部署应用程序的非常流行的选择。Cloud Foundry 团队发布了 **Cloud Foundry Maven 插件**,以集成到应用程序的开发生命周期中,包括部署到云。同一个 Maven 插件可用于管理推送到任何 Cloud Foundry 实例的应用程序的推送和更新。
Cloud Foundry 的主要承诺之一是让开发者的生活变得更加轻松,同时又不限制可用选择。Cloud Foundry 不仅支持多种语言(Java、Groovy、Scala、Ruby 等)和框架(Spring、Grails、Rails、Sinatra、Lift 等),还允许您将应用程序部署到不同的环境。这包括公共云,例如 Cloudfoundry.com 和 AppFog.com,合作伙伴提供的云服务,单虚拟机 Micro Cloud Foundry,以及使用 Cloud Foundry 开源软件构建您自己的私有云,该软件在非常宽松的 Apache License v2 下对所有人开放。
我们希望您在如何将应用程序部署到 Cloud Foundry 方面拥有完全的选择权。到目前为止,您可以采用以下方式:
隆重推出 Cloud Foundry Maven 插件。通过 Cloud Foundry Maven 插件,开发者现在可以轻松地将云部署集成到其 Maven 项目的生命周期中。此插件还为您提供了更简单的方法,可以从持续集成服务器(如 Hudson 和 Jenkins)部署您的应用程序。除其他功能外,Cloud Foundry Maven 插件允许您:借助 Cloud Foundry Maven 插件,您只需使用类似以下的命令即可构建和部署您的应用程序:
$ mvn cf:push
如果您不熟悉 Maven,可以参考 Josh Long 的博客文章《Green Beans: Getting Started with Maven and Spring》。
让我们下载并构建示例应用程序(请确保已安装 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 文件。
<plugin>
<groupId>org.cloudfoundry</groupId>
<artifactId>cf-maven-plugin</artifactId>
<version>1.0.0.M1</version>
</plugin>
此外,该插件的里程碑版本尚未在 Maven Central 存储库中提供。因此,请确保您还将 Spring Framework Milestone Repository 添加到 pom.xml 文件中。
<pluginRepositories>
...
<pluginRepository>
<id>repository.springframework.maven.milestone</id>
<name>Spring Framework Maven Milestone Repository</name>
<url>http://maven.springframework.org/milestone</url>
</pluginRepository>
...
</pluginRepositories>
这代表了最基本的配置。当然,您通常希望添加一些额外的配置选项,例如:
<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 插件的命令行参数优先于基于 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
命令完成后,您应该会在已部署的应用程序中看到更改已生效。
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 | |
+-------------+---+---------+--------+-----------------------------------------------+----------+