如何在一个清单文件中为不同的环境设置 Pivotal Cloud Foundry 环境变量?
How do I set Pivotal Cloud Foundry environment variables for different environments in one manifest file?
在 Pivotal Cloud Foundry 中,有一种方法可以让 Manifest.yml 具有针对不同环境的不同环境变量。例如,我们有一个 development/test/production 环境。在系统中我想要一个环境变量 "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
我宁愿有 1 个文件来定义所有环境变量,应该根据应用部署的环境选择正确的文件:
manifest.yml:
env-development:
-url=development.pcf.domain.com
env-test:
-url=test.pcf.domain.com
env-production:
-url=production.pcf.domain.com
查看 https://docs.cloudfoundry.org/devguide/deploy-apps/manifest.html#multi-manifests 中的 "Multiple Manifests with Inheritance" 部分,例如
---
inherit: base-manifest.yml
...
如果可能,最好通过 CF services/cups 将所有相关服务呈现给应用程序,并且应用程序通过解析 VCAP_SERVICES 环境变量获取环境相关配置,避免每个环境应用程序配置文件。
我过去这样做的方式是利用管道的灵活性。
我用过 Jenkins 和 Concourse。
从技术上讲,您应该只部署到开发环境。所有后续部署都应通过管道完成。
我会做的是,有一个通用清单文件 (generic-manifest.yml),其中包含占位符。我会创建文件的副本 (manifest-local.yml)。而那个将仅用于开发环境。
在我的管道中,使用一些 shell 脚本,我生成了具有正确环境细节(集成、uat、产品等)的 manifest.yml。
我只需要维护一个文件 - generic-manifest.yml。通常,每次我对其进行更改时,我都会重新创建本地清单文件。
最终,您可以拥有适用于您的开发环境的管道,在这种情况下您将不再需要本地清单文件。
我更进一步说,每次我必须开发一个新的微服务时,我会先开发一个 shell class,它测试 class,然后是下一个将是为该微服务开发管道。这样,我就不必再担心将我的微服务推送到 Cloud Foundry。
第一次做,会有一些工作。但是一旦你养成了习惯,它就会变得天衣无缝。
试一试。
我发现一些聪明的家伙已经 spring_active_profiles 设置了环境特定设置,所以我只需要创建应用程序-system.properties 并使用 spring 配置文件
在 Pivotal Cloud Foundry 中,有一种方法可以让 Manifest.yml 具有针对不同环境的不同环境变量。例如,我们有一个 development/test/production 环境。在系统中我想要一个环境变量 "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
我宁愿有 1 个文件来定义所有环境变量,应该根据应用部署的环境选择正确的文件:
manifest.yml:
env-development:
-url=development.pcf.domain.com
env-test:
-url=test.pcf.domain.com
env-production:
-url=production.pcf.domain.com
查看 https://docs.cloudfoundry.org/devguide/deploy-apps/manifest.html#multi-manifests 中的 "Multiple Manifests with Inheritance" 部分,例如
---
inherit: base-manifest.yml
...
如果可能,最好通过 CF services/cups 将所有相关服务呈现给应用程序,并且应用程序通过解析 VCAP_SERVICES 环境变量获取环境相关配置,避免每个环境应用程序配置文件。
我过去这样做的方式是利用管道的灵活性。
我用过 Jenkins 和 Concourse。
从技术上讲,您应该只部署到开发环境。所有后续部署都应通过管道完成。
我会做的是,有一个通用清单文件 (generic-manifest.yml),其中包含占位符。我会创建文件的副本 (manifest-local.yml)。而那个将仅用于开发环境。
在我的管道中,使用一些 shell 脚本,我生成了具有正确环境细节(集成、uat、产品等)的 manifest.yml。
我只需要维护一个文件 - generic-manifest.yml。通常,每次我对其进行更改时,我都会重新创建本地清单文件。
最终,您可以拥有适用于您的开发环境的管道,在这种情况下您将不再需要本地清单文件。
我更进一步说,每次我必须开发一个新的微服务时,我会先开发一个 shell class,它测试 class,然后是下一个将是为该微服务开发管道。这样,我就不必再担心将我的微服务推送到 Cloud Foundry。
第一次做,会有一些工作。但是一旦你养成了习惯,它就会变得天衣无缝。
试一试。
我发现一些聪明的家伙已经 spring_active_profiles 设置了环境特定设置,所以我只需要创建应用程序-system.properties 并使用 spring 配置文件