在 Pivotal Cloud Foundry 中,有没有办法让每个 space 得到 SPRING_PROFILES_ACTIVE?

Within Pivitoal Cloud Foundary is there a way to set SPRING_PROFILES_ACTIVE per each space?

对于使用 Pivotal Cloud Foundry (PCF) 的组织内的每个 space,有没有办法为每个 space 设置 SPRING_PROFILES_ACTIVE?

谢谢, 布莱恩

您在 Cloud Foundry 上设置 Spring 配置文件的主要方式是通过环境变量。

Cloud Foundry 不提供为每个组织或 space 设置环境变量组的方法。您只能设置适用于所有暂存或所有 运行ning 应用程序的暂存和 运行ning 环境变量组。这是在应用程序上设置环境变量的标准工具的补充。


我想您也许可以让它工作,但这需要一些努力。这是想法。

  1. 创建自定义构建包(不要惊慌,这并不难)。 buildpack 的唯一职责是创建一个包含 export SPRING_PROFILES_ACTIVE=<some-profile>.

    .profile.d/ 脚本(只是一个常规的 Bash 脚本)

    任何 buildpack 都可以创建 .profile.d/ 主要用于配置环境变量的脚本。这些脚本在任何应用程序启动之前由环境自动获取。因此,如果 buildpack 在此处设置 SPRING_PROFILES_ACTIVE,它将对您的应用可用并生效。

    https://docs.cloudfoundry.org/buildpacks/custom.html#contract

    您只需要创建下面 link 中定义的 bin/supplybin/detect 脚本。 bin/supply 是您放置创建 .profile.d/ 脚本的逻辑的地方,bin/detect 可以像 exit 0 一样简单,它只会告诉 运行总是。

    https://docs.cloudfoundry.org/buildpacks/understand-buildpacks.html#buildpack-scripts

  2. 您的自定义 buildpack 可以像使用硬编码配置文件一样简单,也可以很花哨并查看包含 space 名称的 VCAP_APPLICATION 环境。

    例如:echo $VCAP_APPLICATION | jq .space_name.

    buildpack 然后可以应用逻辑来设置给定 space 名称的正确配置文件。我不认为组织名称可用于 staging/runtime 的应用程序,至少不能通过环境变量使用,因此基于此应用逻辑会更难。

  3. 最后一步是使用 CF 的多构建包支持。您的自定义 buildpack 将是一个供应 buildpack,因此它将是第一个,然后您将列出实际的 buildpack,以便在您推送应用程序时使用第二个。

    例如:cf push -b https://github.com/your-profile/your-custom-buildpack -b java_buildpack your-cool-app.

    https://docs.cloudfoundry.org/buildpacks/use-multiple-buildpacks.html

希望对您有所帮助!