如何将GitHub Workflow的Run命令抽离为可复用本地Action?
正确实现将Run命令抽离为本地Composite Action的方法
问题根源分析
第一次错误:
- 本地Action引用路径错误(多写了一个
./),导致GitHub无法定位到正确的action.yml文件。 - 初始的
action.yml未遵循Composite Action的格式规范,缺少runs.using: composite核心定义。
- 本地Action引用路径错误(多写了一个
第二次错误:
- YAML缩进格式混乱,
using和run未正确嵌套在runs节点下。 - Composite Action不支持直接在
runs下写run命令,必须通过steps数组定义具体执行步骤。
- YAML缩进格式混乱,
正确实现步骤
1. 创建符合规范的本地Composite Action文件
在仓库的.github/actions/md-lint/目录下创建action.yml,内容如下:
# .github/actions/md-lint/action.yml name: 'Markdown 格式检查' description: '使用markdownlint-cli批量检查Markdown文件格式' runs: using: 'composite' steps: - name: 执行markdownlint检查 run: | npx markdownlint-cli '**/*.md' \ --config '.github/workflows/.markdownlint.json' \ --ignore '.github/CONTRIBUTING.md' \ --ignore '.github/CODE_OF_CONDUCT.md' \ --ignore 'CHANGELOG.md' shell: bash
关键注意点:
- YAML缩进必须统一(建议用2个空格),确保
using和steps都正确嵌套在runs节点下。 - Composite Action的执行命令必须放在
steps数组的步骤中,同时明确指定shell类型。 - 配置文件路径保持与原Workflow一致,因为Action运行时的工作目录为仓库根目录。
2. 在Workflow中正确引用本地Action
修改.github/workflows/markdown-lint.yml中的对应步骤,替换为:
- name: Lint Markdown files uses: ./.github/actions/md-lint
也可简化为:
- name: Lint Markdown files uses: .github/actions/md-lint
关键注意点:
- 引用路径从仓库根目录开始,无需多余的
./前缀。 - 确保Workflow中已包含
actions/checkout@v4步骤(你的原Workflow已具备),否则GitHub无法拉取仓库中的本地Action文件。
验证运行
提交修改后的文件到仓库的main或develop分支,触发Workflow后即可正常执行Markdown格式检查,不会再出现路径或格式错误。
内容的提问来源于stack exchange,提问作者xkeshav
相关产品推荐
相关产品推荐

