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

GitHub Actions中识别变更Helm Chart及优化cm-push插件检查的方法

问题解决方案

1. 识别变更Helm Chart并推送

在release任务中,可复用chart-testing的list-changed命令获取变更的Chart列表,将其保存为步骤输出后,循环执行推送命令即可完成批量推送。具体实现:

  • 在Get changed charts步骤中,通过ct list-changed提取变更Chart路径,保存为步骤输出变量。
  • 基于该变量循环调用helm cm-push,逐个推送变更的Chart到ChartMuseum。

2. 优化Helm cm-push插件的检查安装方式

原方法用grep匹配易出现误判(如其他插件名称包含cm-push片段),可采用更精确的检查逻辑:

  • 使用helm plugin inspect cm-push命令,若命令返回非0值则判定插件未安装,执行安装操作;该命令仅会在插件存在时返回正常结果,避免部分匹配问题。

完整优化后的GitHub工作流代码
name: Lint and Test Charts

on: pull_request

jobs:
  lint-test:
    runs-on: self-hosted
    steps:
      - name: Checkout
        uses: actions/checkout@v3
        with:
          fetch-depth: 0

      - name: Set up Helm
        uses: azure/setup-helm@v4.2.0
        with:
          version: v3.14.4

      - uses: actions/setup-python@v5
        with:
          python-version: '3.x'
          check-latest: true

      - name: Set up chart-testing
        uses: helm/chart-testing-action@v2.6.1

      - name: Run chart-testing (list-changed)
        id: list-changed
        run: |
          changed=$(ct list-changed --config .github/ct.yaml)
          if [[ -n "$changed" ]]; then
            echo "changed=true" >> "$GITHUB_OUTPUT"
            echo "changed_charts<<EOF" >> "$GITHUB_OUTPUT"
            echo "$changed" >> "$GITHUB_OUTPUT"
            echo "EOF" >> "$GITHUB_OUTPUT"
          fi

      - name: Run chart-testing (lint)
        if: steps.list-changed.outputs.changed == 'true'
        run: ct lint --config .github/ct.yaml

  release:
    runs-on: self-hosted
    needs:
      - lint-test
    if: needs.lint-test.outputs.changed == 'true'  # 仅当存在变更Chart时执行
    steps:
      - name: Checkout
        uses: actions/checkout@v3
        with:
          fetch-depth: 0

      - name: Set up Helm
        uses: azure/setup-helm@v4.2.0
        with:
          version: v3.14.4

      - name: Install/Verify Helm cm-push plugin
        run: |
          # 精确检查cm-push插件状态,不存在则安装
          if ! helm plugin inspect cm-push > /dev/null 2>&1; then
            helm plugin install https://github.com/chartmuseum/helm-push
          fi

      - name: Set up chart-testing
        uses: helm/chart-testing-action@v2.6.1

      - name: Get changed charts
        id: get-changed
        run: |
          changed=$(ct list-changed --config .github/ct.yaml)
          echo "changed_charts<<EOF" >> "$GITHUB_OUTPUT"
          echo "$changed" >> "$GITHUB_OUTPUT"
          echo "EOF" >> "$GITHUB_OUTPUT"

      - name: Push changed charts to ChartMuseum
        run: |
          # 循环推送每个变更的Chart
          while IFS= read -r chart; do
            echo "Pushing chart: $chart"
            helm cm-push "$chart" http://chartmuseum/ -f
          done <<< "${{ steps.get-changed.outputs.changed_charts }}"

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.24 05:38:17