GitLabCI/CDPipelineGenerator gitlab-ci-generator

这是一个全面的工具包,用于生成遵循当前最佳实践、安全标准和命名约定的最佳实践GitLab CI/CD管道和配置。当创建新的GitLab CI/CD资源、实施CI/CD管道或从头开始构建GitLab管道时,将使用这项技能。

DevOps 0 次安装 0 次浏览 更新于 3/4/2026

GitLab CI/CD Pipeline Generator

概述

生成遵循当前最佳实践、安全标准和命名约定的生产就绪GitLab CI/CD管道配置。在创建新的GitLab CI/CD资源、实施CI/CD管道或从头开始构建GitLab管道时,请使用此技能。


强制预生成步骤

**关键:**在生成任何GitLab CI/CD管道之前,您必须完成以下步骤:

第1步:加载参考文件(必需)

您必须使用阅读工具在生成之前加载参考文件。这不是可选的。

始终在生成之前阅读所有四个参考文件:
1. references/best-practices.md - 用于安全、性能和命名模式
2. references/common-patterns.md - 用作基础的标准管道模式
3. references/gitlab-ci-reference.md - 用于语法参考和关键字详情
4. references/security-guidelines.md - 用于安全敏感配置

此外,阅读适当的管道类型模板:

  • Docker管道 → assets/templates/docker-build.yml
  • Kubernetes部署 → assets/templates/kubernetes-deploy.yml
  • 多项目管道 → assets/templates/multi-project.yml
  • 基本管道 → assets/templates/basic-pipeline.yml

第2步:确认理解(需要明确的输出)

阅读参考后,您必须输出一个明确的确认声明。这不是可选的。

所需确认格式:

## 参考分析完成

**识别的管道模式:** [模式名称] 来自 common-patterns.md
- [为什么这个模式合适的简短描述]

**要应用的最佳实践:**
- [列出3-5个与此管道相关的关键最佳实践]

**安全指南:**
- [列出要实施的安全措施]

**模板基础:** [模板文件名]
- [将从此模板定制的内容]

示例确认声明:

## 参考分析完成

**识别的管道模式:** Docker构建+Kubernetes部署来自common-patterns.md
- 用户需要将容器化部署到K8s集群,带有暂存/生产环境

**要应用的最佳实践:**
- 将所有Docker映像固定到特定版本(不是:latest)
- 对pip依赖项使用缓存
- 使用`needs`关键字实现DAG优化
- 对所有作业设置明确的超时(15-20分钟)
- 对部署作业使用resource_group

**安全指南:**
- 对secrets使用掩码CI/CD变量(KUBE_CONTEXT,注册表凭据)
- 包括容器扫描Trivy
- 永远不要在日志中暴露secrets

**模板基础:** docker-build.yml + kubernetes-deploy.yml
- 结合Docker构建模式和K8s kubectl部署
- 添加Python特定的测试作业

如果您跳过此确认步骤,生成的管道可能会错过参考文件中记录的关键模式。


核心能力

1. 生成基本CI/CD管道

创建完整的、生产就绪的.gitlab-ci.yml文件,具有适当的结构、安全最佳实践和高效的CI/CD模式。

何时使用:

  • 用户请求:“为…创建GitLab管道”,“构建CI/CD管道…”,“生成GitLab CI配置…”
  • 场景:CI/CD管道,自动化测试,构建自动化,部署管道

流程:

  1. 理解用户的需求(需要自动化什么)
  2. 确定阶段、作业、依赖关系和工件
  3. 使用assets/templates/basic-pipeline.yml作为结构基础
  4. 参考references/best-practices.md以实施模式
  5. 参考references/common-patterns.md以获得标准管道模式
  6. 遵循这些原则生成管道:
    • 使用语义阶段和作业名称
    • 将Docker映像固定到特定版本(不是:latest)
    • 使用掩码变量实现适当的机密管理
    • 对依赖项使用缓存以提高性能
    • 实现适当的工件处理和过期
    • 适当时使用needs关键字进行DAG优化
    • 添加适当的错误处理,重试和允许失败
    • 使用rules而不是已弃用的only/except
    • 对所有作业设置明确的timeout(通常10-30分钟)
    • 在注释中添加有意义的作业描述
  7. 始终验证生成的管道,使用devops-skills:gitlab-ci-validator技能
  8. 如果验证失败,请修复问题并重新验证

示例结构:

# 基本CI/CD管道
# 构建、测试和部署应用程序

stages:
  - build
  - test
  - deploy

# 全局变量
variables:
  NODE_VERSION: "20"
  DOCKER_DRIVER: overlay2

# 所有作业的默认设置
default:
  image: node:20-alpine
  timeout: 20 minutes  # 所有作业的默认超时
  cache:
    key: ${CI_COMMIT_REF_SLUG}
    paths:
      - node_modules/
  before_script:
    - echo "Starting job ${CI_JOB_NAME}"
  tags:
    - docker
  interruptible: true

# 构建阶段 - 编译应用程序
build-application:
  stage: build
  timeout: 15 minutes
  script:
    - npm ci
    - npm run build
  artifacts:
    paths:
      - dist/
    expire_in: 1 hour
  rules:
    - changes:
        - src/**/*
        - package*.json
      when: always
    - when: on_success

# 测试阶段
test-unit:
  stage: test
  needs: [build-application]
  script:
    - npm run test:unit
  coverage: '/Coverage: \d+\.\d+%/'
  artifacts:
    reports:
      junit: junit.xml
      coverage_report:
        coverage_format: cobertura
        path: coverage/cobertura-coverage.xml

test-lint:
  stage: test
  needs: []  # 可以立即运行
  script:
    - npm run lint
  allow_failure: true

# 部署阶段
deploy-staging:
  stage: deploy
  needs: [build-application, test-unit]
  script:
    - npm run deploy:staging
  environment:
    name: staging
    url: https://staging.example.com
  rules:
    - if: $CI_COMMIT_BRANCH == "develop"
  when: manual

deploy-production:
  stage: deploy
  needs: [build-application, test-unit]
  script:
    - npm run deploy:production
  environment:
    name: production
    url: https://example.com
  rules:
    - if: $CI_COMMIT_BRANCH == "main"
  when: manual
  resource_group: production

2. 生成Docker构建管道

创建用于构建、测试和推送Docker映像到容器注册表的管道。

何时使用:

  • 用户请求:“创建Docker构建管道…”,“构建和推送Docker映像…”
  • 场景:容器构建,多阶段Docker构建,注册表推送

流程:

  1. 理解Docker构建需求(基础映像,注册表,标签)
  2. 使用assets/templates/docker-build.yml作为基础
  3. 实施Docker-in-Docker或Kaniko进行构建
  4. 配置注册表身份验证
  5. 实施映像标记策略
  6. 如有需要,添加安全扫描
  7. 始终验证使用devops-skills:gitlab-ci-validator技能

示例:

stages:
  - build
  - scan
  - push

variables:
  DOCKER_DRIVER: overlay2
  IMAGE_NAME: $CI_REGISTRY_IMAGE
  IMAGE_TAG: $CI_COMMIT_SHORT_SHA

# 构建Docker映像
docker-build:
  stage: build
  image: docker:24-dind
  timeout: 20 minutes
  services:
    - docker:24-dind
  before_script:
    - docker login -u $CI_REGISTRY_USER -p $CI_REGISTRY_PASSWORD $CI_REGISTRY
  script:
    - docker build
        --cache-from $IMAGE_NAME:latest
        --tag $IMAGE_NAME:$IMAGE_TAG
        --tag $IMAGE_NAME:latest
        .
    - docker push $IMAGE_NAME:$IMAGE_TAG
    - docker push $IMAGE_NAME:latest
  rules:
    - if: $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH
  retry:
    max: 2
    when:
      - runner_system_failure

# 扫描漏洞
container-scan:
  stage: scan
  image: aquasec/trivy:0.49.0
  timeout: 15 minutes
  script:
    - trivy image --exit-code 0 --severity HIGH,CRITICAL $IMAGE_NAME:$IMAGE_TAG
  needs: [docker-build]
  allow_failure: true
  rules:
    - if: $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH

3. 生成Kubernetes部署管道

创建部署应用程序到Kubernetes集群的管道。

何时使用:

  • 用户请求:“部署到Kubernetes…”,“创建K8s部署管道…”
  • 场景:Kubernetes部署,Helm部署,kubectl操作

流程:

  1. 确定Kubernetes部署方法(kubectl,Helm,Kustomize)
  2. 使用assets/templates/kubernetes-deploy.yml作为基础
  3. 配置集群身份验证(服务帐户,kubeconfig)
  4. 实施适当的环境管理
  5. 添加回滚能力
  6. 始终验证使用devops-skills:gitlab-ci-validator技能

示例:

stages:
  - build
  - deploy

# Kubernetes部署作业
deploy-k8s:
  stage: deploy
  image: bitnami/kubectl:1.29
  timeout: 10 minutes
  before_script:
    - kubectl config use-context $KUBE_CONTEXT
  script:
    - kubectl set image deployment/myapp myapp=$CI_REGISTRY_IMAGE:$CI_COMMIT_SHORT_SHA -n $KUBE_NAMESPACE
    - kubectl rollout status deployment/myapp -n $KUBE_NAMESPACE --timeout=5m
  environment:
    name: production
    url: https://example.com
    kubernetes:
      namespace: production
  rules:
    - if: $CI_COMMIT_BRANCH == "main"
      when: manual
  resource_group: k8s-production
  retry:
    max: 2
    when:
      - runner_system_failure

4. 生成多项目管道

创建触发其他项目或使用父子管道模式的管道。

何时使用:

  • 用户请求:“创建多项目管道…”,“触发其他管道…”
  • 场景:单体仓库,微服务,编排管道

流程:

  1. 确定管道编排需求
  2. 使用assets/templates/multi-project.yml或父子模板
  3. 配置适当的工件传递
  4. 适当时实现并行执行
  5. 始终验证使用devops-skills:gitlab-ci-validator技能

示例(父子):

# 父管道
stages:
  - trigger

generate-child-pipeline:
  stage: trigger
  script:
    - echo "Generating child pipeline config"
    - |
      cat > child-pipeline.yml <<EOF
      stages:
        - build

      child-job:
        stage: build
        script:
          - echo "Running child job"
      EOF
  artifacts:
    paths:
      - child-pipeline.yml

trigger-child:
  stage: trigger
  trigger:
    include:
      - artifact: child-pipeline.yml
        job: generate-child-pipeline
    strategy: depend
  needs: [generate-child-pipeline]

5. 生成基于模板的配置

使用extends、YAML锚点和includes创建可重用模板。

何时使用:

  • 用户请求:“创建可重用模板…”,“构建模块化管道配置…”
  • 场景:模板库,DRY配置,共享CI/CD逻辑

流程:

  1. 确定要提取的常见模式
  2. 创建隐藏作业(以.开头)
  3. 使用extends关键字进行继承
  4. 组织到单独的文件中,使用include
  5. 始终验证使用devops-skills:gitlab-ci-validator技能

示例:

# 隐藏模板作业(在模板中包含超时)
.node-template:
  image: node:20-alpine
  timeout: 15 minutes  # 默认超时时间为使用此模板的作业
  cache:
    key: ${CI_COMMIT_REF_SLUG}
    paths:
      - node_modules/
  before_script:
    - npm ci
  interruptible: true

.deploy-template:
  timeout: 10 minutes  # 部署作业应有明确的超时
  before_script:
    - echo "Deploying to ${ENVIRONMENT}"
  after_script:
    - echo "Deployment complete"
  retry:
    max: 2
    when:
      - runner_system_failure
      - stuck_or_timeout_failure
  interruptible: false  # 部署不应被中断

# 实际使用模板的作业
build:
  extends: .node-template
  stage: build
  script:
    - npm run build

deploy-staging:
  extends: .deploy-template
  stage: deploy
  variables:
    ENVIRONMENT: staging
  script:
    - ./deploy.sh staging
  resource_group: staging

6. 处理GitLab CI/CD文档查找

当生成的管道使用特定的GitLab功能、模板或需要最新文档时:

检测:

  • 用户提到特定的GitLab功能(例如,“Auto DevOps”,“SAST”,“依赖项扫描”)
  • 用户请求与GitLab模板集成
  • 管道需要特定的GitLab运行器功能

流程:

  1. 确定功能:

    • 提取GitLab功能或模板名称
    • 确定是否需要版本特定信息
  2. 使用WebSearch搜索当前文档:

    搜索查询模式:"GitLab CI/CD [功能]文档2025"
    示例:
    - "GitLab CI/CD SAST模板文档"
    - "GitLab Auto DevOps配置"
    - "GitLab依赖项扫描最新"
    
  3. 分析搜索结果以获取:

    • 当前推荐的方法是
    • 必需的变量和配置
    • 模板包含语法
    • 最佳实践和安全建议
    • 示例用法
  4. 如果Context7 MCP可用:

    • 尝试使用mcp__context7__resolve-library-id解析库ID
    • 使用mcp__context7__get-library-docs获取文档
    • 这提供了结构化的文档
  5. 如果需要特定文档页面:

    • 使用WebFetch从docs.gitlab.com检索
    • 提取相关配置示例
  6. 使用发现的信息生成管道:

    • 使用正确的模板包含语法
    • 配置必需的变量
    • 添加安全最佳实践
    • 在注释中注明版本和选择

示例使用GitLab模板:

# 包含GitLab的安全模板(使用Jobs/前缀表示当前模板)
include:
  - template: Jobs/SAST.gitlab-ci.yml
  - template: Jobs/Dependency-Scanning.gitlab-ci.yml

# 通过全局变量自定义SAST行为
# 注意:将变量设置为全局而不是覆盖模板作业
# 以避免由于部分作业定义而导致的验证问题
variables:
  SAST_EXCLUDED_PATHS: "spec, test, tests, tmp, node_modules"
  DS_EXCLUDED_PATHS: "node_modules, vendor"
  SECURE_LOG_LEVEL: "info"

**重要:**当使用include与GitLab模板时,包含的作业在模板中完全定义。如果您需要自定义它们,更喜欢设置全局变量而不是创建部分作业覆盖(这将在本地验证失败,因为验证器无法解析包含的模板)。GitLab在运行时合并配置,但本地验证器只看到您的.gitlab-ci.yml文件。

验证工作流程

**关键:**每个生成的GitLab CI/CD配置在呈现给用户之前都必须验证。

验证流程

  1. 生成任何管道配置后,立即调用devops-skills:gitlab-ci-validator技能:

    Skill: devops-skills:gitlab-ci-validator
    
  2. devops-skills:gitlab-ci-validator技能将:

    • 验证YAML语法
    • 检查GitLab CI/CD模式合规性
    • 验证作业引用和依赖关系
    • 检查最佳实践违规
    • 执行安全扫描
    • 报告任何错误、警告或问题
  3. 根据严重性分析验证结果并采取行动:

    严重性 必需的行动
    CRITICAL 必须在呈现之前修复。管道损坏或严重不安全。
    HIGH 必须在呈现之前修复。重大的安全或功能问题。
    MEDIUM 应在呈现之前修复。应用修复或解释为什么不适用。
    LOW 可以修复或承认。通知用户推荐的更改。
    SUGGESTIONS 审查并应用如果有益。不需要修复。
  4. 修复和重新验证循环(对于关键/高问题是必须的):

    当验证存在关键或高问题时:
      1. 编辑生成的文件以修复问题
      2. 重新运行验证
      3. 重复直到没有关键或高问题为止
    
  5. 在呈现给用户之前,请确保:

    • 零CRITICAL问题
    • 零HIGH问题
    • MEDIUM问题要么修复了要么解释了为什么可以接受
    • LOW问题和建议已确认
  6. 当向用户呈现验证过的配置时:

    • 清楚地说明验证状态
    • 列出任何剩余的MEDIUM/LOW问题并解释
    • 提供使用说明
    • 提及所做的任何权衡

验证通过标准

管道准备好呈现时:

  • ✅ 语法验证:通过
  • ✅ 安全扫描:没有CRITICAL或HIGH问题
  • ✅ 最佳实践:已审核(警告可以接受,需要解释)

管道未准备好时:

  • ❌ 存在任何语法错误
  • ❌ 存在任何CRITICAL安全问题
  • ❌ 存在任何HIGH安全问题
  • ❌ 作业引用损坏

何时跳过验证

仅在以下情况下跳过验证:

  • 生成部分代码片段(不是完整文件)
  • 为文档目的创建示例
  • 用户明确要求跳过验证

处理MEDIUM严重性问题(必需输出)

当验证器报告MEDIUM严重性问题时,您必须要么修复它们,要么解释为什么它们可以接受。这个解释是必需的。

MEDIUM问题处理的必需格式:

## 验证问题已解决

### MEDIUM严重性问题

| 问题 | 状态 | 解释 |
|-------|--------|-------------|
| [问题代码] | 已修复/可以接受 | [为什么修复或为什么可以接受] |

示例MEDIUM问题解释:

## 验证问题已解决

### MEDIUM严重性问题

| 问题 | 状态 | 解释 |
|-------|--------|-------------|
| image-variable-no-digest | 可以接受 | 使用`python:${PYTHON_VERSION}-alpine`允许通过CI/CD变量灵活管理版本。PYTHON_VERSION变量在内部受控并固定为"3.12"。SHA摘要固定将需要更新每个图像更新的摘要,增加维护负担而没有显著的安全益处,对于此用例而言。 |
| pip-without-hashes | 可以接受 | 此管道安装了来自PyPI的众所周知的软件包(pytest,flake8)。使用`--require-hashes`将需要维护所有传递依赖的哈希文件。对于内部CI/CD,安全权衡是可以接受的。对于更高安全环境,请考虑使用经过验证的软件包的私有PyPI镜像。 |
| git-strategy-none | 可以接受 | `stop-staging`和`rollback-production`作业使用`GIT_STRATEGY: none`,因为它们只运行不需要源代码的kubectl命令。脚本在YAML中内联(不是来自仓库),因此没有执行不受信任代码的风险。 |

何时修复与接受:

场景 行动
生产/高安全环境 修复问题
问题有简单的修复且没有负面影响 修复问题
修复增加复杂性 接受并解释
修复需要外部更改(例如,CI/CD变量) 接受并解释
问题对于此上下文是误报 接受并解释

审查建议(必需输出)

当验证器提供建议时,您必须简要确认它们并解释是否应该应用。

必需格式:

## 验证器建议审查

| 建议 | 建议 | 原因 |
|------------|----------------|--------|
| [建议] | 应用/跳过 | [为什么] |

示例建议审查:

## 验证器建议审查

| 建议 | 建议 | 原因 |
|------------|----------------|--------|
| test jobs上的`missing-retry` | 跳过 | 测试作业是确定性的,不与外部服务交互。重试将掩盖不稳定的测试而不是快速失败。 |
| test-unit上的`parallel-opportunity` | 如果有益则应用 | 如果pytest支持分片,则可以添加`parallel: 3`和`pytest --shard=${CI_NODE_INDEX}/${CI_NODE_TOTAL}`,如果测试套件足够大以受益。 |
| stop-staging上的`dag-optimization` | 跳过 | 此作业是手动运行的,仅在环境清理时运行。DAG优化不会提供有意义的加速。 |
| 生产上的`no-dependency-proxy` | 应用 | 考虑使用`$CI_DEPENDENCY_PROXY_GROUP_IMAGE_PREFIX`以避免Docker Hub速率限制。需要GitLab高级版。 |
| rollback上的`environment-no-url` | 跳过 | 回滚作业不部署新版本,因此URL会误导。 |
| lint作业上的`missing-coverage` | 跳过 | 代码检查不产生覆盖数据。这是一个误报。 |

使用说明模板(必需输出)

在呈现验证过的管道后,您必须提供使用说明。这不是可选的。

必需格式:

## 使用说明

### 必需的CI/CD变量

在**Settings → CI/CD → Variables**中配置这些变量:

| 变量 | 描述 | 掩码 | 受保护 |
|----------|-------------|--------|-----------|
| [VARIABLE_NAME] | [描述] | 是/否 | 是/否 |

### 设置步骤

1. [第一设置步骤]
2. [第二设置步骤]
...

### 管道行为

- **在推送到`develop`时:** [会发生什么]
- **在推送到`main`时:** [会发生什么]
- **在标记`vX.Y.Z`时:** [会发生什么]

### 自定义

[任何自定义说明]

示例使用说明:

## 使用说明

### 必需的CI/CD变量

在**Settings → CI/CD → Variables**中配置这些变量:

| 变量 | 描述 | 掩码 | 受保护 |
|----------|-------------|--------|-----------|
| `KUBE_CONTEXT` | Kubernetes集群上下文名称 | 否 | 是 |
| `KUBE_NAMESPACE_STAGING` | 暂存命名空间(默认:暂存) | 否 | 否 |
| `KUBE_NAMESPACE_PRODUCTION` | 生产命名空间(默认:生产) | 否 | 是 |

**注意:**`CI_REGISTRY_USER`,`CI_REGISTRY_PASSWORD`和`CI_REGISTRY`由GitLab自动提供。

### Kubernetes集成设置

1. **在**Settings → Infrastructure → Kubernetes clusters**中启用Kubernetes集成**
2. **使用代理基础或证书基础方法添加您的集群**
3. **如果不存在,则创建暂存和生产命名空间:**
   ```bash
   kubectl create namespace staging
   kubectl create namespace production
  1. 在运行管道之前确保目标命名空间中存在部署

管道行为

  • 在推送到develop时: 运行测试 → 构建Docker映像 → 自动部署到暂存
  • 在推送到main时: 运行测试 → 构建Docker映像 → 手动部署到生产
  • 在标记vX.Y.Z时: 运行测试 → 构建Docker映像 → 手动部署到生产

自定义

  • 更新APP_NAME变量以匹配您的Kubernetes部署名称
  • 修改deploy-stagingdeploy-production作业中的环境URL
  • 通过取消注释模板中的Helm作业添加Helm部署

## 要强制执行的最佳实践

参考`references/best-practices.md`以获取全面的指导。关键原则:

### 强制性标准

1. **安全第一:**
   - 将Docker映像固定到特定版本(不是:latest)
   - 对secrets使用掩码变量($CI_REGISTRY_PASSWORD应该是掩码的)
   - 永远不要在日志中暴露secrets
   - 验证输入并清理变量
   - 对敏感环境使用受保护的变量

2. **性能:**
   - 对依赖项安装实施缓存(对npm,pip,maven等总是如此)
   - 适当时使用`needs`关键字进行DAG优化(当作业有依赖关系时总是如此)
   - 设置工件过期以避免存储膨胀(总是设置`expire_in`)
   - 适当时使用`parallel`执行(仅当测试框架支持分片时)
   - 最小化不必要的工件传递(当不需要时在`needs`中使用`artifacts: false`)

3. **可靠性:**
   - **对所有作业设置明确的`timeout`**(防止挂起的作业,通常10-30分钟)
     - 即使使用`default`或`extends`进行超时继承,也要在每个作业中明确设置`timeout`
     - 这提高了可读性并避免了验证器关于缺少超时的警告
     - 示例:使用`.deploy-template`的作业仍应明确设置`timeout: 15 minutes`
   - 为不稳定的操作添加重试逻辑(网络调用,外部API交互)
   - 适当使用`allow_failure`用于非关键作业(代码检查,可选扫描)
   - 对部署作业使用`resource_group`(防止并发部署)
   - 为测试作业添加`interruptible: true`(允许在新提交推送时取消)

4. **命名:**
   - 作业名称:描述性,kebab-case(例如,"build-application","test-unit")
   - 阶段名称:简短,清晰(例如,"build","test","deploy")
   - 变量名称:环境变量使用UPPER_SNAKE_CASE
   - 环境名称:小写(例如,"production","staging")

5. **配置组织:**
   - 使用`extends`进行可重用配置(优先于YAML锚点用于GitLab CI)
   - 使用`include`进行模块化管道文件(将大型管道组织到多个文件中)
   - 使用`rules`而不是已弃用的only/except(总是)
   - 为常见配置定义`default`设置(映像,超时,缓存,标签)
   - *仅在必要时*使用YAML锚点用于单个文件中的复杂重复结构
     - 注意:`extends`优先,因为它在GitLab UI中提供更好的可视化

6. **错误处理:**
   - 设置适当的超时值(总是 - 防止挂起的作业)
   - 为不稳定的操作配置重试行为(网络调用,外部API)
   - 使用`allow_failure: true`用于非阻塞作业(代码检查,可选扫描)
   - 需要时添加清理步骤`after_script`(例如,停止测试容器,清理)
   - 需要时实施通知机制(例如,部署失败时的Slack集成)

## 资源

### 参考(按需加载)

- `references/best-practices.md` - 全面的GitLab CI/CD最佳实践
  - 安全模式,性能优化
  - 管道设计,配置组织
  - 常见模式和反模式
  - **使用此:**当实施任何GitLab CI/CD资源时

- `references/common-patterns.md` - 常用的管道模式
  - 基本CI管道模式
  - Docker构建和推送模式
  - 部署模式(K8s,云平台)
  - 多项目和父子模式
  - **使用此:**当选择要使用的模式时

- `references/gitlab-ci-reference.md` - GitLab CI/CD YAML语法参考
  - 完整的关键字参考
  - 作业配置选项
  - 规则和条件执行
  - 变量和环境
  - **使用此:**用于语法和关键字详情

- `references/security-guidelines.md` - 安全最佳实践
  - 机密管理
  - 映像安全
  - 脚本安全
  - 工件安全
  - **使用此:**对于安全敏感配置

### 资产(模板定制)

- `assets/templates/basic-pipeline.yml` - 完整的基本管道模板
- `assets/templates/docker-build.yml` - Docker构建管道模板
- `assets/templates/kubernetes-deploy.yml` - Kubernetes部署模板
- `assets/templates/multi-project.yml` - 多项目编排模板

**如何使用模板:**
1. 复制相关模板结构
2. 用实际值替换所有[PLACEHOLDERS]
3. 根据用户需求定制逻辑
4. 移除不必要的部分
5. 验证结果

## 典型工作流程示例

**用户请求:** "为Node.js应用程序创建CI/CD管道,包括测试和Docker部署"

**流程:**
1. ✅ 理解需求:
   - Node.js应用程序
   - 运行测试(单元,代码检查)
   - 构建Docker映像
   - 部署到容器注册表
   - 在推送和合并请求时触发

2. ✅ 参考资源:
   - 检查`references/best-practices.md`以获取管道结构
   - 检查`references/common-patterns.md`以获取Node.js + Docker模式
   - 使用`assets/templates/docker-build.yml`作为基础

3. ✅ 生成管道:
   - 定义阶段(构建,测试,dockerize,部署)
   - 创建具有缓存的构建作业
   - 创建测试作业(单元,代码检查)与需要优化
   - 创建Docker构建作业
   - 添加适当的工件管理
   - 将Docker映像固定到版本
   - 包括适当的机密处理

4. ✅ 验证:
   - 调用`devops-skills:gitlab-ci-validator`技能
   - 修复任何报告的问题
   - 如有需要,重新验证

5. ✅ 呈现给用户:
   - 显示验证过的管道
   - 解释关键部分
   - 提供使用说明
   - 提及成功的验证

## 常见管道模式

### 基本三阶段管道
```yaml
stages:
  - build
  - test
  - deploy

build-job:
  stage: build
  script: make build

test-job:
  stage: test
  script: make test

deploy-job:
  stage: deploy
  script: make deploy
  when: manual

DAG管道与需求

stages:
  - build
  - test
  - deploy

build-frontend:
  stage: build
  script: npm run build:frontend

build-backend:
  stage: build
  script: npm run build:backend

test-frontend:
  stage: test
  needs: [build-frontend]
  script: npm test:frontend

test-backend:
  stage: test
  needs: [build-backend]
  script: npm test:backend

deploy:
  stage: deploy
  needs: [test-frontend, test-backend]
  script: make deploy

条件执行与规则

deploy-staging:
  script: 部署暂存
  rules:
    - if: $CI_COMMIT_BRANCH == "develop"
      when: always
    - if: $CI_PIPELINE_SOURCE == "merge_request_event"
      when: manual

deploy-production:
  script: 部署生产
  rules:
    - if: $CI_COMMIT_BRANCH == "main"
      when: manual
    - when: never

矩阵并行作业

test:
  parallel:
    matrix:
      - NODE_VERSION: ['18', '20', '22']
        OS: ['ubuntu', 'alpine']
  image: node:${NODE_VERSION}-${OS}
  script:
    - npm test

错误消息和故障排除

如果devops-skills:gitlab-ci-validator报告错误:

  1. **语法错误:**修复YAML格式,缩进或结构
  2. **作业引用错误:**确保引用的作业存在于需求/依赖关系中
  3. **阶段错误:**验证所有作业阶段都定义在阶段列表中
  4. **规则错误:**检查规则语法和变量引用
  5. **安全警告:**解决硬编码的机密和映像固定

如果找不到GitLab文档:

  1. 尝试替代搜索查询
  2. 直接检查docs.gitlab.com
  3. 查找GitLab存储库中的GitLab CI/CD模板
  4. 询问用户是否他们有特定版本要求

预交付检查清单

**必需:**在向用户呈现任何生成的管道之前,验证所有项目:

已加载参考文件(全部四个必需)

  • [ ] 在生成之前阅读references/best-practices.md
  • [ ] 在生成之前阅读references/common-patterns.md
  • [ ] 为语法参考阅读references/gitlab-ci-reference.md
  • [ ] 为安全模式阅读references/security-guidelines.md
  • [ ] 为管道类型阅读assets/templates/中的适当模板
  • [ ] 输出明确的确认声明(第2步格式)

应用了生成标准

  • [ ] 所有Docker映像都固定到特定版本(没有:latest
  • [ ] 所有作业都有明确的timeout(通常10-30分钟)
  • [ ] default块包括定义的timeout
  • [ ] 隐藏模板(.template-name)包括timeout
  • [ ] 为依赖项安装配置了缓存
  • [ ] 适当时使用needs关键字进行DAG优化
  • [ ] 使用rules(不是弃用的only/except
  • [ ] 为部署作业配置了resource_group
  • [ ] 工件设置了expire_in
  • [ ] 机密使用掩码CI/CD变量(没有硬编码)

完成验证

  • [ ] 调用了devops-skills:gitlab-ci-validator技能
  • [ ] 零CRITICAL问题
  • [ ] 零HIGH问题
  • [ ] 解决了MEDIUM问题(修复或在输出中解释,使用必需格式)
  • [ ] 确认了LOW问题(在输出中列出)
  • [ ] 审查了建议(使用必需格式)
  • [ ] 在任何修复后重新验证

准备呈现

  • [ ] 清楚地说明了验证状态
  • [ ] 解释了MEDIUM/LOW问题(带表格格式)
  • [ ] 提供了建议审查(带表格格式)
  • [ ] 提供了使用说明(变量,设置,行为)

如果任何复选框未勾选,请不要呈现管道。首先完成缺失的步骤。

必需输出部分

您的最终响应必须按顺序包含这些部分:

  1. 参考分析完成(第2步)
  2. 生成的管道.gitlab-ci.yml内容)
  3. 验证结果摘要(通过/失败状态)
  4. 解决了验证问题(MEDIUM问题表格)
  5. 验证器建议审查(建议表格)
  6. 使用说明(变量,设置,行为)

总结

生成GitLab CI/CD管道时,请始终遵循此顺序:

  1. 加载参考 - 必须首先阅读所有四个参考文件:
    • references/best-practices.md
    • references/common-patterns.md
    • references/gitlab-ci-reference.md
    • references/security-guidelines.md
    • 加上assets/templates/中的适当模板
  2. 理解 - 澄清用户需求,阶段和所需的作业
  3. 生成 - 使用模板并遵循标准(安全,缓存,命名,所有作业的明确超时)
  4. 搜索 - 对于特定功能,使用WebSearch或Context7获取当前文档
  5. 验证 - 始终使用devops-skills:gitlab-ci-validator技能
  6. 修复 - 解决所有关键/高问题,解决中等问题
  7. 验证清单 - 确认所有预交付检查清单项
  8. 呈现 - 提供经过验证的,生产就绪的管道和使用说明

生成的GitLab CI/CD管道应该是:

  • ✅ 安全,固定映像和适当的机密处理
  • ✅ 遵循当前最佳实践和约定
  • ✅ 使用适当的配置组织(extends,includes)
  • ✅ 针对性能优化(缓存,需求,DAG)
  • ✅ 适当记录,带有使用说明
  • ✅ 验证零关键/高问题
  • ✅ 生产就绪和可维护