如何在另一作业中复用GitHub Action工作流步骤并获取其输出?
问题根因
你遇到的报错是GitHub Actions的语法规则限制:可复用工作流仅支持在作业顶层的jobs.*.uses字段下调用,不允许嵌入到步骤的uses字段中。此外就算没有语法限制,可复用工作流本身运行在独立的Runner实例中,和调用方作业不共享本地文件系统,你也无法直接读取它生成的本地文件。
解决方案
方案1:调整可复用工作流配置+拆分作业(推荐)
步骤1:改造可复用build.yml配置
在可复用工作流中新增制品上传逻辑和输出参数,将生成的source maps传递给调用方:
# 可复用工作流 build.yml 配置 on: workflow_call: # 声明工作流输出,对外暴露制品信息 outputs: sourcemap_artifact_name: description: "构建生成的source maps制品名称" value: ${{ jobs.build.outputs.sourcemap_artifact_name }} jobs: build: runs-on: ubuntu-latest outputs: sourcemap_artifact_name: ${{ steps.set_artifact.outputs.name }} steps: # 原有构建逻辑 - uses: actions/checkout@v4 - run: npm install && npm run build # 新增:设置制品名 - id: set_artifact run: echo "name=source-maps-${{ github.run_id }}" >> $GITHUB_OUTPUT # 新增:上传source maps到Actions制品存储 - uses: actions/upload-artifact@v4 with: name: ${{ steps.set_artifact.outputs.name }} path: ./dist/*.map # 替换为你实际的source maps文件路径
步骤2:调整调用方工作流结构
将构建拆分为独立作业,上传步骤所在作业依赖构建作业完成后,下载制品再执行上传:
# 调用方工作流配置 jobs: # 独立作业调用可复用构建工作流 call-build-workflow: uses: my-org/some-repo/.github/workflows/build.yml@main # 原Released作业,依赖构建作业完成 released: needs: call-build-workflow runs-on: ubuntu-latest steps: # 下载构建作业生成的source maps制品 - uses: actions/download-artifact@v4 with: name: ${{ needs.call-build-workflow.outputs.sourcemap_artifact_name }} # 原有上传逻辑 - name: Upload source maps run: something
方案2:替换为复合Action(无需拆分作业)
如果你不想拆分作业,也可以将原来的构建逻辑封装为复合Action而非可复用工作流,复合Action支持直接在steps下调用,和当前作业共享同一个Runner环境,构建生成的source maps可以直接在后续步骤中读取,无需额外的制品上传下载操作。
内容的提问来源于stack exchange,提问作者Duncan Lukkenaer
相关产品推荐
相关产品推荐

