如何将GitHub Action中Docker Args的单字符串转为多参数?
解决Docker Action接收多文件参数的拆分问题
方法1:利用tj-actions/changed-files的JSON输出格式
tj-actions/changed-files支持直接输出JSON数组格式的变更文件列表,这是最可靠的方式,还能自动处理带空格的文件名。
- 配置changed-files步骤输出JSON数组:
- name: 获取变更文件 id: changed-files uses: tj-actions/changed-files@v41 with: output_format: json # 关键:输出JSON数组而非字符串
- 在自制Docker Action的
action.yml中定义数组类型的输入参数:
inputs: files: description: "待处理的ResourceQuota文件列表" type: array required: true runs: using: 'docker' image: 'Dockerfile' args: - ${{ inputs.files }} # 数组会自动展开为多个命令行参数
- 调用Docker Action时解析JSON数组:
- name: 执行容量检查 uses: ./path/to/goCapacityCheck-action with: files: ${{ fromJSON(steps.changed-files.outputs.all_changed_files) }}
方法2:手动拆分字符串为数组(适用于无法修改changed-files配置的场景)
如果无法调整changed-files的输出格式,可以通过Shell命令将换行/空格分隔的字符串转换成JSON数组:
- 添加处理步骤生成数组格式的输出:
- name: 转换变更文件为数组 id: process-files run: | # 将换行分隔的文件列表转为带引号的JSON数组格式 FILE_LIST=$(echo "${{ steps.changed-files.outputs.all_changed_files }}" | awk '{print "\""$0"\","}' | sed '$ s/,$//') echo "files=[$FILE_LIST]" >> "$GITHUB_OUTPUT"
- 后续调用Docker Action时同样用
fromJSON解析:
- name: 执行容量检查 uses: ./path/to/goCapacityCheck-action with: files: ${{ fromJSON(steps.process-files.outputs.files) }}
关键注意点
- 确保你的Golang程序能正确接收多个命令行参数(即
os.Args[1:]能获取到所有传入的文件路径)。 - 当文件名包含空格或特殊字符时,JSON格式的处理方式能避免参数拆分错误,优先推荐方法1。
内容的提问来源于stack exchange,提问作者nsalfos
相关产品推荐
相关产品推荐

