在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
答案 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