全部产品
研发协同 RDC

使用参数影响构建行为

更新时间:2017-09-19 16:18:26   分享:   

尽管一个应用仅对应一个<应用名称>.release文件,但根据构建时上下文中输入的参数的不同,可以改变构建的行为,输出不同的构建结果。典型的,为不同的运行环境(比如测试环境和线上环境),打出不同内容,甚至不同类型的包。下面详细讲解在同一份构建配置下,根据上下文参数改变构建行为的方法。

方法1:以PACKAGE_LABEL的值作为配置键的前缀

在构建的过程中会存在key值为PACKAGE_LABEL的的环境变量。对于自定义流水线来说,如果您没有进行特殊配置,则PACKAGE_LABEL的值为default。您可以在自定义流水线的配置页面,对不同的包配置不同的PACKAGE_LABEL的值。

如果您使用的是非自定义流水线,则PACKAGE_LABEL的值与ENV_TYPE的值相同。其值可以为testing, staging, production

<应用名称>.release中的键(比如docker.file),可以用PACKAGE_LABEL的值作为前缀(比如testing.docker.file)。构建时,如果找到以当时PACKAGE_LABEL的值(比如testing)作为前缀的键(比如testing.docker.file),就将以它的值(比如Dockerfile),作为键(比如docker.file)的值。

PACKAGE_LABELtesting时候,RDC会寻找所有不带前缀的键值,并与带testing前缀的键值,进行合并。带前缀的键值拥有更高的优先级。也就是说下面的例子中,docker.file最终的值是Dockerfile_test

  1. docker.file=Dockerfile
  2. testing.docker.file=Dockerfile_test

这个方法,不仅可以让特定键在为不同环境构建时,获得不同的值,甚至可以仅在特定环境获得值。比如,如果仅日常环境使用阿里云容器服务,需要进行镜像构建,但在生产环境希望使用ECS部署,不需要进行镜像构建。那么对于这个场景,可以使用下面的写法。

  1. code.language=java
  2. baseline.jdk=jdk-1.7.0_51
  3. build.tools.maven=maven2.2.1
  4. # 使用`PACKAGE_LABEL`的前缀(testing, staging, production)的键值,只会在相应环境的构建中生效
  5. testing.docker.file=Dockerfile
  6. testing.docker.repo=registry.cn-hangzhou.aliyuncs.com/mynamespace/container-app
  7. testing.docker.tag=${TIMESTAMP}

方法2:在键值或构建过程中引用环境变量

想要知道所有可用的环境变量,您可以参看构建日志的输出,或者该文档

使用场景一:在键值中使用环境变量

  1. docker.tag=${PACKAGE_LABEL}

使用场景二:使用PACKAGE_LABEL作为maven构建的profile。在release文件中配置build.command=mvn clean install -P$PACKAGE_LABEL。并且在您的pom文件中设置对应的profile,在其中定义不同环境的不同行为。

使用场景三:设置build.command=sh build.sh,然后在build.sh中使用环境变量的值来进行判断,并执行不同的操作。

一个具体的例子:我想在不同包的构建中,使用不同的数据库配置。假设程序运行时从application.properties中读取数据库配置,则可以在代码库中放置三个配置文件:application.properties.testingapplication.properties.stagingapplication.properties.production,在自定义流水线中也定义了的三个的PACKAGE_LABEL的值是testingstagingproduction(非自定义流水线的PACKAGE_LABEL的值与ENV_TYPE的值相同)。然后在build.sh中包含这么一行,将属于相应环境的配置文件覆盖到程序读取的文件,也就是application.properteis

  1. cp application.properties.$PACKAGE_LABEL application.properteis

注意:上面只是一个例子,具体的配置文件的路径以你的项目的实际情况为准。

本文导读目录
本文导读目录
以上内容是否对您有帮助?