确切使用 Jenkins Gerrit 触发器插件的 "Forbidden File path"
exact use of "Forbidden File path" of the Jenkins Gerrit Trigger plugin
Jenkins Gerrit 触发器插件有一个按钮 "Add Forbidden File path" 但实际上没有太多可用的文档。
那么它的确切行为是什么?
- 如果一个个更改的文件匹配,是否会抑制触发器?
- 或者如果所有个更改的文件匹配,它是否禁止触发?
(换句话说:只有匹配的文件被更改)
- 我想它 "overrides" 与 "Add File Path" 匹配,不是吗?
- 它只适用于目录名还是适用于文件名?
这导致了以下问题:
"File Path"= ^((?!_abc)(?!_def).)*$
行为等于:
"Forbidden File Path"= ^.*_abc$|^.*_def$
?
一个或多个文件
Does it inhibit the trigger if one of the changed files match?
Or does it inhibit the trigger if all of the changed files match?
(in other words: only matching files have changed)
根据 commit message 如果任何文件匹配,触发器将被禁止。
This forbidden file allows the project not to trigger if any forbidden
file has been impacted.
覆盖
I suppose it "overrides" a match of "Add File Path", doesn't it?
是的。 Add Forbidden file path
的优先级高于 Add File path
。
为...工作
does it work for directory names only or down to file names?
对于两者。但是很难添加空文件夹。
关于行为的问题
This leads mit to the question if:
"File Path"= ^((?!_abc)(?!_def).)*$
behaves equal to:
"Forbidden File Path"= ^._abc$|^._def$ ?
可能您犯了一个错误:^((?!_abc)(?!_def).)*$
而不是 ^.*(?!_abc)(?!_def)$
。因为在第一种情况下,您从一开始就比较 (^
) 并且您的量词 (*
) 重复整个表达式,而不是 .
.
在第二种情况下,我们对两个或多个文件有不同的行为。因为
Add File path
如果找到其中任何一个,则开始构建。但如果找到任何文件,Add Forbidden File path
会禁止构建。
- 此外,您至少需要用
**
填充 Add File path
才能开始工作 Add Forbidden File path
。如果 Add File path
为空,Add Forbidden File path
不起作用。
根据文档,我的需求应该通过插件的 V2.16.0 来解决(参见 JENKINS-30620)- 新选项“禁用严格禁止文件验证”应该用于此。
在帮助中它说:
- Enabling this option will allow an event to trigger a build if the event contains BOTH one or more wanted file paths AND one or more
forbidden file paths.
- In other words, with this option, the build will not get triggered if the change contains only forbidden files, otherwise it
will get triggered.
所以我花了一天时间进行测试但它似乎在我的网站上不起作用。
但至少我 通过 "Add File Path" 参数让它工作 ,这要感谢 JENKINS-19891:
中的信息
However, since the commit always contains COMMIT_MSG file, it will match the regex and triggers the build.
所以我将提交消息文件添加到我的正则表达式中,最终给出了正确的结果。
示例: ^((?!\/COMMIT_MSG|cunit|_abc|_def[\/\.]).)*$
...用于忽略名称(包括路径)包含 "cunit"、“_abc”、“_def”中的任何文件的更改。或“_def/”
Jenkins Gerrit 触发器插件有一个按钮 "Add Forbidden File path" 但实际上没有太多可用的文档。
那么它的确切行为是什么?
- 如果一个个更改的文件匹配,是否会抑制触发器?
- 或者如果所有个更改的文件匹配,它是否禁止触发?
(换句话说:只有匹配的文件被更改) - 我想它 "overrides" 与 "Add File Path" 匹配,不是吗?
- 它只适用于目录名还是适用于文件名?
这导致了以下问题:
"File Path"= ^((?!_abc)(?!_def).)*$
行为等于:
"Forbidden File Path"= ^.*_abc$|^.*_def$
?
一个或多个文件
Does it inhibit the trigger if one of the changed files match? Or does it inhibit the trigger if all of the changed files match? (in other words: only matching files have changed)
根据 commit message 如果任何文件匹配,触发器将被禁止。
This forbidden file allows the project not to trigger if any forbidden file has been impacted.
覆盖
I suppose it "overrides" a match of "Add File Path", doesn't it?
是的。 Add Forbidden file path
的优先级高于 Add File path
。
为...工作
does it work for directory names only or down to file names?
对于两者。但是很难添加空文件夹。
关于行为的问题
This leads mit to the question if:
"File Path"= ^((?!_abc)(?!_def).)*$
behaves equal to:
"Forbidden File Path"= ^._abc$|^._def$ ?
可能您犯了一个错误:^((?!_abc)(?!_def).)*$
而不是 ^.*(?!_abc)(?!_def)$
。因为在第一种情况下,您从一开始就比较 (^
) 并且您的量词 (*
) 重复整个表达式,而不是 .
.
在第二种情况下,我们对两个或多个文件有不同的行为。因为
Add File path
如果找到其中任何一个,则开始构建。但如果找到任何文件,Add Forbidden File path
会禁止构建。- 此外,您至少需要用
**
填充Add File path
才能开始工作Add Forbidden File path
。如果Add File path
为空,Add Forbidden File path
不起作用。
根据文档,我的需求应该通过插件的 V2.16.0 来解决(参见 JENKINS-30620)- 新选项“禁用严格禁止文件验证”应该用于此。
在帮助中它说:
- Enabling this option will allow an event to trigger a build if the event contains BOTH one or more wanted file paths AND one or more
forbidden file paths.- In other words, with this option, the build will not get triggered if the change contains only forbidden files, otherwise it will get triggered.
所以我花了一天时间进行测试但它似乎在我的网站上不起作用。
但至少我 通过 "Add File Path" 参数让它工作 ,这要感谢 JENKINS-19891:
However, since the commit always contains COMMIT_MSG file, it will match the regex and triggers the build.
所以我将提交消息文件添加到我的正则表达式中,最终给出了正确的结果。
示例: ^((?!\/COMMIT_MSG|cunit|_abc|_def[\/\.]).)*$
...用于忽略名称(包括路径)包含 "cunit"、“_abc”、“_def”中的任何文件的更改。或“_def/”