GitHub Actions调用工作流时matrix值无法在uses中解析的问题
GitHub Actions矩阵变量无法在
uses字段中解析的问题解决 问题原因
GitHub Actions的工作流解析逻辑是先处理uses字段,再初始化Job的矩阵变量。也就是说,当系统尝试解析uses里的路径时,matrix.workflow还未被替换为具体字符串,导致它直接把./.github/workflows/${{ matrix.workflow }}.yaml当作实际路径查找,自然找不到对应工作流文件。
解决方案
方案1:拆分独立Job(简单直接)
把每个工作流调用拆成单独的Job,绕开矩阵变量的限制:
jobs: update-apples: uses: ./.github/workflows/update-apples.yaml update-pears: uses: ./.github/workflows/update-pears.yaml update-peaches: uses: ./.github/workflows/update-peaches.yaml
方案2:通过Workflow Dispatch动态触发(适合大量子工作流场景)
如果子工作流数量较多,不想重复编写Job,可以通过GitHub API动态触发每个子工作流:
- 修改子工作流配置:给每个子工作流添加
workflow_dispatch触发条件(保留原有触发条件不影响):
# 以update-apples.yaml为例 on: workflow_dispatch: # 允许通过API触发 # 原有触发条件,比如schedule、push等
- 修改主工作流配置:用一个带矩阵的Job,通过
github-script调用API触发子工作流:
jobs: trigger-sub-workflows: strategy: matrix: workflow: [update-apples, update-pears, update-peaches] runs-on: ubuntu-latest permissions: contents: read actions: write # 必须配置该权限才能触发其他工作流 steps: - name: 触发${{ matrix.workflow }}工作流 uses: actions/github-script@v6 with: script: | await github.rest.actions.createWorkflowDispatch({ owner: context.repo.owner, repo: context.repo.repo, workflow_id: "${{ matrix.workflow }}.yaml", ref: context.ref })
注意:这种方式触发的子工作流会作为独立运行实例存在,不会显示在当前主工作流的运行详情中,需要在GitHub Actions的运行列表里单独查看。
内容的提问来源于stack exchange,提问作者ikjhgfrtyuhjk
相关产品推荐
相关产品推荐

