You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在可调用GitHub Actions工作流中跨作业复用步骤与默认值

解决可调用工作流的代码复用问题

错误原因分析

  1. 全局defaults无法访问inputs:inputs属于工作流调用的上下文,仅能在**作业(job)或步骤(step)**层级的表达式中使用,全局层级不支持直接引用inputs,这是你遇到Unrecognized named-value: 'inputs'错误的核心原因。
  2. needs: setup无法共享环境:GitHub Actions的每个作业运行在独立的Runner实例上,needs仅控制作业执行顺序,不会将setup作业的环境、已安装依赖或文件系统传递给后续作业,后续作业仍需重新完成初始化步骤。

方案一:YAML锚点复用作业模板(推荐,适用于单工作流内复用)

利用YAML的锚点(Anchor)和引用(Alias)特性,定义通用作业模板,复用所有重复的配置:

on:
  workflow_call:
    inputs:
      working-directory:
        required: true
        type: string

jobs:
  # 定义通用作业锚点,包含所有重复的配置
  _base_job: &base_job
    defaults:
      run:
        working-directory: ${{ inputs.working-directory }}
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v3
      - name: Use Node.js
        uses: actions/setup-node@v3
        with:
          node-version: 18.x
          cache: "npm"
          cache-dependency-path: "${{ inputs.working-directory }}/package-lock.json"
      - run: npm ci

  # 复用通用模板,仅添加专属步骤
  lint:
    <<: *base_job
    steps:
      <<: *base_job.steps
      - run: npm run lint

  typecheck:
    <<: *base_job
    steps:
      <<: *base_job.steps
      - run: npm run typecheck

  test:
    <<: *base_job
    steps:
      <<: *base_job.steps
      - run: npm run test --if-present

说明

  • &base_job:定义通用作业的锚点,包含重复的运行环境、默认工作目录和初始化步骤。
  • <<: *base_job:引用锚点的所有配置,快速生成作业基础结构。
  • <<: *base_job.steps:引用锚点中的步骤列表,再追加当前作业的专属步骤,避免重复编写初始化代码。

方案二:复合Action(适用于跨工作流复用)

如果需要在多个工作流中复用这些初始化步骤,可以封装成复合Action:

  1. 在仓库中创建复合Action文件:.github/actions/setup-node-env/action.yml
name: 'Setup Node.js Environment'
inputs:
  working-directory:
    required: true
    type: string

runs:
  using: "composite"
  steps:
    - uses: actions/checkout@v3
      shell: bash
    - name: Use Node.js
      uses: actions/setup-node@v3
      with:
        node-version: 18.x
        cache: "npm"
        cache-dependency-path: "${{ inputs.working-directory }}/package-lock.json"
      shell: bash
    - run: npm ci
      working-directory: ${{ inputs.working-directory }}
      shell: bash
  1. 在可调用工作流中使用该复合Action:
on:
  workflow_call:
    inputs:
      working-directory:
        required: true
        type: string

jobs:
  lint:
    runs-on: ubuntu-latest
    steps:
      - uses: ./.github/actions/setup-node-env
        with:
          working-directory: ${{ inputs.working-directory }}
      - run: npm run lint
        working-directory: ${{ inputs.working-directory }}

  typecheck:
    runs-on: ubuntu-latest
    steps:
      - uses: ./.github/actions/setup-node-env
        with:
          working-directory: ${{ inputs.working-directory }}
      - run: npm run typecheck
        working-directory: ${{ inputs.working-directory }}

  test:
    runs-on: ubuntu-latest
    steps:
      - uses: ./.github/actions/setup-node-env
        with:
          working-directory: ${{ inputs.working-directory }}
      - run: npm run test --if-present
        working-directory: ${{ inputs.working-directory }}

说明

  • 复合Action将初始化步骤封装成独立模块,可在当前仓库的任意工作流中调用,甚至通过GitHub仓库引用在其他仓库使用。
  • 每个作业只需调用该Action,再执行专属命令即可,代码结构更简洁模块化。

内容的提问来源于stack exchange,提问作者Kazuto_Ute

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.15 21:54:51