Cloud foundry 如何在一个清单文件中为不同的环境设置关键的Cloud Foundry环境变量?

Cloud foundry 如何在一个清单文件中为不同的环境设置关键的Cloud Foundry环境变量?,cloud-foundry,Cloud Foundry,在Pivotal Cloud Foundry中,有一种方法可以使Manifest.yml具有针对不同环境的不同环境变量。例如,我们有一个开发/测试/生产环境。在系统中,我希望有一个环境变量“service=development.pcf.domain.com”,在测试中,它应该是“service=test.pcf.domain.com” 我希望维护一个文件,并将所有环境变量放在一个清单中,而不必记住为每个环境传递哪个清单文件 换句话说,我不想有3个文件: manifest_development

在Pivotal Cloud Foundry中,有一种方法可以使Manifest.yml具有针对不同环境的不同环境变量。例如,我们有一个开发/测试/生产环境。在系统中,我希望有一个环境变量“service=development.pcf.domain.com”,在测试中,它应该是“service=test.pcf.domain.com”

我希望维护一个文件,并将所有环境变量放在一个清单中,而不必记住为每个环境传递哪个清单文件

换句话说,我不想有3个文件:

manifest_development.yml
-env: url=development.pcf.domain.com
manifest_test.yml
-env: url=test.pcf.domain.com
manifest_production.yml
-env: url=production.pcf.domain.com
我希望有一个文件定义所有环境变量,并根据应用程序部署的环境选择正确的文件:

manifest.yml:
env-development: 
-url=development.pcf.domain.com
env-test: 
-url=test.pcf.domain.com
env-production: 
-url=production.pcf.domain.com
查看“具有继承的多个清单”部分,例如


如果可能,最好通过CF services/cups向应用程序提供所有依赖的服务,并且应用程序通过解析VCAP_services环境变量来获得依赖于环境的配置,避免每个环境的应用程序配置文件。

我过去这样做的方式是利用管道

我用过詹金斯和康高斯

从技术上讲,您应该只部署到开发环境。所有后续部署都应通过管道完成

我要做的是,创建一个通用清单文件(generic manifest.yml),其中包含占位符。我将创建该文件的副本(manifest local.yml)。而那个只会用于开发环境

在我的管道中,我使用一些shell脚本生成manifest.yml,其中包含正确的环境细节(集成、uat、产品等)

我只需要维护一个文件——generic-manifest.yml。通常,每次对其进行更改时,我都会重新创建本地清单文件

最终,您可以拥有适合您的开发环境的管道,在这种情况下,您将不再需要本地清单文件

我会更进一步说,每次我必须开发一个新的微服务时,我会首先开发一个shell类,it测试类,然后是为这个微设备开发一个管道。这样,我就不必再担心将我的微服务推到CloudFoundry

你第一次做这件事时,会有一些工作要做。但一旦你养成了习惯,它就会变得天衣无缝


试一试。

我发现一些聪明的家伙已经用特定于环境的设置设置了spring\u active\u配置文件,所以我只需要创建application-system.properties并使用spring配置文件。

谢谢,我会检查它的。我们的组织刚刚开始使用pcf,按照向我解释的方式,他们需要先做一些工作,以允许我们注册我们的服务。当这种情况发生时,我同意将服务作为服务参数传递。不幸的是,在其他情况下,我将不得不在pcf之外呼叫尚未转换的遗留服务。我可能误解了一件事。看起来我必须为每个环境使用不同的应用程序名称?这似乎是个坏主意,因为调用my micro service的所有其他应用程序都必须知道其当前环境的服务名称。您好@George No,在您的场景中,您需要提供(cf push-f)不同的应用程序清单文件以及每个环境的设置。您的应用程序名称和所有公共设置可以保存在base-manifest.yml中,该文件在所有环境中通用,并在每个环境清单中继承。我希望这能有所帮助。[Concourse](Concourse.ci)是免费的,您可以在几分钟内安装并运行它。广场最初可能会让人困惑。但是一旦你掌握了窍门,你就会开始用它做任何事情。我们什么都用广场管道。从头开始构建PCF、升级PCF分片、部署代码等等。
---
inherit: base-manifest.yml
...