如何配置GitHub Actions工作流,排除指定提交作者触发?
问题描述
现有如下GitHub Actions工作流配置:
name: CI 'on': push: branches: - master pull_request: branches: - master workflow_dispatch: jobs: lint: ... unit-test: ...
当前该工作流在每次提交时都会触发,无论提交作者是谁。请问能否配置该工作流,使其仅在提交作者不是指定用户(如user1)时触发?具体该如何配置?
解决方案
完全可以实现,核心是利用GitHub Actions的上下文变量获取提交/PR发起者信息,再通过if条件做反向过滤,以下是具体配置方式:
方式一:全局统一过滤(所有任务生效)
如果希望整个工作流的所有任务都只在非指定用户提交时运行,可以给每个任务添加if判断:
name: CI 'on': push: branches: - master pull_request: branches: - master workflow_dispatch: jobs: lint: if: github.event.pusher.name != 'user1' && github.event.pull_request.user.login != 'user1' # 原lint任务配置... unit-test: if: github.event.pusher.name != 'user1' && github.event.pull_request.user.login != 'user1' # 原unit-test任务配置...
方式二:区分事件类型优化(更严谨)
由于push和pull_request事件对应的上下文变量不同,直接混用可能导致变量不存在的报错,建议按事件类型分别判断,同时保留手动触发的权限:
name: CI 'on': push: branches: - master pull_request: branches: - master workflow_dispatch: jobs: lint: if: > (github.event_name == 'push' && github.event.pusher.name != 'user1') || (github.event_name == 'pull_request' && github.event.pull_request.user.login != 'user1') || github.event_name == 'workflow_dispatch' # 原lint任务配置... unit-test: if: > (github.event_name == 'push' && github.event.pusher.name != 'user1') || (github.event_name == 'pull_request' && github.event.pull_request.user.login != 'user1') || github.event_name == 'workflow_dispatch' # 原unit-test任务配置...
如果不需要手动触发时绕过限制,可以删除最后一行github.event_name == 'workflow_dispatch'。
额外补充
- 要排除多个用户时,可用数组判断简化逻辑:比如
!contains(['user1', 'user2'], github.event.pusher.name)(push事件)、!contains(['user1', 'user2'], github.event.pull_request.user.login)(PR事件)。 - 手动触发时如需限制触发者,可添加判断:
github.event.sender.login != 'user1'。
内容的提问来源于stack exchange,提问作者fgalan
相关产品推荐
相关产品推荐

