Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/git/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Git 如何让Jenkins Gerrit触发器忽略我的CI用户';他犯了什么罪?_Git_Jenkins_Jenkins Plugins_Gerrit_Gerrit Trigger - Fatal编程技术网

Git 如何让Jenkins Gerrit触发器忽略我的CI用户';他犯了什么罪?

Git 如何让Jenkins Gerrit触发器忽略我的CI用户';他犯了什么罪?,git,jenkins,jenkins-plugins,gerrit,gerrit-trigger,Git,Jenkins,Jenkins Plugins,Gerrit,Gerrit Trigger,我希望我的代码审查工作忽略来自其他Jenkins工作的更改,例如我的发布工作。这些提交可以由提交用户(最好)或提交注释字符串(也可以接受)标识 基本上,我的问题与询问的用户相同,只是我没有使用带有轮询的Git插件。相反,我使用的是,每个新的更改集都会触发 我相信下面的截图包括GT插件的相关配置 我在网上搜索过,但找不到如何实现这一点。我为Git插件找到了这种配置,但我不能使用它,因为我们使用Gerrit,所以我们需要预提交变更集触发,而不是轮询 一种建议的方法是使用 我将发布作业设置为在其提交消

我希望我的代码审查工作忽略来自其他Jenkins工作的更改,例如我的发布工作。这些提交可以由提交用户(最好)或提交注释字符串(也可以接受)标识

基本上,我的问题与询问的用户相同,只是我没有使用带有轮询的Git插件。相反,我使用的是,每个新的更改集都会触发

我相信下面的截图包括GT插件的相关配置

我在网上搜索过,但找不到如何实现这一点。我为Git插件找到了这种配置,但我不能使用它,因为我们使用Gerrit,所以我们需要预提交变更集触发,而不是轮询


一种建议的方法是使用

我将发布作业设置为在其提交消息中包含[ci skip]

当使用它时,我发现它实际上仍然会触发一个构建。但是,在检查提交后,构建将作为“未构建”退出。这意味着构建仍然会扰乱我的构建历史,并且它仍然会消耗资源来获取和修改解析等,因此它对我来说是一个不太可取的解决方案


虽然这解决了我眼前的问题,但我很乐意接受其他答案,因为我对这个答案并不完全满意。

Gerrit Trigger提供了一组变量,您可以在其中找到提交者的名称、提交消息等。我使用的解决方案是测试这些变量的值,如果测试通过,则结束构建作业。但如果您使用的是Jenkins V2.3或更高版本,则可能会出现问题。有些变量无法通过shell中的$in访问。您可以参考Jenkins V2.3发行说明来解决此问题。您可以向右按问号以查看变量列表。

实际上,您可以在Gerrit主题配置中使用regex模式跳过作业执行

例如,您可能不允许为主题包含WIP word的更改触发作业。 这可以使用以下正则表达式((?!WIP)。*$

下面是一个示例,它是如何在我们的管道中实现的

Gerrit触发器配置:


希望有帮助。

是否可以将发布作业分为上游作业和下游作业?上游不获取和签出,只是测试。如果稳定,则触发下游获取、签出和构建。这是一个有趣的想法,但我不确定我是否理解它。上游工作会触发什么?如果它还没有构建软件,它将运行什么测试呢?上游由gerrit触发器触发。我的意思是,这里的测试是检查是否应该忽略提交,以及是否应该绕过构建部分。在这种情况下,我仍然会为每个提交启动一个上游作业的构建,但不会为下游作业启动构建。不必获取commit(很好)会稍微节省一些时间,但我不知道是否需要触发第二个jenkins作业会超过这一点。无论如何,两份工作而不是一份工作的复杂性可能会使这种情况变得不可取。下游作业必须具有来自上游作业的所有信息,以便在触发补丁集上提交其“验证+1”。不确定Gerrit触发器插件是否支持此功能?您的意思是,使用Build Step->Execute shell?@Jolta yes作为自定义shell命令运行这些检查。获取和签出部分也可以通过shell命令完成。因此,您可以先进行测试,然后决定是否进行获取和构建。即使作业本身被触发,运行测试部分也只需要一点时间。我明白了。那么,在这种情况下,我想我更喜欢使用“ci跳过”插件,因为至少这样我就不必自己编写任何脚本了另一个问题是,如果使用脚本来确定是否应该生成,那么脚本应该如何控制生成是否继续?我不希望脚本“退出1”,这会导致构建失败。必须能够从“未发生”的生成中分离失败的生成。可能类似于
if[[“$test”=“bypass”];然后建立回波旁路;否则echo构建将启动#构建步骤或构建脚本运行;fi
。你可以写
#/bin/bash-el
在第一行<代码>退出1可能在生成步骤或生成脚本中。因此,测试部分不会失败,但构建步骤可能会失败。但当然,您必须确保测试部分中的命令不会返回任何导致作业失败的错误代码。