GitHub Actions手动触发workflow后,jobs没执行,该怎么排查?
我配置了一个手动触发的workflow,但每次点击“Run workflow”后,jobs根本没启动。明明事件写对了,分支也没问题,这是为什么呢?
这是我的workflow配置片段:
name: Manual Test
on:
workflow_dispatch:
inputs:
env:
description: "Environment"
required: true
jobs:
test-job:
runs-on: ubuntu-latest
if: ${{ github.event.inputs.env != 'production' }}
steps:
- run: echo "This should run except prod"
无论输入什么值,任务都不执行。把if条件改成true后还是不行,难道是事件参数的问题?或者jobs的条件写法有误?
if条件的问题,或者 workflow 没有正确绑定事件。先说重点:你这个写法本身有个坑,
if表达式写在 job 层级是可以的,但你得确保整个 job 是可以被调度的,否则连 job 都不执行,里面的 steps 也就不会动。你这个 workflow 改成这样就能跑起来:
关键点是把
if条件从 job 的steps外一层移到了 job 的根层级。GitHub Actions 的设计是 job 层级的if会决定这个 job 是否被加入执行队列,而写在 steps 里只会影响 steps 的执行,但前提是 job 本身已经被调度了。另外你也可以试着先去掉
if条件,直接跑一次,看看 job 能不能起来,这样能排除参数传递的问题:如果这个 job 能正常执行,说明事件触发没问题,问题就出在
if条件上。还有一点小细节容易忽略:手动触发 workflow 时输入的参数是区分大小写的,比如你输入
Production,它就不会等于'production'。建议在条件判断时加一层容错处理,比如统一转成小写:或者更简洁的写法是转成小写比较:
总之,先确认 job 能跑起来,再排查条件逻辑有没有拦住它。这类问题基本都是逻辑条件写错了或者触发器没配对。
workflow_dispatch的 inputs 定义上,需要确保输入的值正确传递。改成下面这样试试:如果还是不行,检查下是否有权限问题或者workflow被其他条件限制了。