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
相关产品推荐
相关产品推荐

