title | description | position | category |
---|---|---|---|
Yaml 继承 |
Yaml 继承 |
9 |
概述 |
通过关键字extend
, 解决多个Yaml配置冗余的问题。
比如使用Serverless Devs部署一个函数计算FC应用的时候,预发环境的和正式环境除了service名称不一致。其他配置完全一致。Yaml配置如下
├── code
├── s.yaml
├── s.prod.yaml
└── s.pre.yaml
edition: 1.0.0
access: "default"
services:
fc-deploy-test:
component: fc
props:
region: cn-hangzhou
service:
name: fc-service
nasConfig: Auto
description: "Serverless Devs Serivce"
function:
name: hello-function
description: "Serverless Devs Function"
codeUri: "./"
runtime: nodejs12
timeout: 60
extend: s.yaml
services:
fc-deploy-test:
props:
service:
name: fc-service-pre
tracingConfig: Disable
extend: s.yaml
services:
fc-deploy-test:
props:
service:
name: fc-service-pro
tracingConfig: Enable
显示的声明 extend
关键字,获得继承能力
通过指定yaml配置s deploy -t s.pro.yaml
生效
edition: 1.0.0
access: "default"
services:
fc-deploy-test:
component: fc
props:
region: cn-hangzhou
service:
name: fc-service-pro
tracingConfig: Enable
nasConfig: Auto
description: "Serverless Devs Serivce"
function:
name: hello-function
description: "Serverless Devs Function"
codeUri: "./"
runtime: nodejs12
timeout: 60
配置的合并使用extend2 模块进行深度拷贝。
但是考虑到yaml
的配置层级比较深,比如上面的示例,我们在预发环境需要覆盖service名称
,需要严格按照层级关系进行编写,相对繁琐。
services:
fc-deploy-test:
props:
service:
name: fc-service-pro
tracingConfig: Enable
数据在做合并的时候,直接覆盖,而不是合并操作
const a = {
arr: [1, 2],
};
const b = {
arr: [3],
};
extend(true, a, b);
// => { arr: [ 3 ] }
Yaml继承一般用作环境划分,比如预发环境为s.pre.yaml
,线上环境为s.pro.yaml
,部署时候通过指定对应部署模版s deploy -t s.pro.yaml
配置。
下面是一些常见的环境变量值以及他们对应的说明。
值 | 说明 |
---|---|
local | 本地开发环境 |
dev/daily/development | 日常开发环境 |
pre/prepub | 预生产环境 |
prod/production | 生产环境 |
test/unittest | 单元测试环境 |