【问题标题】:How do I set Pivotal Cloud Foundry environment variables for different environments in one manifest file?如何在一个清单文件中为不同环境设置 Pivotal Cloud Foundry 环境变量?
【发布时间】:2017-03-17 04:53:55
【问题描述】:

在 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

【问题讨论】:

    标签: cloud-foundry


    【解决方案1】:

    查看https://docs.cloudfoundry.org/devguide/deploy-apps/manifest.html#multi-manifests 中的“Multiple Manifests with Inheritance”部分,例如

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

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

    【讨论】:

    • 谢谢会检查出来。我们的组织刚刚从 pcf 开始,按照向我解释的方式,他们首先需要做一些工作才能让我们注册我们的服务。当发生这种情况时,我同意将服务作为服务参数传递。不幸的是,在其他情况下,我必须在 pcf 之外调用尚未转换的旧服务。
    • 我可能会误解一件事。看起来我必须为每个环境使用不同的应用程序名称?这似乎是个坏主意,因为调用我的微服务的所有其他应用程序都必须知道服务名称对于他们当前的环境来说是什么。
    • 嗨@George 不,您需要在您的场景中提供(cf push -f)具有每个环境设置的不同应用程序清单文件。您的应用程序名称和所有通用设置可以保存在 base-manifest.yml 中,在所有环境之间通用并在每个环境清单中继承。我希望这会有所帮助。
    【解决方案2】:

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

    我使用过 Jenkins 和 Concourse。

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

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

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

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

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

    我会更进一步说,每次我必须开发一个新的微服务时,我会首先开发一个 shell 类,它是测试类,然后是为那个微服务开发一个管道。这样,我不再需要担心将我的微服务推送到 Cloud Foundry。

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

    试一试。

    【讨论】:

    • [Concourse](concourse.ci) 是免费的,您可以在几分钟内启动并运行它。大厅最初可能会令人困惑。但是一旦你掌握了它,你就会开始将它用于一切。我们对所有事情都使用大厅管道。从头开始构建 PCF,升级 PCF 切片,部署代码,应有尽有。
    【解决方案3】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-01-09
      • 1970-01-01
      • 2023-03-19
      • 2020-02-14
      • 1970-01-01
      • 2019-07-12
      • 2020-07-23
      • 1970-01-01
      相关资源
      最近更新 更多