在 .cnb.yml
配置文件中,数组形式(列表结构) 更适合定义流水线配置,原因如下:
灵活性更高:
&
和引用 *
)可读性更好:
实践优势:
yaml# ========== 基础结构 ==========
事件类型:
- 流水线1配置
- 流水线2配置
# ========== 核心配置项 ==========
事件类型: # 如 push, pull_request, schedule 等
- name: "流水线名称" # 可选
docker: # 执行环境
image: "镜像地址"
credentials: # 私有镜像认证
username: "$DOCKER_USER"
password: "$DOCKER_PASS"
services: # 依赖服务
- postgres:14
- redis:latest
variables: # 自定义变量
DEPLOY_ENV: "staging"
cache: # 缓存配置
paths:
- node_modules/
artifacts: # 产物保存
paths:
- dist/
stages: # 核心执行步骤
- name: "步骤名称"
image: "可选步骤专用镜像"
script: # 执行脚本
- echo "Hello"
- npm run build
when: # 执行条件
branch: main
timeout: 10m # 超时设置
retry: 2 # 失败重试
allow_failure: true # 允许失败
exports: # 输出变量
- key: VERSION
value: "1.0.0"
rules: # 高级触发规则
- if: '$CI_COMMIT_TAG =~ /^v\d+\.\d+\.\d+$/'
yaml# 复用配置(YAML锚点)
.base_config: &base_config
variables:
NODE_ENV: production
cache:
key: ${CI_COMMIT_REF_SLUG}
paths:
- node_modules/
production:
deploy:
- <<: *base_config # 继承基础配置
services:
- postgres:14
stages:
- name: deploy
script: ./deploy-prod.sh
# 动态流水线生成
.schedules:
- &nightly
name: "nightly-${DAY}"
schedule: "0 0 * * *"
variables:
DAY: "Monday"
stages: [...]
weekly:
schedule:
- <<: *nightly
variables:
DAY: "Monday"
- <<: *nightly
variables:
DAY: "Wednesday"
场景 | 对象形式 | 数组形式 |
---|---|---|
流水线命名需求 | 必须唯一命名 | 可匿名或选择性命名 |
配置复用 | 困难(键名冲突) | 简单(YAML锚点) |
多流水线定义 | 深层嵌套结构 | 扁平列表结构 |
动态流水线生成 | 不适合 | 适合(模板+变量替换) |
可读性 | 键名与配置混合 | 事件与流水线清晰分层 |
扩展性 | 添加新流水线需修改键结构 | 直接追加列表项 |
优先使用数组形式(列表结构),它在以下方面更具优势:
当需要强制命名流水线或精确控制流水线标识时,可考虑在数组项中添加 name
字段,这比对象形式更灵活可控。
本文作者:任浪漫
本文链接:
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!