如何在GitHub Actions中为不同事件类型区分触发条件
实现带差异化条件的GitHub Actions PR触发逻辑
现有问题
当前的GitHub Actions工作流配置如下:
--- name: 'Deploy Test Env' on: pull_request: types: - edited - opened - synchronize branches: - develop paths: - '**.js' jobs: deploy: # yamllint disable rule:line-length name: '[DEV] DEPLOY' runs-on: ubuntu-latest steps: - name: Checkout uses: actions/checkout@v2 - name: Deploy run: | echo 'Deploy Dev Env by ${{ github.event.action }} event type' >> "${GITHUB_STEP_SUMMARY}"
这个配置的逻辑存在矛盾:
- 当PR创建(
opened)或分支有新提交(synchronize)时,只有JS文件变更才触发部署,这个逻辑合理 - 但当PR描述被修改(
edited事件)时,即使没有JS文件变更,也需要重新部署测试环境,当前的paths条件会直接阻止该事件触发任务
之前尝试的重复pull_request键写法不符合YAML规范,给单个事件类型单独加paths的写法也不被GitHub Actions支持。
可行解决方案
GitHub Actions允许将on字段中的事件配置为数组形式,以此实现同一事件的多套触发条件。具体配置如下:
--- name: 'Deploy Test Env' on: # 针对opened/synchronize事件:仅当JS文件变更时触发 - pull_request: types: - opened - synchronize branches: - develop paths: - '**.js' # 针对edited事件:无需文件变更,只要PR描述修改就触发 - pull_request: types: - edited branches: - develop jobs: deploy: # yamllint disable rule:line-length name: '[DEV] DEPLOY' runs-on: ubuntu-latest steps: - name: Checkout uses: actions/checkout@v2 - name: Deploy run: | echo 'Deploy Dev Env by ${{ github.event.action }} event type' >> "${GITHUB_STEP_SUMMARY}"
配置说明
- 将
on的值改为数组,每个元素是一套独立的pull_request触发规则 - 第一套规则对应
opened和synchronize事件,保留paths条件,确保只有JS文件变更时才触发部署 - 第二套规则仅对应
edited事件,不设置paths条件,只要PR描述被修改就触发部署
这样就能完美实现需求:代码变更时按需部署,PR参数修改时强制重新部署。
内容的提问来源于stack exchange,提问作者rzlvmp
相关产品推荐
相关产品推荐

