在与两个同事(感谢Mark Alston , Dave 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任务即可:
所有任务均以构建脚本中cfConfig块中提供的以下方式进行配置:
apply plugin: 'cf-app'cfConfig {//CF DetailsccHost = "api.local.pcfdev.io"ccUser = "admin"ccPassword = "admin"org = "pcfdev-org"space = "pcfdev-space"//App Detailsname = "cf-show-env"hostName = "cf-show-env"filePath = "build/libs/cf-show-env-0.1.2-SNAPSHOT.jar"path = ""domain = "local.pcfdev.io"instances = 2memory = 512//Env and servicesbuildpack = "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