当前位置: 首页 > 科技观察

如何使用Gerrit管理您的Android代码?

时间:2023-03-19 14:32:33 科技观察

作者|胡奎,单位:中国移动智能家居运营中心实验室简介Android源码是一个基于Linux的开源操作系统。目前针对AndroidROM开发的代码管理工具基本上都是使用Git。由于Android代码非常复杂,谷歌将其分成了多个gitrepos,这样既避免了一个repo中代码过多,又可以根据repo的功能分配给不同的团队进行管控。为了控制Android代码的质量,Google在coderview上使用了Gerrit,在代码静态检测和自动验证上使用了Jenkins,当然还集成了CI工具。目前,中国移动智慧家庭运营中心AOS-RM项目已经部署了自己的Gerrit服务器,Gerrit在AOS-RM项目的代码质量管理中起到了非常重要的作用。作为AndroidROM相关的开发者,有必要了解什么是Gerrit,Gerrit的工作流程是什么,如何搭建Gerrit服务器,如何将Android代码库导入到自己的Gerrit服务器中。下面的文章将详细解答以上问题。Part01Gerrit简介Gerrit是Google为Android系统开发量身打造的一套免费开源代码审查系统,采用web界面。使用网络浏览器,同一团队的软件开发人员可以审查彼此修改后的代码,并决定是提交、回滚还是继续修改。它使用版本控制系统Git作为底层。目前Gerrit应用广泛并且与Android开发相关,尤其是做AndroidROM开发的公司基本都是使用Gerrit进行codereview。据统计,使用Gerrit的前3个领域分别是物联网、软件开发和大数据。数据来源:https://www.slintel.com/tech/source-code-management/gerrit-market-sharePart02Gerrit工作流开发者首先从gitrepo服务器下载代码,使用gitclone或者gitclone下载Androidcodebase代码第一次reposync;代码修改自检通过后,以gitpushoriginHEAD:refs/for/branch_name的形式提交给Gerrit进行代码审查,其中branch_name需要根据实际情况修改为对应的分支名称;Jenkins自动触发静态代码检查和编译,如果通过则verify+1,否则verify-1;Jenkins验证-1后,根据提示修改代码,进入第2步;Jenkinsverify+1后,请其他开发人员和MDE(模块所有者,具有+2权限)进行代码审查;其他开发人员和MDE进行代码审查,如果发现问题,他们会提出修改和-1,如果没有问题,+1和+2;如果codereview有-1,则根据意见进行澄清或修改,然后转到第2步;如果没有codereview-1,MDE点击提交按钮,代码入库,流程结束。Part03Gerrit服务器搭建3.1安装gitsudoapt-getinstallgit3.2安装jdk11sudoaptinstallopenjdk-11-jdk3.3安装gitwebsudoapt-getinstallgitweb3.4Gerrit安装包下载wgethttps://gerrit-releases.storage。googleapis.com/gerrit-3.5.1.wa3.5安装Gerrit(gerrit-3.5.0.1.war存放在~/gerrit目录下)cd~/gerritmkdirreview_sitejava-jargerrit-3.5.0.1.warinit-d./review_site/(可以选择默认,然后修改config文件)sudovim/home/gerrit/review_site/etc/gerrit.config发送邮件配置密码保存在secure.config中,发送密码email为授权码3.6安装Apachesudoapt-getinstallapache23.7配置Apachesudovim/etc/apache2/httpd.conf内容如下图sudovim/etc/apache2/ports.confaddListen8081(如果80端口没有占用,不需要修改)sudovi/etc/apache2/添加Includehttpd.conf3.8到apache2.conf启用代理模块sudoa2enmodproxysudoa2enmodproxy_httpsudoa2enmodproxy_balancerssudoa2enmodlbmethod_byrequests3.9添加账户htpasswd-b/xxx/passwordsaccountxxxx如果密码文件不存在,需要添加-c,第一次htpasswd-c-b/xxxx/passwordsaccountxxxx3.10启动apachesudosystemctl启动apache2sudosystemctlre启动apache23.11启动gerrit/xxxx/bin/gerrit.shstart/xxxx/bin/gerrit.shrestart3.12访问gerrithttp://IP地址:端口号/Part04Android代码库导入Gerrit4.1创建AOSP仓库使用浏览器创建Gerrit服务器上一个AOSP仓库,设置OnlyserverasparentforotherrepositoriestoTrue4.2下载AndroidCodebase(根据实际情况修改-u的参数)repoinit-uhttps://android.googlesource.com/platform/manifest--mirrorreposync4.3创建repo(修改IP为自己的服务器IP地址)4.3.1循环创建reporepoforall-c'echo$REPO_PROJECT;ssh-p29418account@IPgerritcreate-project--ownerAOSP_account$REPO_PROJECT;4.3.2设置repo的parentrepoforall-c'echo$REPO_PROJECT;ssh-p29418account@IPgerritset-project-parent--parentAOSP$REPO_PROJECT;4.3.3PushCodebase代码到Gerritserverrepoforall-c'echo$REPO_PROJECT;gitpushssh://account@IP:29418/$REPO_PROJECT+refs/heads/*+refs/tags/*Part05生成和定制manifest5.1clone一个平台/manifest仓库代码gitclone"ssh://account@IP:29418/platform/manifest"&&scp-p-P29418account@IP:hooks/commit-msg"manifest/.git/hooks/5.2复制仓库中的manifest并重命名。一定要设置review字段,否则reposync后的代码不会生成changeid。如果要添加自己独有的仓库,添加项目节点并配置名称、路径和Revision即可,最后将新的xml文件提交到gerrit服务器,审核完成后合并到远程仓库Part06即可下载并上传代码repoinit-ussh://account@IP:29418/platform/manifest.git-bbranch_name--repo-url=ssh://account@IP:29418/repo.git-mmymanifest。xmlreposync-j4Part07仓库权限配置详情可以参考:https://gerrit-documentation.storage.googleapis.com/在Documentation/3.5.0/access-control.htm配置中,需要根据实际情况。不同的组对不同的仓库有不同的访问权限。切记不要开启refs/*的push权限,否则开发者可以跳过Gerrit,直接push到git服务器。