如何手动将项目添加到gerrit代码审查工具?
我已经看到一些执行gerrit二进制文件的例子,但我的安装似乎没有其中一个.
我们在企业环境中使用LDAP身份验证的新gerrit 2.2.1服务器.我们还有一个作为本地UNIX jenkins用户运行的Jenkins服务器,我希望用gerrit检查并将构建结果发布到gerrit中.
我们没有"jenkins"LDAP帐户,即使我们这样做,系统组也没有为系统帐户提供密码,因此我无法进入Web界面,创建帐户并添加jenkins的publich ssh键.我怎么能添加一个"詹金斯"帐户来珍惜詹金斯可以使用?我们已经有很多人在Gerrit注册,所以我需要小心任何操作.
我有一个GIT存储库.当我将GIT更改推送到Gerrit时,它会触发jenkins构建,如果成功,它会将代码合并到GIT存储库.
但是,Jenkins总是从GIT repo构建源代码.它没有把改变推到Gerrit.
我应该在Gerrit/Jenkins中更改哪些设置?
我是gerrit的新手,我现在正试图将gerrit设置为一个git项目.我现在正在寻找帮助解决一个允许拒绝的问题,任何帮助都表示赞赏,在此先感谢.
我正在使用gerrit + http + mysql,我现在有以下问题:
当我检查我的数据库时,我找不到我的数据库中"system_config"的'login_type'和'login_http_head',这是http://gerrit.googlecode.com/svn-history/r243/documentation/2.0/config- sso.html
当我点击admin-> projects时,提示说"缺少项目所有项目"
当我从数据库中检查我的帐户时,有两个空用户(我认为这是因为我没有在UIweb页面中设置它们)
我无法从UIweb页面注册新帐户,我也无法使用命令行创建新用户.
以下是我的ssh-key和注册步骤:
我用过ssh-keygen -t rsa -b 2048 (从互联网上搜索,我不知道2048是什么意思)
我git config用来配置昵称和电子邮件,我是ssh-key通过UIweb页面注册的.
使用ssh -p 29418 admin@localhost gerrit create-project --name example.git
我得到一个提示:"权限被拒绝(publickkey)."
从网上搜索后,我用了 ssh -vv -p 29418 admin@localhost gerrit
我得到以下输出:
gerrit2@bst-esa3-bs:~$ ssh -vv -p 29418 admin@localhost gerrit --help
OpenSSH_5.5p1 Debian-4ubuntu6, OpenSSL 0.9.8o 01 Jun 2010
debug1: Reading configuration data /etc/ssh/ssh_config
debug1: Applying options for *
debug2: ssh_connect: needpriv 0
debug1: Connecting to localhost [::1] port …Run Code Online (Sandbox Code Playgroud) 我正在关注我们IT部门的一个例子,我想了解这个命令究竟在做什么:
git fetch origin +refs/changes/*:refs/remotes/origin/changes/*
Run Code Online (Sandbox Code Playgroud)
为了给出一些参考框架,这是持续集成(CI)工具的一部分,这是检查要测试的代码的步骤的一部分.通过向Gerrit推送CI来触发CI构建:
git push origin HEAD:refs/for/master
Run Code Online (Sandbox Code Playgroud)
我的第二个问题是,如果我想将更改推送到开发分支,我可以使用:
git push origin HEAD:refs/for/development
Run Code Online (Sandbox Code Playgroud) 我有一个运行Gerrit触发器插件的Jenkins服务器用于持续集成.对于运行单元测试和样式检查,它的工作非常出色!
但是,我也有兴趣使用Jenkins来构建我们的部署包.
理想情况下,开发人员会将标记推送到Gerrit,而gerrit-trigger插件会通知Jenkins构建标记,并适当地部署它们.
有没有办法通过jenkins和gerrit配置它,而不是使用Gerrit的git repos中的钩子发布到Jenkins的REST API,或使用浪费的滞后SCM轮询?
我怀疑可能有办法做到这一点,但我不太清楚从哪里开始.
我的git存储库由Gerrit服务器托管。当评论被推送到Gerrit时,我们还使用Jenkins以及Gerrit Event和Git Plugin来触发自动创建jenkins作业。
说git repo具有以下文件夹结构
ProjectA
- .git
- folderA
- folderA/folderA1
- folderA/manual_tests
- folderA/manual_tests/file1
- folderB
- folderB/folderB1
- folderB/manual_tests/file2
- folderC
- folderC/folderC1
- folderC/manual_tests/file3
- folderD
- folderD/folderD1
- folderD/folderD1/FolderD11
- folderD/folderD1/FolderD11/manual_tests/file4
- folderD/folderD1/FolderD12
- folderD/folderD2
Run Code Online (Sandbox Code Playgroud)
当前,通过Path使用pattern 指定Type,将Jenkins作业定义为在所有分支上运行**。此配置使作业在每次审阅时运行。
这是我要完成的工作:
manual_tests文件夹所做的更改,那么我不想让詹金斯·乔布斯被触发。manual_tests触发作业我尝试添加模式为的File Pathwith类型,但这没有实现我的最终目标。我尝试了各种正则表达式模式,但从未实现最终目标。RegExp(?!.*manual_tests.*).*
如果Gerrit评论仅包含manual_tests文件夹中的更改,是否可以不触发Jenkins作业?
当提交作者/变更所有者通过在“代码审查”或“已验证”部分添加+1来审查自己的变更时,如何将审查者添加到Gerrit变更集中?这是更改所有者创建多个补丁集的普遍做法,当准备好补丁集时,他会标记+1并手动添加其他审阅者,以便他们可以开始审阅。由于我们所有补丁程序都具有相同的审阅者集,因此如何配置gerrit以自动添加审阅者?
我目前正尝试使用Jenkins Gerrit-Trigger发出"+1 Verified",但有些原因是+1失败了.
由于插件能够成功地向相关的Gerrit变更集发出"-1 Verified"和"Build Started"注释,因此权限似乎是有序的.
当工作成功时,"+1已验证"永远不会实现.检查Jenkins日志显示与作业相关的最后一个条目显示403响应错误:
Jenkins日志也显示相同的请求:
com.sonymobile.tools.gerrit.gerritevents.workers.rest.AbstractRestCommandJob run
SEVERE: Gerrit response: Forbidden
Run Code Online (Sandbox Code Playgroud)
格里特也接受了请求和403响应:
"POST /a/changes/tdmdev~develop~Id917dda3449bf9af738ad7f122adaecba70004bd/revisions/7eab7e90c6b7e66f23faaac7cbfd40d8c9c93726/review HTTP/1.1" 403 46 - "Apache-HttpClient/4.5.2 (Java/1.8.0_77)"
Run Code Online (Sandbox Code Playgroud)
我已经过测试,看看是否有任何关于API的问题,并且使用Gerrit日志中的URL成功报告了"+1 Verify":
curl -v -X POST -d '{"reviewer":"srv_devops_jenkins","labels":{"Verified":"+1"}}' -H "Content-Type: application/json" --user "srv_devops_jenkins:***" --digest http://foobar.com:8080/a/changes/tdmdev~develop~Id917dda3449bf9af738ad7f122adaecba70004bd/revisions/7eab7e90c6b7e66f23faaac7cbfd40d8c9c93726/review
Run Code Online (Sandbox Code Playgroud)
Gerrit Trigger配置为支持RESTClient请求,我已确保以下内容:
我成功的唯一方法是禁用"REST API"并通过SSH连接发出请求,唯一的缺点是我们需要在自定义标签上发出+ 1,据我所知,这些标签不受支持通过Gerrit-Trigger通过SSH.
Versions:
Jenkins: 2.48
Gerrit-Trigger: 2.23.0
Gerrit: 2.12
Run Code Online (Sandbox Code Playgroud)
感谢您的任何帮助,您可以提供.
当我们尝试推送补丁时,我们收到以下错误:
错误:未能将某些引用推送到'ssh://git_bare_repo@10.20.88.250/home/ferrari_users/git_bare_repo/android_m/hlos/platform/frameworks/base'
提示:更新被拒绝,因为推送的分支提示在其后面
远程提示:对应.看看这个分支并整合
远程更改提示:(例如'git pull ...')再次推送之前.暗示:
有关详细信息,请参阅"git push --help"中的"关于快进的注意事项".
当我调试时,我发现了一个gerrit提交的引用,它实际上是通过gerrit放弃但没有在Git中得到反映.
我们仍然可以在platform/frameworks/base.git/info/refs中看到一个引用
eec90465656f3426cd5a45e5333cec90f07982c1 refs/changes/68/1968/1
所以第一个问题是,如果我们放弃任何补丁,该条目仍然存在于refs文件夹中,是否有任何文件列出了被废弃的补丁?
我认为这就是为什么特定项目无法同步并且我们无法推动新变化的原因.
Git pull和git checkout,指向已通过Gerrit成功合并的最后一个提交补丁.
我尝试使用git push -f origin强制推送HEAD:refs/for/8939_ferrari_main它显示补丁推送成功并且可以在frameworks/base.git/info/refs中看到它的条目
cdd319b12cc422541b101e25470317ca28ddf6bc
refs/for/8939_ferrari_main
但它没有被列入gerrit.有没有办法从git裸仓库中删除这个补丁,因为它没有在Gerrit中列出.
如果可以共享任何指针来解决问题,我们将不胜感激.
编辑
有没有办法将git bare repo重置为任何特定的标签?