You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

GitLab中如何在仅Helm仓库变更时跳过指定阶段?

仅Helm仓库变更时跳过Build/Test阶段的解决方案

完全可以通过CI工具的变更文件检测+阶段条件控制实现需求,核心思路是先判断提交是否仅修改了Helm相关文件/目录,再据此跳过Build和Test阶段,只执行Deploy和Release。以下是主流CI工具的具体实现方案:

GitHub Actions 实现

利用tj-actions/changed-files工具检测变更范围,通过if条件控制阶段执行:

name: Helm-optimized CI/CD
on: [push, pull_request]

jobs:
  # Build和Test阶段:仅当存在非Helm文件变更时执行
  build-test:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - name: 检测是否仅Helm文件变更
        id: helm-change-check
        uses: tj-actions/changed-files@v41
        with:
          # 定义Helm相关文件/目录
          files: |
            charts/**
            Chart.yaml
            values.yaml
          # 定义需要排除的非Helm文件/目录
          files_ignore: |
            src/**
            tests/**
      - name: 执行Build
        if: steps.helm-change-check.outputs.only_changed != 'true'
        run: npm run build
      - name: 执行Test
        if: steps.helm-change-check.outputs.only_changed != 'true'
        run: npm run test

  # Deploy和Release阶段:始终执行(或仅当Helm变更时执行)
  deploy-release:
    runs-on: ubuntu-latest
    needs: build-test
    steps:
      - uses: actions/checkout@v4
      - name: Helm部署到K8s
        run: helm upgrade --install my-app ./charts/my-app
      - name: 发布Helm Chart到仓库
        run: helm push ./charts/my-app oci://registry.example.com/charts

GitLab CI 实现

利用GitLab自带的rules:changes语法实现条件控制:

stages:
  - build-test
  - deploy-release

# Build和Test阶段:仅当非Helm文件变更时触发
build-test:
  stage: build-test
  script:
    - npm run build
    - npm run test
  rules:
    - if: '$CI_COMMIT_BRANCH == "main"'
      changes:
        - src/**/*
        - tests/**/*
      when: always
    - when: never

# Deploy和Release阶段:Helm变更或全量变更时触发
deploy-release:
  stage: deploy-release
  script:
    - helm upgrade --install my-app ./charts/my-app
    - helm push ./charts/my-app oci://registry.example.com/charts
  rules:
    # 仅Helm变更时直接执行
    - if: '$CI_COMMIT_BRANCH == "main"'
      changes:
        - charts/**/*
        - Chart.yaml
        - values.yaml
      when: always
    # 全量变更时,等待build-test完成后执行
    - if: '$CI_COMMIT_BRANCH == "main"'
      needs: [build-test]
      when: always

通用注意事项

  • 务必明确Helm相关文件/目录的精确路径,避免漏判(比如包含子Chart的charts/目录、全局的Chart.yaml等)
  • 部分CI工具的变更检测会忽略.gitignore中的文件,需确认是否符合你的需求
  • 多分支场景下,建议结合分支规则(如仅主分支执行自动部署)一起配置

内容的提问来源于stack exchange,提问作者Sam

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.25 06:48:16