领先一步
VMware 提供培训和认证,助您加速进步。
了解更多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.com 和 AppFog.com,合作伙伴提供的云产品,单虚拟机 Micro Cloud Foundry,以及使用 Cloud Foundry 开源构建的私有云,后者在宽松的 Apache 许可证 v2 下对所有人开放。
我们希望为您提供将应用程序部署到 Cloud Foundry 的完整选择。目前您可以通过以下途径:
介绍 Cloud Foundry Maven Plugin。使用 Cloud Foundry Maven Plugin,开发者现在可以轻松地将云部署集成到他们的 Maven 项目生命周期中。此插件还提供了从持续集成服务器(如 Hudson 和 Jenkins)部署应用程序的更简便方法。此外,Cloud Foundry Maven Plugin 还允许您:使用 Cloud Foundry Maven Plugin,您只需使用以下命令即可构建和部署应用程序:
$ mvn cf:push
如果您不熟悉 Maven,请参阅 Josh Long 的博客文章《青豆:Maven 与 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 仓库中发布。因此,请确保您也在 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>
这代表了最基本的配置。当然,您通常会想添加更多配置选项,例如:
<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 文件中的 `
请记住,所有配置参数都可以通过命令行属性设置,这对于一次性操作、测试等非常方便。例如,您可以将上面显示的所有配置参数表示为:
$ 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
命令完成后,您应该会在已部署的应用程序中看到这些更改。
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 | |
+-------------+---+---------+--------+-----------------------------------------------+----------+