Github Action故障排查:检测目录变更后执行helm cm-push失败
问题分析与修正方案
你的Github Action代码存在几处关键错误,导致无法正常执行变更检测与helm推送操作,具体问题和修复方案如下:
核心错误点
- 变量名与步骤引用完全不匹配:
- 第一步
get-changed-charts里错误将输出变量名写成changed_chars(正确应为changed_charts) - 第二步推送时引用了不存在的步骤ID
list-changed(实际是get-changed-charts),还错误调用了不存在的changed_charts_core变量
- 第一步
- 变更检测逻辑缺陷:
git show仅显示当前单条提交的变更,若推送多个提交会漏检;改用基于前后提交哈希的diff更准确- 将换行转成空格后,后续用
IFS=$'\n'读取数组完全失效,应该保留换行格式输出
- 依赖与版本问题:
actions/checkout@v2版本过旧,建议升级到v4- 缺少
helm cm-push插件的安装步骤,直接执行会报错
修正后的完整代码
name: Push Changed Charts on: push: branches: ["helm-autopush-charts-base"] jobs: push-changed-charts: runs-on: self-hosted steps: - name: Checkout repository uses: actions/checkout@v4 with: fetch-depth: 2 # 拉取足够历史用于对比前后提交 - name: Install Helm cm-push plugin run: helm plugin install https://github.com/chartmuseum/helm-push.git - name: Get changed charts id: get-changed-charts run: | # 检测charts-v2/core或platform下的变更目录 CHANGED_CHARTS=$(git diff --name-only ${{ github.event.before }} ${{ github.event.after }} | xargs dirname 2>/dev/null | grep -E 'charts-v2/(core|platform)' | awk -F'/' '{print $1"/"$2"/"$3}' | sort | uniq) # 用多行格式输出变量,避免空格分隔的问题 printf "changed_charts<<EOF\n%s\nEOF" "$CHANGED_CHARTS" >> "$GITHUB_OUTPUT" - name: Push changed charts if: steps.get-changed-charts.outputs.changed_charts != '' run: | while IFS= read -r chart; do if [ -n "$chart" ]; then echo "Pushing chart: $chart" helm cm-push "./$chart" "${{ secrets.CHARTMUSEUM_URL }}/" -f fi done <<< "${{ steps.get-changed-charts.outputs.changed_charts }}"
额外说明
fetch-depth: 2确保能获取到推送前的历史提交,保证变更检测准确- 增加
if条件判断,避免无变更时执行无效的推送步骤 - 使用
while read循环处理换行分隔的输出,比数组读取更稳定 - 新增插件安装步骤,确保
helm cm-push命令可用
内容的提问来源于stack exchange,提问作者cloudbud
相关产品推荐
相关产品推荐

