介绍“又一个” Cloud Foundry Gradle插件

在与两个同事(感谢Mark AlstonDave Malone !)一起使用自动Jenkins管道部署Cloud Foundry应用程序的过程中,我决定尝试编写Gradle插件来执行一些通常需要完成的任务使用命令行Cloud Foundry Client完成

介绍带有一组gradle任务(我敢说,敢于说!)的完全没有想象力的“ ya-cf-app-gradle-plugin” ,这应该有助于自动化将Java应用程序部署到Cloud Foundry环境中涉及的一些常规步骤。 “ ya”或另一部分是因为这只是一个替代插件,Cloud Foundry的权威插件最终将驻留在出色的CF-Java-Client项目中。

我已经提供了带有项目文档的广泛自述文件,该文件应有助于开始使用插件,如果您以前使用过CF cli,则任务应该相当直观。

举例来说,将gradle插件干净地添加到构建脚本中后,通过运行“ ./gradlew task”命令列出以下gradle任务即可:

介绍“又一个” Cloud Foundry Gradle插件

所有任务均以构建脚本中cfConfig块中提供的以下方式进行配置:

apply plugin: 'cf-app'

cfConfig {
 //CF Details
 ccHost = "api.local.pcfdev.io"
 ccUser = "admin"
 ccPassword = "admin"
 org = "pcfdev-org"
 space = "pcfdev-space"

 //App Details
 name = "cf-show-env"
 hostName = "cf-show-env"
 filePath = "build/libs/cf-show-env-0.1.2-SNAPSHOT.jar"
 path = ""
 domain = "local.pcfdev.io"
 instances = 2
 memory = 512

 //Env and services
 buildpack = "https://github.com/cloudfoundry/java-buildpack.git"
 environment = ["JAVA_OPTS": "-Djava.security.egd=file:/dev/./urandom", "SPRING_PROFILES_ACTIVE": "cloud"]
 services  = ["mydb"]
}

通过使用“ cf. *”模式指定gradle属性,可以在以这种方式提供的基本配置之上进行任何覆盖。 例如。 正常推送应用程序将如下所示:

./gradlew cf-push

带有应用程序名称和覆盖的主机名的推送将如下所示:

./gradlew cf-push -Pcf.name=Green -Pcf.hostName=demo-time-temp

所有任务均遵循完全相同的模式,具体取决于cfConfig块(作为属性的权威来源)以及命令行替代。 在CloudFoundry中有一项任务可用于检索应用程序的某些详细信息,该任务为“ cf-get-app-detail”,例如,在部署了应用程序的Canary实例后,您想运行快速测试针对它,任务将遵循以下原则,一旦成功调用,将在结构“ project.cfConfig”中填充应用程序详细信息:

task acceptanceTest(type: Test, dependsOn: "cf-get-app-detail")  {
 doFirst() {
  systemProperty "url", "https://${project.cfConfig.applicationDetail.urls[0]}"
 }
 useJUnit {
  includeCategories 'test.AcceptanceTest'
 }
}

参考文献:

1.该插件基于出色的CF-Java-Client项目构建

2.我从gradle-cf-plugin借来了很多想法,但是或多或少是一个洁净室的实现。

3.这是一个使用插件的示例项目

翻译自: https://www.javacodegeeks.com/2016/07/introducing-yet-another-cloud-foundry-gradle-plugin.html