如何让被调用的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
相关产品推荐
相关产品推荐

