全部产品
阿里云办公

私密配置项

更新时间:2018-09-18 17:42:20

在应用构建中,通常会需要一些配置项,如:

  1. 功能开关
  2. 依赖系统的URL
  3. 数据库链接用户名密码

对于前两项,云效没有提供额外的支持,推荐您直接在代码中保存不同的配置文件,然后在构建时根据PACKAGE_LABEL的环境变量,选取正确的配置文件。请阅读使用传入参数改变构建行为,了解更多关于PACKAGE_LABEL的用法。

第三项中的配置项会涉及一些私密信息,不适合放在代码库中。云效提供了私密配置项的保存功能。您可以在应用的私密配置项页面(https://rdc.aliyun.com/ec/app/xxx/securityConfig) 添加和配置应用级别的私密配置项。比如:

normal

如果您需要在多个环境都使用私密配置项,则可以使用如下的方式:

multi-env

配置好这些私密配置项之后,在进行构建时,云效会把这些配置项转换成为一个明文的文件,并将其放置在根目录下的rdc_security_config.properties中,比如:

rdc_security_config.properties:

  1. db_password=somepasswd

您可以在自己的构建脚本中读取该文件,并按照您自己的方式进行使用。

实例

接下来给出一个实际使用的例子:

代码库结构:

  1. ├── README.md
  2. ├── build.sh
  3. ├── config
  4. ├── application.prepub.properties
  5. └── application.production.properties
  6. ├── app.release
  7. ├── pom.xml
  8. ├── src

application.prepub.properties的内容:

  1. key1=somevalue
  2. key2=somevalue
  3. key3=somevalue
  4. db.password=${db_password}

私密配置项内容:private_config

构建配置(这里给出两个包标签,在构建时会打出两个包):buildconfig

build.sh内容:

  1. // 将rdc_security_config.properties中与当前PACKAGE_LABEL有关的配置提取出来,去除PACKAGE_LABEL前缀,并转化成为可以source的格式。在这个例子中也就是:export db_password=xxxxxx,最后存入临时文件
  2. cat rdc_security_config.properties | grep ${PACKAGE_LABEL} | sed s/^${PACKAGE_LABEL}./export\ /g > tmpconfig
  3. cat tmpconfig
  4. // source临时文件,将配置导入到环境变量中
  5. source tmpconfig
  6. // 对指定配置文件(config/application.${PACKAGE_LABEL}.properties)中的环境变量占位符使用环境变量中的值替换,从而变成私密配置项中配置的值
  7. perl -pe 's/\$\{(.*)}/ $ENV{$1} /e' < config/application.${PACKAGE_LABEL}.properties > config/application.properties
  8. // 打印出生成的配置文件的内容,用于调试。实际使用过程中去除该行:
  9. cat config/application.properties
  10. // 删除临时文件及其它环境的配置项,因为产物包不需要这些
  11. rm -rf config/application.*.properties tmpconfig
  12. // 做其它的打包工作,比如mvn package等

根据构建配置,云效会打出两个包,下面是prepub这个包的构建日志:output

对照上面的build.sh,可以看到config/application.properties的值已经变成了预期的内容。