在已部署的流应用中设置env var值

时间:2016-08-26 18:17:23

标签: spring-cloud-stream spring-cloud-config spring-cloud-dataflow

使用以下内容:

  • Spring Cloud Data Flow Server Cloudfoundry 1.0.0.RC1
  • Spring Cloud Config Server服务

我使用附加依赖项重建了spring-cloud-dataflow-server-cloudfoundry,以便按照说明提供与Spring Cloud Config服务器的绑定。它似乎按预期工作,所以这很好。

现在出现问题,当我尝试使用我开发的自定义模块定义流时,模块的环境变量(特别是ENCRYPT_KEY)位于我的git仓库中的清单YML文件中。

清单文件的名称为applications: - name: customapp env: ENCRYPT_KEY: keyForEncryption 。清单看起来像这样:

customapp-dev.properties

属性文件的名称为customapp.initial.context.factory=com.sun.jndi.ldap.LdapCtxFactory customapp.ldap.provider.url=ldap://directory.xyz.com:389/dc=xyz,dc=com customapp.username=ldap_user customapp.password={cipher}958f87532ebba83cd81b7b0e9a0a0cc 。属性文件如下所示:

application.properties

应用程序在引导jar中有一个名为spring.application.name=customapp 的属性文件。它看起来像这样:

--properties app.customapp.SPRING_PROFILES_ACTIVE=dev

最后,当我部署我的流时,我在命令行中提供了一个额外的属性,如下所示:

customapp.password

告诉应用程序部署的日志,我可以看到正在读取配置服务器实例,并且正确解析了应用程序名称和配置文件。配置客户端映射YML清单和我的git仓库中的属性文件。

但是,错误表明占位符2016-08-26T13:40:46.62-0600 [APP/0] OUT . ____ _ __ _ _ 2016-08-26T13:40:46.62-0600 [APP/0] OUT /\\ / ___'_ __ _ _(_)_ __ __ _ \ \ \ \ 2016-08-26T13:40:46.62-0600 [APP/0] OUT ( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \ 2016-08-26T13:40:46.62-0600 [APP/0] OUT \\/ ___)| |_)| | | | | || (_| | ) ) ) ) 2016-08-26T13:40:46.62-0600 [APP/0] OUT ' |____| .__|_| |_|_| |_\__, | / / / / 2016-08-26T13:40:46.62-0600 [APP/0] OUT =========|_|==============|___/=/_/_/_/ 2016-08-26T13:40:46.63-0600 [APP/0] OUT :: Spring Boot :: (v1.3.5.RELEASE) 2016-08-26T13:40:46.65-0600 [APP/0] OUT Fetching config from server at: https://config-dfcc3100-7514-47e6-b30e-a0eefcf4929d.dev.xyz.com 2016-08-26T13:40:48.13-0600 [APP/0] OUT Located environment: name=customapp, profiles=[dev, cloud], label=master, version=null 2016-08-26T13:40:48.13-0600 [APP/0] OUT Located property source: CompositePropertySource [name='configService', propertySources=[MapPropertySource [name='https://user@bitbucket.xyz.com/scm/project/app-config.git/dev/customapp-dev.yml'], MapPropertySource [name='https://user@bitbucket.xyz.com/scm/project/app-config.git/dev/customapp-dev.properties']]] 2016-08-26T13:40:48.16-0600 [APP/0] OUT Application startup failed 2016-08-26T13:40:48.16-0600 [APP/0] OUT java.lang.IllegalStateException: Cannot decrypt: key=customapp.password 没有可能的解密。

{{1}}

如果我为已部署(崩溃)的应用程序显式设置ENCRYPT_KEY环境变量,并重新启动它,它会启动正常并且像魅力一样工作。

我是否有另一种方法可以在部署时为流应用指定环境变量?

2 个答案:

答案 0 :(得分:0)

清单(customapp-dev.yml)不需要与配置的其余部分(相同)git repo(事实上,最好不要,因为它包含解密密钥)。

更重要的是,你的问题并不清楚你如何“使用”它。您是否希望自动考虑它(感谢配置服务器或其他任何东西),或者您在cf push应用程序时确实使用它?

您所描述的症状似乎表明您在此处设置的环境变量未被考虑(通过清单)。

答案 1 :(得分:0)

所以,我RTFM并在现有文档中找到了一个有用的摘录。

Spring Cloud Config Server

部署时的命令行规范将工作,但我使用了错误的语法。而不是:

app.customapp.ENCRYPT_KEY=keyForEncryption

我应该使用:

app.customapp.encrypt.key=keyForEncryption