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

如何让被调用的GitHub可复用Workflow仅在手动触发时运行?

解决方案

要实现可复用Workflow仅在手动触发时运行,即使被其他Workflow调用也不执行,核心是通过判断触发事件类型控制job的执行逻辑,具体实现如下:

修改可复用Workflow

在可复用Workflow的job中添加条件判断,仅当触发事件为workflow_dispatch(手动触发)时才执行核心逻辑:

name: Reusable Workflow
on:
  workflow_call:
    secrets:
      secret_1:
        description: "The Environment secret for secret_1"
        required: true
  workflow_dispatch:
    inputs:
      test_choice:
        type: choice
        description: "Select a choice"
        required: true
        options: 
          - Test1
          - Test2
          - Test3

env:
  GITHUB_RUN_ID: $GITHUB_RUN_ID

jobs:
  log-the-inputs:
    runs-on: ubuntu-latest
    # 仅允许手动触发时执行此job
    if: github.event_name == 'workflow_dispatch'
    steps:
      - run: |
          echo "Choice: $choice"
          echo "Secret: $secret"
          echo "GitHub Run ID: $GITHUB_RUN_ID"
        env:
          choice: ${{ inputs.test_choice }}
          secret: ${{ secrets.secret_1 }}

逻辑说明

  • 当通过workflow_call调用该Workflow时,触发事件类型为workflow_call,此时if条件不满足,核心job会直接跳过,不会因缺少test_choice参数报错。
  • 只有通过手动触发(workflow_dispatch)时,if条件成立,job才会正常执行,此时test_choice是必填项,能保证输入有效。

如果需要在被调用时给出明确提示,可额外添加一个仅在workflow_call触发时运行的提示job:

jobs:
  call-not-supported:
    runs-on: ubuntu-latest
    if: github.event_name == 'workflow_call'
    steps:
      - run: echo "此Workflow仅支持通过workflow_dispatch手动触发,不支持workflow_call调用。"
  log-the-inputs:
    runs-on: ubuntu-latest
    if: github.event_name == 'workflow_dispatch'
    steps:
      - run: |
          echo "Choice: $choice"
          echo "Secret: $secret"
          echo "GitHub Run ID: $GITHUB_RUN_ID"
        env:
          choice: ${{ inputs.test_choice }}
          secret: ${{ secrets.secret_1 }}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.21 11:33:45