问题标签 [gerrit-trigger]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
1039 浏览

jenkins - 如果有任何编译错误,Jenkins gerrit 触发器不会报告经过验证的投票

当我进行一些代码更改并将代码推送到 Gerrit 时。Jenkins 构建被触发,我们通常会得到验证投票 +1 或 -1,具体取决于 Gerrit UI 上针对该更改的结果。

目前,我们观察到对于任何编译错误,它都不会向 Gerrit 报告。这只发生在编译错误,而不是失败的测试、失败的 git checkouts 或其他导致构建失败的原因。

下面我提到了版本细节。任何建议将不胜感激。

格里特版本:2.14.2

詹金斯版本:1.642.3

Gerrit 触发器插件:2.18.3

项目:Java项目

构建工具:Maven

问候

谢里夫。

0 投票
0 回答
696 浏览

jenkins - 启用rest api时gerrit触发器不通知gerrit

当使用禁用 REST-API 的 gerrit-trigger 插件时,一切都按预期工作

在启用 REST-API 之后,似乎 gerrit-trigger 甚至没有像以前那样尝试设置验证标签

  • 在 gerrit-trigger-config 中测试其余连接时,它成功了,我在 gerrits httpd_log 中看到了请求
  • 在完成应向 gerrit 报告已验证状态的作业后,jenkins 在 gerrits httpd_log 中没有请求
  • 在禁用休息 api 的情况下,我在 jenkins 日志中看到类似“INFO:Notifying BuildCompleted to gerrit: ...”
  • 使用 rest api 在 jenkins 日志中没有启用任何关于通知 gerrit 的信息
  • gerrit 2.14.4 - jenkins 2.73.3 - gerrit 触发器 2.26.2

因此,当启用 REST-API 时,它对我来说变得无法使用,因为经过验证的标签不会被报告回 gerrit。

谁能帮我解决这个问题?我需要启用 REST 才能使其他一些插件正常工作(禁用 atm 所以不是失败的原因)

0 投票
1 回答
1081 浏览

maven - Jenkins 中的 Maven 构建失败,出现未知的 lfiecycle 阶段错误

我们正在使用 gerrit 触发器在 Jenkins 中构建基于 maven 的项目。

我的构建目标是“clean install -e”,然后是属性选项卡中的 Dmaven.test.skip=true。

在 jenkins 作业的 maven 构建部分中指定的命令

我的构建部分的快照

在此处输入图像描述

奇怪的是,由于未知生命周期阶段“for”错误的还原提交,构建已经开始失败。但是构建配置中没有提到“for”构建阶段。它在此还原提交之前通过。

控制台输出

我在这里完全一无所知:(。

最好的问候, 索拉夫

0 投票
1 回答
186 浏览

git - 詹金斯获取正确的分支但没有继续构建

在我的设置中,我想将本地 git 存储库与作为代码审查工具的 gerrit 和用于自动审查目的的 Jenkins 结合起来。Git 和 Gerrit 工作正常,但 Jenkins 遇到了一些麻烦。

到目前为止的工作:我做了一个提交,在 Gerrit 中出现以供审查。Jenkins 被触发以使用新更改构建受影响的项目。

此时出现问题,Jenkins 构建失败。

控制台输出的屏幕截图

Jenkins 项目的设置:

  • SCM:git - 存储库 url 正确,refspec 设置为 $GERRIT_REFSPEC,分支说明符设置为 $GERRIT_BRANCH,构建策略 Gerrit Trigger。
  • 构建触发器:gerrit 事件 - 服务器设置正确
  • 构建:三个 Maven 目标(测试、全新安装、javadoc)

目标是 Jenkins 检查当前提交(带有新更改),查看它,如果更改合并到 master,它应该更新自己的工作区。

任何想法出了什么问题?

0 投票
2 回答
1936 浏览

jenkins - Jenkins - 如何在 Gerrit 补丁集上显示下游作业构建结果?

下面是我的用例,

我有工作 A、B、C - A 是上游,B 和 C 是下游工作。在 Gerrit 中创建 Patch set 时,基于patchset created eventI 触发器Job A并根据此作业的结果,我们触发 B 和 C。B 和 C 执行后,我想在 Gerrit 补丁集上显示所有三个作业的结果. 喜欢

现在我只看到JOB A在 GERRIT PATCH SET 上显示的构建结果为

有什么办法吗?

0 投票
1 回答
196 浏览

git - 使用 gerrit 长变基

我们的项目是多模块 Maven 项目。该项目依赖于另一个多模块 maven 项目。poms 的关系(聚合和继承)就像

项目中的所有parent内容都由一个单独的团队管理,我们称之为framework. 项目中的所有child内容都由我们的团队管理,我们称之为product.

现在framework已升级为spring-boot与许多其他重大更改一起使用。我们需要开始开发以升级product以使用framework最新的技术。这个升级过程大约需要一个月的时间(有很多无法编译的提交),因为需要注意很多更改才能使应用程序正常工作。同时,product也将在旧的 Maven 环境中自行开发功能。处理这种情况的最佳方法是什么?

我们使用 Gerrit 代码审查。更改首先推送到 gerrit,有自动 jenkins 作业触发器来运行基本测试。只有在构建通过时才能提交更改。还有一些构建可以通过 gerrit 注释基于一些触发器来要求,例如运行耗时的 web 测试、集成测试等。

我的想法

通过在以下上下文中强制推送,我的意思是它必须绕过 gerrit 即直接推送到分支,而不是重新创建 git 历史记录的实际强制推送

  • 为升级创建一个功能分支product,比如说feature/upgrade
  • 确保为此分支设置了临时 CI 作业 wrt 新环境,包括按需作业
  • 将升级所需的更改推送到此分支,直到应用程序可以正常运行
  • master不时重新启动分支以避免在升级结束时发生批量冲突(需要 force-push on feature/upgrade
  • 最后,将所有更改从feature/upgradeto推送到master(需要强制推送master),现在在 master 上配置 CI 作业以开始使用类似于新创建的临时作业中的配置

这个想法的缺陷是强制推动。我们确保分支机构被锁定以防止此类推送,因为它使分支机构容易出错,并且组织中只有少数人可以进行此类提交。可能是我不知道我可以在这里利用的一些 gerrit 功能,或者我的想法完全错误。我需要知道处理这种情况的最佳方法是什么。

0 投票
0 回答
92 浏览

git - 在 Hook 中,针对创建它的 SHA 为推送分支中的第一个提交拉一个差异

我表面上处理的问题似乎很简单,但在幕后,事情变得很快。我还处于稻草人阶段,所以没有任何功能代码可以分享。

期望的行为:
我们使用提交注释中包含的错误 ID 将提交的差异附加到我们的错误跟踪应用程序。附件使用从 Git 中的 post-recieve 挂钩调用的脚本发生,并在 Gerrit 中合并更改。

问题:
当一个新分支最初被推送时,第一次提交的 $oldrev 值为 00000000000000000。这发生在每个新分支上,在 Gerrit 中,它发生在你推送到 HEAD:refs/for/$branch 的每个分支上。这导致新分支的第一次提交没有附加差异,或者在 Gerrit 的情况下,每次代码审查中的每个第一次提交都没有附加差异。

我目前提出的解决方案既复杂又丑陋。我希望有人可能知道一种更优雅的方法来确定给定分支的原始 SHA:

Step1:确定当前分支的父分支。

我毫不掩饰地从这个 GitHub 要点中窃取了用于检索父分支的命令:https ://gist.github.com/joechrysler/6073741

我的 $ 分支 = git rev-parse --abbrev-ref HEAD; 我的 $ 父母 = git show-branch -a 2>/dev/null | grep '\*' | grep -v "$branch" | head -n1 | sed 's/.*\[\(.*\)\].*/\1/' | sed 's/[\^~].*//';

这两个 shell 命令很好地拉入了父分支,如果分支是无父分支的,则不给我任何输出,这样就可以轻松地通过脚本检查父子关系。问题是,当分支是使用从不再存在的分支生成的标记创建的分支时,该过程分崩离析,该分支使用没有其他分支引用的 SHA。在 Git 术语中,这意味着新分支是无父的,所以逻辑上一切都很好,但在实践中,我仍然想区分从 SHA 中提取分支的更改。

Step2:(假设有父分支)

运行 Git cherry 以仅提取与我的分支关联的提交,不包括来自父级的提交:

我的 $parent = git cherry -v $parent $refs;

提交顺序与正常的 git log 输出相反,因此最旧的 SHA 位于列表顶部,允许我从数组中提取包含字母和数字的第一个值。使用简单的 git log 命令提取第一个提交的 SHA 并确定它的父级:

我的@oldrevs= git log -n 2 --pretty=format:%H $first_sha;

最后步骤:使用 for 循环删除 @oldrev 数组中不包含字母或数字的所有条目并设置

$oldrev = $oldrevs[-1];

因为 git log 输出最后显示最旧的提交。在 99% 的情况下,这消除了用于差异附件的空 SHA 值,但要跳过很多圈。任何人都可以建议一种更简洁的方法,该方法还可以为从引用提交的标签生成的分支提取原始 SHA,而该标签不再引用 repo 中的任何分支?

0 投票
3 回答
6387 浏览

git - 如何在 Gerrit 2.16 中配置服务器端挂钩

我已经开始使用 Gerrit 2.16 作为代码审查工具,并且想要配置服务器端挂钩以在将更改提交/推送到 gerrit 时验证 git 提交消息。

尝试通过将脚本复制到 $GIT_DIR/hooks(ref-update、patchset-created、change-merged 等脚本)来使用钩子,在 gerrit 服务器上授予权限,但没有任何效果。

可以通过在 gerrit UI 中使用命令在本地存储库上启用 commit-msg 钩子

例如: git clone ssh://@:29418/Project1 && scp -p -P 29418 @:hooks/commit-msg /.git/hooks/

如果启用此挂钩,将自动生成 change_ID。

执行上述命令时,此脚本 commit-msg 会下载到本地存储库。
我的问题; 我们可以在 gerrit 服务器上找到此脚本的路径,以便我可以修改和强制执行 git 提交消息验证吗?

或者有没有其他方法可以启用 gerrit 服务器端挂钩?

0 投票
2 回答
852 浏览

jenkins - 根据发布到补丁集的评论,gerrit-trigger 没有触发詹金斯的工作

Jenkins 版本:2.73.1 Gerrit-Trigger 插件版本:2.27.1 Gerrit 版本:2.14.2

我的情况是:

新补丁集触发作业 1,作业 1 向该补丁集发布消息(首先构建),然后作业 2 应由该评论触发,但作业 2 因某种原因未触发。下面是job 1和job 2的配置

Gerrit 事件中的作业 1 配置:

在此处输入图像描述

Gerrit 触发器中的作业 2 配置 >> 触发 在此处输入图像描述

作业 1 成功执行后,这应该向补丁集发送一条自定义消息(首先构建),并且作业 2 应该根据该消息触发。

在这种情况下,作业 2 不会触发。不知道这里出了什么问题。

0 投票
1 回答
709 浏览

jenkins - 在 jenkins 中安装 gerrit 触发器时发生错误 java.nio.file.FileSystemException

我完全坚持安装 Gerrit Trigger。Jenkins 插件管理器中的 Gerrit 触发器插件版本为 2.27.2。请参考以下错误信息

在此处输入图像描述

在此处输入图像描述

Jenkins服务需要java.exe进程,所以无法结束。

你有解决这个问题的想法吗?