问题标签 [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.
jenkins - 如果有任何编译错误,Jenkins gerrit 触发器不会报告经过验证的投票
当我进行一些代码更改并将代码推送到 Gerrit 时。Jenkins 构建被触发,我们通常会得到验证投票 +1 或 -1,具体取决于 Gerrit UI 上针对该更改的结果。
目前,我们观察到对于任何编译错误,它都不会向 Gerrit 报告。这只发生在编译错误,而不是失败的测试、失败的 git checkouts 或其他导致构建失败的原因。
下面我提到了版本细节。任何建议将不胜感激。
格里特版本:2.14.2
詹金斯版本:1.642.3
Gerrit 触发器插件:2.18.3
项目:Java项目
构建工具:Maven
问候
谢里夫。
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 所以不是失败的原因)
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,它应该更新自己的工作区。
任何想法出了什么问题?
jenkins - Jenkins - 如何在 Gerrit 补丁集上显示下游作业构建结果?
下面是我的用例,
我有工作 A、B、C - A 是上游,B 和 C 是下游工作。在 Gerrit 中创建 Patch set 时,基于patchset created event
I 触发器Job A
并根据此作业的结果,我们触发 B 和 C。B 和 C 执行后,我想在 Gerrit 补丁集上显示所有三个作业的结果. 喜欢
现在我只看到JOB A
在 GERRIT PATCH SET 上显示的构建结果为
有什么办法吗?
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 onfeature/upgrade
)- 最后,将所有更改从
feature/upgrade
to推送到master
(需要强制推送master
),现在在 master 上配置 CI 作业以开始使用类似于新创建的临时作业中的配置
这个想法的缺陷是强制推动。我们确保分支机构被锁定以防止此类推送,因为它使分支机构容易出错,并且组织中只有少数人可以进行此类提交。可能是我不知道我可以在这里利用的一些 gerrit 功能,或者我的想法完全错误。我需要知道处理这种情况的最佳方法是什么。
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 中的任何分支?
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 服务器端挂钩?
jenkins - 在 jenkins 中安装 gerrit 触发器时发生错误 java.nio.file.FileSystemException
我完全坚持安装 Gerrit Trigger。Jenkins 插件管理器中的 Gerrit 触发器插件版本为 2.27.2。请参考以下错误信息
Jenkins服务需要java.exe进程,所以无法结束。
你有解决这个问题的想法吗?