github 操作 - 仅当 .github/workflows/

问题描述 投票:0回答:2

我需要仅当 .github/workflows/* 中的文件发生更改时才触发 github 工作流程。如果任何其他文件发生更改,它不应触发工作流程。

例如,如果我在 Docker 文件中进行更改,则工作流程不应触发。

我的分支是这样的: enter image description here

我的工作流程 yaml 看起来像这样

on: 
  #[push]
  pull_request:
    branches:    
      - test  
    types:
      - closed
    #paths-ignore:
    #  - '.github/*'
    paths:
      - '.github/*'     

上述 yaml 无法满足我的需求。

github github-actions
2个回答
3
投票

这里的问题是工作流触发器配置(

on
字段)并不完全按照您的预期工作。

根据官方文档

如果您指定多个事件,则只需发生其中一个事件即可触发您的工作流程。如果您的工作流程同时发生多个触发事件,将触发多个工作流程运行。

因此,在您的情况下,

pull_request
事件中的每个子类型都被视为单独的事件,即使不满足其他子类型的条件也会触发工作流。

这里发生的情况是,对

test
分支的任何 PR 都会触发
pull_request: branches: - test
子类型,与
paths: - '.github/*'
配置无关(如果分支是
test
,更新哪个文件并不重要)。

此外,通过这些配置,如果您在从另一个分支打开 PR 时更新了

'.github/*'
路径,工作流程也会触发。


总结一下您当前的配置:

  • 从分支打开 PR
    test
    :工作流程将触发。
  • 从不是
    test
    的分支打开 PR:只有当路径发生变化时,工作流程才会触发
    '.github/*'
  • 关闭任何 PR:工作流程将触发。

如果您希望工作流仅在特定路径发生更改时触发,则在打开 PR 时,您应该使用:

on: 
  pull_request:
    paths:
      - '.github/workflows/*'  

(无需配置任何其他事件。)

现在,如果您希望每次推送到分支时(例如,当您打开或更新 PR 时)触发工作流程,您应该使用:

on: 
  push:
    paths:
      - '.github/workflows/*'  

0
投票

这个答案不太正确。我的意思是,您对事件的看法是正确的,但上面的工作流程中只有一个事件,即

pull_request
branches
type
path
过滤器,并且所有这些都应该满足才能触发工作流程。事实上,上面的例子与官方filter文档

中的例子非常相似

这里最可能的问题是路径表达式

.github/*
,我相信它不会考虑
.github/workflows
文件夹(它只会查找
.github
中的更改)。在这种情况下,正确的路径表达式应该是
.github/workflows/*

© www.soinside.com 2019 - 2024. All rights reserved.