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

时间:2017-03-17 04:53:56

标签: pivotal-cloud-foundry

在Pivotal Cloud中,有一种方法可以让一个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

3 个答案:

答案 0 :(得分:0)

查看https://docs.cloudfoundry.org/devguide/deploy-apps/manifest.html#multi-manifests中的“包含继承的多个清单”部分,例如

---
inherit: base-manifest.yml
...

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

答案 1 :(得分:0)

我过去这样做的方法是利用管道的灵活性。

我使用过Jenkins和Concourse。

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

我要做的是,有一个通用的清单文件(generic-manifest.yml),里面有占位符。我会创建一个文件的副本(manifest-local.yml)。而那个只用于开发环境。

在我的管道中,使用一些shell脚本,我生成了带有正确环境细节的manifest.yml(集成,uat,prod等)。

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

最终,您可以为您的开发环境提供管道,在这种情况下,您将不再需要本地清单文件。

我会更进一步说,每次我必须开发一个新的微服务,我首先要开发一个shell类,它测试类,接下来就是为那个微服务开发一个管道。这样,我再也不用担心将我的微服务推向云代工厂了。

你第一次这样做,这将是一些工作。但是一旦养成习惯,就会变得无缝。

试一试。

答案 2 :(得分:0)

我发现一些聪明的家伙已经有spring_active_profiles设置wirh env特定设置所以我只需要创建application-system.properties并使用spring profile