编辑
2025-07-15
默认分类
00

目录

📌 推荐使用数组形式的理由
⚙️ 配置项完整列表(数组形式最佳实践)
🌟 特殊场景配置示例
⚖️ 对象形式 vs 数组形式对比
✅ 最终建议

.cnb.yml 配置文件中,数组形式(列表结构) 更适合定义流水线配置,原因如下:

📌 推荐使用数组形式的理由

  1. 灵活性更高

    • 允许匿名流水线(无需显式命名)
    • 支持复用配置(通过 YAML 锚点 & 和引用 *)
    • 更易扩展(添加/删除流水线只需增减列表项)
  2. 可读性更好

    • 垂直排列清晰展示多条流水线
    • 避免深层嵌套(对象形式需多一层键名缩进)
    • 与事件类型形成直观对应关系
  3. 实践优势

    • 支持混合配置(部分流水线有名称,部分匿名)
    • 更易实现条件触发(通过列表顺序控制执行流程)
    • 与 CI/CD 最佳实践一致(如 GitLab CI、GitHub Actions 均采用列表形式)

⚙️ 配置项完整列表(数组形式最佳实践)

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"

⚖️ 对象形式 vs 数组形式对比

场景对象形式数组形式
流水线命名需求必须唯一命名可匿名或选择性命名
配置复用困难(键名冲突)简单(YAML锚点)
多流水线定义深层嵌套结构扁平列表结构
动态流水线生成不适合适合(模板+变量替换)
可读性键名与配置混合事件与流水线清晰分层
扩展性添加新流水线需修改键结构直接追加列表项

✅ 最终建议

优先使用数组形式(列表结构),它在以下方面更具优势:

  1. 处理多流水线场景更简洁
  2. 支持配置复用和模板化
  3. 对匿名流水线更友好
  4. 与 CI/CD 生态更兼容
  5. 更易实现动态流水线生成

当需要强制命名流水线精确控制流水线标识时,可考虑在数组项中添加 name 字段,这比对象形式更灵活可控。

本文作者:任浪漫

本文链接:

版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!