CI持续集成系统环境---部署gerrit环境完整记录

羽林君 2022-09-24 09:33

最近在看CI/CD集成的相关部分,发现几篇好文,转载分享一波。

来源网络:https://www.cnblogs.com/kevingrace/p/5624122.html


开发同事提议在线上部署一套gerrit代码审核环境,废话不多说,部署gerrit的操作记录如下:
提前安装好java环境,mysql环境,nginx环境
测试系统:centos6.5
下载下面三个包,放到/root目录下(下载地址:百度网盘 请输入提取码 (提取密码gqj5))
mysql-connector-java-5.1.21.jar
bcpkix-jdk15on-1.52.jar
gerrit-2.11.3.war

--------------------------------------------gerrit历史版本下载地址-----------------------------------------------

http://gerrit-releases.storage.googleapis.com/index.html

 

---------------------------------------------------------------------------------------------------------------

1)创建gerrit数据库,并自定义编码为utf8
mysql>create database gerritdb CHARACTER SET utf8 COLLATE utf8_general_ci;
mysql>grant all on gerritdb.* to 'gerrituser'@'localhost' identified by 'gerritpass';
2)添加账号
[root@115 ~]#useradd gerrit
[root@115 ~]#su - gerrit
[gerrit@115 ~]$
在root账号下操作
[root@115 ~]# cp /root/gerrit-2.11.3.war /home/gerrit
下面一步很重要,就是说提前把下面的两个软件放到相应的位置,以防在gerrit安装过程中再去执行下载操作(因为安装过程中再去下载,由于网速问题会failed!)

[root@115 ~]#mkdir -p /home/gerrit/gerrit_site/lib[root@115 ~]#cp /root/mysql-connector-java-5.1.21.jar /home/gerrit/gerrit_site/lib/[root@115 ~]#cp /root/bcpkix-jdk15on-1.52.jar /home/gerrit/gerrit_site/lib/[root@115 ~]#chown -R gerrit.gerrit /home/gerrit

接着在gerrit账号下进行安装
除了选用mysql数据库,Verified,http认证代理,其他的都是默认!

[gerrit@115 ~]$ java -jar gerrit-2.11.3.war init -d ~/gerrit_site
Using secure store: com.google.gerrit.server.securestore.DefaultSecureStore

*** Gerrit Code Review 2.11.3
***

*** Git Repositories
***

Location of Git repositories [git]:

*** SQL Database
***

Database server type [h2]: mysql

Gerrit Code Review is not shipped with MySQL Connector/J 5.1.21
** This library is required for your configuration. **
Download and install it now [Y/n]?
Renaming mysql-connector-java-5.1.10.jar to .mysql-connector-java-5.1.10.jar.backupDownloading http://repo2.maven.org/maven2/mysql/mysql-connector-java/5.1.21/mysql-connector-java-5.1.21.jar ... OK
Checksum mysql-connector-java-5.1.21.jar OK
Server hostname [localhost]:
Server port [(mysql default)]:
Database name [reviewdb]: gerritdb
Database username [gerrit]: gerrituser
gerrituser's password :
confirm password :

*** Index
***

Type [LUCENE/?]:

The index must be rebuilt before starting Gerrit:
java -jar gerrit.war reindex -d site_path

*** User Authentication
***

Authentication method [OPENID/?]: http
Get username from custom HTTP header [y/N]?
SSO logout URL :

*** Review Labels
***

Install Verified label [y/N]? y

*** Email Delivery
***

SMTP server hostname [localhost]:
SMTP server port [(default)]:
SMTP encryption [NONE/?]:
SMTP username :

*** Container Process
***

Run as [gerrit]:
Java runtime [/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.91-1.b14.el6.x86_64/jre]:
Copy gerrit-2.11.3.war to /home/gerrit/gerrit_site/bin/gerrit.war [Y/n]?
Copying gerrit-2.11.3.war to /home/gerrit/gerrit_site/bin/gerrit.war

*** SSH Daemon
***

Listen on address [*]:
Listen on port [29418]:

Gerrit Code Review is not shipped with Bouncy Castle Crypto SSL v151
If available, Gerrit can take advantage of features
in the library, but will also function without it.
Download and install it now [Y/n]?
Renaming bcpkix-jdk15on-1.52.jar to .bcpkix-jdk15on-1.52.jar.backupDownloading http://www.bouncycastle.org/download/bcpkix-jdk15on-151.jar ... !! FAIL !!


error: http://www.bouncycastle.org/download/bcpkix-jdk15on-151.jar: 302 Found
Please download:

http://www.bouncycastle.org/download/bcpkix-jdk15on-151.jar

and save as:

/home/gerrit/gerrit_site/lib/bcpkix-jdk15on-151.jar

Press enter to continue
Continue without this library [Y/n]?
Generating SSH host key ... rsa(simple)... done

*** HTTP Daemon
***

Behind reverse proxy [y/N]?
Use SSL (https://) [y/N]?
Listen on address [*]:
Listen on port [8080]:
Canonical URL [http://Zabbix-server:8080/]:

*** Plugins
***

Installing plugins.
Install plugin download-commands version v2.11.3 [y/N]?
Install plugin reviewnotes version v2.11.3 [y/N]?
Install plugin singleusergroup version v2.11.3 [y/N]?
Install plugin replication version v2.11.3 [y/N]?
Install plugin commit-message-length-validator version v2.11.3 [y/N]?
Initializing plugins.
No plugins found with init steps.    

Initialized /home/gerrit/gerrit_site

注意:
一键安装后,默认没有安装上任何插件的,如果用到插件,需要事后手动安装。
手动安装插件(比如replication同步插件)的方法请见于:[原创]CI持续集成系统环境--Gitlab+Gerrit+Jenkins完整对接(文章结尾有介绍)

************************************************************************* 

第一次手动启动gerrit服务,可能会有下面连个报错

1)

[gerrit@115 ~]$/home/gerrit/gerrit_site/bin/gerrit.sh start

** ERROR: GERRIT_SITE not set

解决办法:

在/home/gerrit/gerrit_site/bin/gerrit.sh启动文件里添加下面一行,即指定gerrit2的路径

GERRIT_SITE=/home/gerrit/gerrit_site

2)

[gerrit@115 ~]$ /home/gerrit/gerrit_site/bin/gerrit.sh start
Starting Gerrit Code Review: FAILED

查看日志,报错如下:

[gerrit@115 ~]$ tail -f /home/gerrit/gerrit_site/logs/error_log[2016-07-14 10:52:07,317] INFO com.google.gerrit.server.cache.h2.H2CacheFactory : Enabling disk cache /home/gerrit/gerrit_site/cache[2016-07-14 10:52:08,110] INFO com.google.gerrit.server.config.ScheduleConfig : gc schedule parameter "gc.interval" is not configured[2016-07-14 10:52:08,859] INFO org.eclipse.jetty.util.log : Logging initialized @4743ms[2016-07-14 10:52:09,278] INFO com.google.gerrit.server.git.LocalDiskRepositoryManager : Defaulting core.streamFileThreshold to 2047m[2016-07-14 10:52:09,320] INFO com.google.gerrit.server.plugins.PluginLoader : Loading plugins from /home/gerrit/gerrit_site/plugins[2016-07-14 10:52:09,322] ERROR com.google.gerrit.pgm.Daemon : Unable to start daemoncom.google.inject.ProvisionException: Unable to provision, see the following errors:1) No index versions ready; run Reindex1 errorat com.google.gerrit.lucene.LuceneVersionManager.start(LuceneVersionManager.java:119)at com.google.gerrit.lifecycle.LifecycleManager.start(LifecycleManager.java:74)at com.google.gerrit.pgm.Daemon.start(Daemon.java:293)at com.google.gerrit.pgm.Daemon.run(Daemon.java:205)at com.google.gerrit.pgm.util.AbstractProgram.main(AbstractProgram.java:64)at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)at java.lang.reflect.Method.invoke(Method.java:498)at com.google.gerrit.launcher.GerritLauncher.invokeProgram(GerritLauncher.java:166)at com.google.gerrit.launcher.GerritLauncher.mainImpl(GerritLauncher.java:93)at com.google.gerrit.launcher.GerritLauncher.main(GerritLauncher.java:50)at Main.main(Main.java:25)

解决办法:运行reindex

[gerrit@115 ~]$ java -jar gerrit-2.11.3.war reindex -d /home/gerrit/gerrit_site[2016-07-14 10:03:43,957] [main] WARN com.google.gerrit.pgm.util.ThreadLimiter : Limiting program to 8 threads due to database.poolLimit[2016-07-14 10:03:44,031] [main] INFO com.google.gerrit.server.git.LocalDiskRepositoryManager : Defaulting core.streamFileThreshold to 2047m[2016-07-14 10:03:44,492] [main] INFO com.google.gerrit.server.cache.h2.H2CacheFactory : Enabling disk cache /home/gerrit/gerrit_site/cacheReindexing changes: doneReindexed 0 changes in 0.0s (0.0/s)

再次启动gerrit就成功了

[gerrit@115 ~]$ /home/gerrit/gerrit_site/bin/gerrit.sh startStarting Gerrit Code Review: OK

**************************************************************************

修改/home/gerrit/gerrit_site/etc/gerrit.config配置文件

注意下面两个配置项,修改后如下:

[gerrit]
basePath = git
canonicalWebUrl = http://103.10.86.30/                  //nginx的代理端口 

.........

[httpd]
listenUrl = http://*:8080/

下面是nginx的认证代理配置记录

[root@115 vhosts]# pwd

/usr/local/nginx/conf/vhosts

[root@115 vhosts]# cat gerrit.conf

server {

listen 80;

server_name localhost;

#charset koi8-r;

    #access_log  /var/log/nginx/log/host.access.log  main;

location / {

          auth_basic              "Gerrit Code Review";

          auth_basic_user_file    /home/gerrit/gerrit_site/etc/passwords;            //AuthUserFile路径

          proxy_pass       http://103.10.86.30:8080;          //注意后面不能加"/",否则会出现“Code Review - Error The page you requested was not found....permission to view this page”的报错

          proxy_set_header        X-Forwarded-For $remote_addr;

          proxy_set_header        Host $host;

    }

}

但是nginx进程用户(这里是www)无权访问此路径,需要对/home/gerrit进行赋权: 
[gerrit@115 ~]# setfacl -m g:www:rx /home/gerrit
这一步很重要!否则,访问gerrit的时候会报500的错!

[或者 setfacl -R -m u:www:rx /home/gerrit  上面是针对所属组进行授权,这里可以针对用户授权] 

创建认证权限(也就是登陆的时候输入的权限)

注意:第一次加-c参数是为了创建密码文件,默认第一个用户是系统管理员

[root@115 vhosts]#htpasswd -c /home/gerrit/gerrit_site/etc/passwords  gerrit

New password:

Re-type new password:

Adding password for user gerrit

[root@115 vhosts]#htpasswd /home/gerrit/gerrit_site/etc/passwords wangshibo

New password:

Re-type new password:

Adding password for user wangshibo

[root@115 vhosts]#htpasswd /home/gerrit/gerrit_site/etc/passwords jenkins

New password:

Re-type new password:

Adding password for user jenkins

查看下认证账号文件信息

[root@115 vhosts]# cat /home/gerrit/gerrit_site/etc/passwords

重启nginx服务

[root@115 vhosts]# /usr/local/nginx/sbin/nginx -s reload

访问http://ip,输入上面创建的用户信息即可登陆gerrit

 *************** *************** *************** *************** ***************

下面是设置邮箱的操作!!!

在gerrit一键安装的时候,邮箱环节采用的是默认安装。

安装后登陆gerrit,默认情况下邮箱是空的。


这个时候,可以手动设置。

注册邮箱并激活,具体设置如下:


切换到gerrit账号下

[gerrit@115etc]$ pwd

/home/gerrit/gerrit_site/etc

[gerrit@115 etc]$ cat gerrit.config

............

[sendemail]

        smtpServer = smtp.xqshijie.cn                  【此处设置的是发件邮箱信息】

        smtpUser = ops@xqshijie.cn

        from = ops@xqshijie.cn

        smtpPass = iJWxSmXcOz9hs4xH                     


[gerrit@115 etc]$ cat secure.config

[auth]

  registerEmailPrivateKey = 65RWiWt5/ZxKN0ISPv8U8dee9vL2+cLidPk=

  restTokenPrivateKey = O9k9OAlvWxdtOspz4Mjff85ZoUlZJfxvxDU=

[sendemail]

  smtpPass = iJWxSmXcOz9hs4xH


注意:

sendmail的密码会另保存到secure.config文件里,一定要保证gerrit.config文件里的密码和secure.config里的密码一致!

然后重启gerrit服务即可!

[gerrit@115 etc]$ /home/gerrit/gerrit_site/bin/gerrit.sh restart

Stopping Gerrit Code Review: OK

Starting Gerrit Code Review: OK


-------------------上面采用的是阿里企业邮箱,也可以采用其他邮箱账号进行发件,比如163邮箱等------------------------

[sendemail]

smtpServer = smtp.163.com

smtpUser = wang_shibo1987@163.com

from = wang_shibo1987@163.com

smtpPass = x1nN13ZcJcNKenl1

-------------------------------------------------------------------------------------------------------------------------------

然后登陆gerrit界面进行邮箱注册

默认情况下不注册邮箱,在设置栏里是没有邮箱可以选择的

 

邮件发送成功!!!!

登陆邮箱,如截图中的激活链接如下,点击激活

http://103.10.86.30:80/#/VE/Mc3qASBMgi9tkXJZZ99YyF9OOnqXnk8qZhz5Cg==$MzpqZW5raW5zQHhxc2hpamllLmNu

 

 激活之后,在设置栏里就有邮箱可选择了

------------------------------------------------------------------------------------------------------------------------

注意:

用htpasswd创建第一个用户时默认是系统管理员,ID为1000000,默认只有这个系统管理员才有Create权限(创建group和Project),

其他的都只有“List”查看权限

用htpasswd创建的用户时,并没有往gerrit中添加账号,只有当该用户通过web登陆gerrit服务器时,该账号才会被添加进gerrit数据库中。

退出admin账号重新登陆(HTTP认证模式不支持Sign Out,需要先Sign Out退出账号,关闭浏览器后再登陆才能出现http验证密码的对话框

---------------------------------------------git中文编码问题------------------------------------------------------------

为妥善解决中文编码的问题,对所有git repository做如下约定:
  a、所有文本文件都必须存储成utf8编码
  b、对git做如下设置:
    git config --global core.quotepath false
    git config --global i18n.logoutputencoding utf8
    git config --global i18n.commitencoding utf8
安装gerrit的时候对于数据库(选择myqsl方式的话)的编码设定为utf8

--------------------------------------------gerrit对接gitweb-----------------------------------------------------

上面搭建好的gerrit,登陆进去在Projects项目里的右边没有gitweb的超链接

1.需要先搭建gitweb,然后进行相关配置

[root@115 ~]# yum install -y gitweb     【或者直接yum install -y git*】

gitweb安装后的目录路径是/var/www/git

2. 通过git config配置一下

[root@115 ~]#git config --file /home/gerrit/gerrit_site/etc/gerrit.config gitweb.cgi /var/www/git/gitweb.cgi 

[root@115 ~]#git config --file /home/gerrit/gerrit_site/etc/gerrit.config --unset gitweb.url

3.重启gerrit,然后登陆gerrit后,gitweb超链接效果就有了

********************** ********************** ******************** 

gitweb还是蛮实用的。

可以通过打开gerrit上某个工程的gitweb,查看到这个工程代码近期的所有动向!

【默认情况下:只有gerrit的管理员权限才能查看gitweb】

【普通用户要想访问gitweb,需要后续添加访问权限,具体参照[原创]CI持续集成系统环境--Gitlab+Gerrit+Jenkins完整对接 - 散尽浮华 - 博客园文章底部的介绍】

如下:

--------------------------------------------------ssh公钥设置-------------------------------------------

在gerrit本机上使用下面的命令生成管理员账号(这里将gerrit作为管理员)的公私钥

[gerrit@115]$ ssh-keygen -t rsa -C gerrit@xqshijie.cn

[gerrit@115]$ cd ~/.ssh/                            【~是切换到当前用户家目录下】

[gerrit@115]$ ls  

id_rsa  id_rsa.pub

[gerrit@115]$ cat id_rsa.pub
ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEAqvdgToL4veIqVe4D2iOwpzggdnGU8eGfRpwZH5hsCPdrIfjMgAMYz4TCKzmD9yv8VXrG/hCOX1zgL63ZLJ1NUTTG4zJ48UefRA0i3YqDez0RH5fhI/T69KalBNfPaRcaCqcdTfJcSW5FxZ4CMsHj7uyKrGry6sA3VkYhy08WA4CVcXHPI4R+va+Ga0KvTVKxBqpEiR+1r8+hECTyWo1XngqRVQpfJismQwUXe2J9U41T+DaQfJDaB+hdYPm2Xoeu7LlsyPFrUn/Jq3vy4YeU1XVD4BIMGXxg87MUdmZh0CzbeUSc1TgKYccUccTgnVDfgwgvwY/gJYbb7csCrlW5+w== gerrit@xqshijie.cn

然后将gerrit账号的公钥id_rsa.pub内容拷贝到gerrit界面的 SSH Public Key里面

接下来可以设置别名,方便使用ssh连接gerrit

可以直接在gerrit用户家目录(/home/gerrit)下的.bashrc文件里设置

如下别名是登陆gerrit的admin账号下的操作:

alias ssh-gerrit='ssh -p 29418 -i ~/.ssh/id_rsa 103.10.86.30 -l gerrit'        【公钥已拷贝到gerrit里,这里用私钥去连】

然后source /home/gerrit/.bashrc使其生效

如下:

[gerrit@115]$vim /home/gerrit/.bashrc
[gerrit@115]$source /home/gerrit/.bashrc
[gerrit@115]$cat /home/gerrit/.bashrc
# .bashrc

# Source global definitions
if [ -f /etc/bashrc ]; then
. /etc/bashrc
fi
alias ssh-gerrit='ssh -p 29418 -i ~/.ssh/id_rsa 103.10.86.30 -l gerrit'
# User specific aliases and functions
[gerrit@115]$ssh-gerrit

**** Welcome to Gerrit Code Review ****

Hi gerrit管理员, you have successfully connected over SSH.

Unfortunately, interactive shells are disabled.
To clone a hosted Git repository, use:

git clone ssh://gerrit@Zabbix-server:29418/REPOSITORY_NAME.git

Connection to 103.10.86.30 closed.

---------------------------------------------------------扩展----------------------------------------------------------

下面是在安装过程中,选用默认的H2数据库情况下的操作事项:

默认情况下,gerrit登陆后,setting处的账户邮箱是空的

除了上面使用邮箱注册并激活的方法

还可以直接在数据库中手动插入邮箱

如下:

 

查看数据库,发现默认是没有邮箱信息的

[gerrit@115]$ ssh-gerrit gerrit --help           【ssh-gerrit是上面设置过的别名】

[gerrit@115]$ ssh-gerrit gerrit gsql           【注意:只有管理员才有权限操作数据库!!!!】

gerrit> select * from ACCOUNT_EXTERNAL_IDS;

 ACCOUNT_ID | EMAIL_ADDRESS | PASSWORD | EXTERNAL_ID

 -----------+---------------+----------+---------------------

 1000000    | NULL          | NULL     | gerrit:gerrit

 1000000    | NULL          | NULL     | username:gerrit

 1000001    | NULL          | NULL     | gerrit:wangshibo

 1000001    | NULL          | NULL     | username:wangshibo

 1000002    | NULL          | NULL     | gerrit:jenkins

 1000002    | NULL          | NULL     | username:jenkins

下面就手动插入邮箱

gerrit>insert into ACCOUNT_EXTERNAL_IDS values('1000000', 'gerrit@xqshijie.cn', 'NULL', 'mailto:gerrit@xqshijie.cn');

gerrit>insert into ACCOUNT_EXTERNAL_IDS values('1000001', 'wangshibo@xqshijie.cn', 'NULL', 'mailto:wangshibo@xqshijie.cn');

gerrit>insert into ACCOUNT_EXTERNAL_IDS values('1000002', 'jenkins@xqshijie.cn', 'NULL', 'mailto:jenkins@xqshijie.cn');

gerrit> select * from ACCOUNT_EXTERNAL_IDS;

 ACCOUNT_ID | EMAIL_ADDRESS           | PASSWORD | EXTERNAL_ID

 -----------+-------------------------+----------+-------------------------------

 1000000    | NULL                    | NULL     | gerrit:gerrit

 1000000    | NULL                    | NULL     | username:gerrit

 1000001    | NULL                    | NULL     | gerrit:wangshibo

 1000001    | NULL                    | NULL     | username:wangshibo

 1000002    | NULL                    | NULL     | gerrit:jenkins

 1000002    | NULL                    | NULL     | username:jenkins

 1000000    | ops@xqshijie.cn         | NULL     | mailto:gerrit@xqshijie.cn

 1000001    | wangshibo@xqshijie.cn   | NULL     | mailto:wangshibo@xqshijie.cn

 1000002    | liuxianpeng@xqshijie.cn | NULL     | mailto:jenkins@xqshijie.cn

(9 rows; 1 ms)

gerrit>

使用下面的命令,会使得上面的操作立刻生效!!!

[gerrit@115]$# ssh-gerrit gerrit flush-caches

下面登陆gerrit,然后选择账号相对于的邮箱,点击save保存就ok了!

 

 

-----------------------------------------------------------Gerrit权限说明----------------------------------------------

上面介绍了gerrit环境的部署,下面介绍下gerrit权限:

Abandon
此权限允许用户丢弃一个提交的change。如果用户有push权限,给用户分配此权限的同时用户也被分配了restore a change的权限。

Create Reference
此权限管理用户是有可以创建references,branches,tags。此权限一般与普通的push权限一起被分配。

Forge Author
伪造发起人权限,此权限允许用户绕过提交时的身份验证(Gerrit默认会匹配提交信息中author或者committer行中的email地址,如果 Email地址不匹配,则不允许提交)。

Forge Committer
伪造提交者权限,此权限允许用户绕过提交时的身份验证(Gerrit默认会匹配提交信息中author或者committer行中的email地址,如果 Email地址不匹配,则不允许提交 )。

Forge Server
伪造Gerrit服务器权限,此权限允许在committer行中使用server owner和email

Owner
此权限允许用户修改香项目的配置,具体如下:

修改项目描述
通过ssh的"create-branch"命令创建分支
在web UI界面创建/删除branch
允许/撤销任何访问权限,包括Owner权限。

Push
此分类控制用户被允许怎样推送新commit到Gerrit。

Direct Push
所有已存在的branch可以快进到新的commit。创建新分支受“Create Reference”控制,不允许删除已存在的分支,这是最安全的模式(因为commit不可以被丢弃)。

Force option
允许已存在的branch被删除。开启此选项可以从项目历史中删除提交记录。
此权限主要用来给那些只想用Gerrit的访问控制,不需要Gerrit的代码审查功能的工程使用。

Upload To Code Review
此push权限分配在refs/for/refs/heads/BRANCH命名空间上,允许用户提交一个未合并(non-merge)的commit到refs/for/BRANCH命名空间,创建一个新的代码审查change。
用户必须能够clone和fetch一个工程才可以提交change,所以用户还必须拥有Read权限。

Push Merge Commits
此权限允许用户提交merge commits,它是Push权限的附属物,如果想只允许通过Gerrit做merge操作,那么应该只分配Push仅限而不分配此权限。

Push Annotated Tag
此类权限允许用户向工程仓库提交一个annotated tag。通常使用以下两种方式提交:

git push ssh://USER@HOST:PORT/PROJECT tag v1.0
或者:
git push https://HOST/PROJECT tag v1.0
Tags必须被注释(使用git tag -a),必须在refs/tags/下存在,而且必须是新的。
一般在工程达到了稳定且可发布的时候会打一个Tag。
此权限允许创建一个未签名的Tag。打Tag者的email地址必须与当前用户的一致。
如果要提交不是自己打的Tag,则必须同时分配Forge Committer Identity权限。
如果要提交轻标签(lightweight tags)分配Create Reference权限给引用/refs/tags/*
如果要删除或覆盖一个已存在的tag,分配Push权限并开启Force option。

Push Signed Tag
此类权限允许用户向工程仓库提交一个PGP签名的 tag。通常使用以下两种方式提交:

git push ssh://USER@HOST:PORT/PROJECT tag v1.0
或者:
git push https://HOST/PROJECT tag v1.0
Tags必须被注释(使用git tag -a),必须在refs/tags/下存在,而且必须是新的。

Read
此类权限控制工程的changes, comments,和code diffs可见性,和是否可通过SSH或HTTP访问Git。
如果在单独工程的ACL中设置的此权限,那么全局ACL中的设置将不起作用。

Rebase
此类仅限允许用户通过web页面的“Rebase Change”按钮衍合(Rebase)修改

Remove Reviewer
此类权限允许用户在一个change的reviewers list中移除其他用户。
change所属者可以移除0分或负分的reviewers(即使没有此权限)。
项目所有者和网站管理员可以移除所有reviewers(即使没有此权限)。
没有此权限的用户只可以移除自己。

Review Labels
// TODO

Submit
此类权限允许用户提交changes。
提交一个change会使该change尽可能快的合并到目的分支,使其作为项目历史永久的一部分。
为了提交change,所有的labels都必须允许提交,并且不能block它。
如果要快速提交一个push上的change,用户需要在refs/for/(e.g. on refs/for/refs/heads/master)有此权限。

Submit(On Behalf Of)
此类权限允许有Submit权限的用户代表其他用户提交change。
在project.config文件中,此权限被命名为submitAs。

View Drafts
此类权限允许用户查看其他用户提交的drafts changes
change所用者和任何明确添加的reviewers也可以查看(即使没用此权限)

Publish Drafts
此类权限允许用户发布其他用户提交的drafts changes
change所用者和任何明确添加的reviewers也可以查看(即使没用此权限)

Delete Drafts
此类权限允许用户删除其他用户提交的drafts changes
change所用者和任何明确添加的reviewers也可以查看(即使没用此权限)

Edit Topic Name
允许用户编辑提交到review的change的话题名。
change所用者,分支所用者,项目所用者和网站管理员都可以编辑此话题名(即使没有此权限)。
“Force Edit”标识控制是否可以编辑已关闭的change标题,如果此标识设置只能编辑open changes,则不可以编辑已关闭的change 标题。

Edit Hashtags
允许用户在提交到reviews的changes上添加或移除hashtags。
change所用者和任何明确添加的reviewers也可以查看(即使没用此权限)

                              ‧‧‧‧‧‧‧‧‧‧‧‧‧‧‧‧  END  ‧‧‧‧‧‧‧‧‧‧‧‧‧‧‧‧

推荐阅读

【1】jetson nano开发使用的基础详细分享

【2】Linux开发coredump文件分析实战分享

【3】CPU中的程序是怎么运行起来的 必读

【4】cartographer环境建立以及建图测试

【5】设计模式之简单工厂模式、工厂模式、抽象工厂模式的对比

本公众号全部原创干货已整理成一个目录,回复[ 资源 ]即可获得。


羽林君 某嵌入式程序猿分享技术、生活、人生云云文字。如有诗云:去年今日此门中,人面桃花相映红。人面不知何处去,桃花依旧笑春风。
评论
  • RK3506 是瑞芯微推出的MPU产品,芯片制程为22nm,定位于轻量级、低成本解决方案。该MPU具有低功耗、外设接口丰富、实时性高的特点,适合用多种工商业场景。本文将基于RK3506的设计特点,为大家分析其应用场景。RK3506核心板主要分为三个型号,各型号间的区别如下图:​图 1  RK3506核心板处理器型号场景1:显示HMIRK3506核心板显示接口支持RGB、MIPI、QSPI输出,且支持2D图形加速,轻松运行QT、LVGL等GUI,最快3S内开
    万象奥科 2024-12-11 15:42 88浏览
  • 习学习笔记&记录学习学习笔记&记录学习学习笔记&记录学习学习笔记&记录学习笔记&记录学习习笔记&记学习学习笔记&记录学习学习笔记&记录学习习笔记&记录学习学习笔记&记录学习学习笔记记录学习学习笔记&记录学习学习笔记&记录学习学习笔记&记录学习学习笔记&记录学习学习笔记&记录学习习笔记&记录学习学习笔记&记录学习学习笔记&记录学习学习笔记&记录学习学习笔记&记录学习学习笔记&记录学习学习笔记&记录学习学习笔记&学习学习笔记&记录学习学习笔记&记录学习学习笔记&记录学习学习笔记&记录学习学习笔记&记
    youyeye 2024-12-12 10:13 42浏览
  • 在智能化技术快速发展当下,图像数据的采集与处理逐渐成为自动驾驶、工业等领域的一项关键技术。高质量的图像数据采集与算法集成测试都是确保系统性能和可靠性的关键。随着技术的不断进步,对于图像数据的采集、处理和分析的需求日益增长,这不仅要求我们拥有高性能的相机硬件,还要求我们能够高效地集成和测试各种算法。我们探索了一种多源相机数据采集与算法集成测试方案,能够满足不同应用场景下对图像采集和算法测试的多样化需求,确保数据的准确性和算法的有效性。一、相机组成相机一般由镜头(Lens),图像传感器(Image
    康谋 2024-12-12 09:45 80浏览
  • 一、SAE J1939协议概述SAE J1939协议是由美国汽车工程师协会(SAE,Society of Automotive Engineers)定义的一种用于重型车辆和工业设备中的通信协议,主要应用于车辆和设备之间的实时数据交换。J1939基于CAN(Controller Area Network)总线技术,使用29bit的扩展标识符和扩展数据帧,CAN通信速率为250Kbps,用于车载电子控制单元(ECU)之间的通信和控制。小北同学在之前也对J1939协议做过扫盲科普【科普系列】SAE J
    北汇信息 2024-12-11 15:45 114浏览
  • 近日,搭载紫光展锐W517芯片平台的INMO GO2由影目科技正式推出。作为全球首款专为商务场景设计的智能翻译眼镜,INMO GO2 以“快、准、稳”三大核心优势,突破传统翻译产品局限,为全球商务人士带来高效、自然、稳定的跨语言交流体验。 INMO GO2内置的W517芯片,是紫光展锐4G旗舰级智能穿戴平台,采用四核处理器,具有高性能、低功耗的优势,内置超微高集成技术,采用先进工艺,计算能力相比同档位竞品提升4倍,强大的性能提供更加多样化的应用场景。【视频见P盘链接】 依托“
    紫光展锐 2024-12-11 11:50 78浏览
  • 本文介绍瑞芯微RK3588主板/开发板Android12系统下,APK签名文件生成方法。触觉智能EVB3588开发板演示,搭载了瑞芯微RK3588芯片,该开发板是核心板加底板设计,音视频接口、通信接口等各类接口一应俱全,可帮助企业提高产品开发效率,缩短上市时间,降低成本和设计风险。工具准备下载Keytool-ImportKeyPair工具在源码:build/target/product/security/系统初始签名文件目录中,将以下三个文件拷贝出来:platform.pem;platform.
    Industio_触觉智能 2024-12-12 10:27 75浏览
  • 首先在gitee上打个广告:ad5d2f3b647444a88b6f7f9555fd681f.mp4 · 丙丁先生/香河英茂工作室中国 - Gitee.com丙丁先生 (mr-bingding) - Gitee.com2024年对我来说是充满挑战和机遇的一年。在这一年里,我不仅进行了多个开发板的测评,还尝试了多种不同的项目和技术。今天,我想分享一下这一年的故事,希望能给大家带来一些启发和乐趣。 年初的时候,我开始对各种开发板进行测评。从STM32WBA55CG到瑞萨、平头哥和平海的开发板,我都
    丙丁先生 2024-12-11 20:14 75浏览
  • 天问Block和Mixly是两个不同的编程工具,分别在单片机开发和教育编程领域有各自的应用。以下是对它们的详细比较: 基本定义 天问Block:天问Block是一个基于区块链技术的数字身份验证和数据交换平台。它的目标是为用户提供一个安全、去中心化、可信任的数字身份验证和数据交换解决方案。 Mixly:Mixly是一款由北京师范大学教育学部创客教育实验室开发的图形化编程软件,旨在为初学者提供一个易于学习和使用的Arduino编程环境。 主要功能 天问Block:支持STC全系列8位单片机,32位
    丙丁先生 2024-12-11 13:15 66浏览
  • 铁氧体芯片是一种基于铁氧体磁性材料制成的芯片,在通信、传感器、储能等领域有着广泛的应用。铁氧体磁性材料能够通过外加磁场调控其导电性质和反射性质,因此在信号处理和传感器技术方面有着独特的优势。以下是对半导体划片机在铁氧体划切领域应用的详细阐述: 一、半导体划片机的工作原理与特点半导体划片机是一种使用刀片或通过激光等方式高精度切割被加工物的装置,是半导体后道封测中晶圆切割和WLP切割环节的关键设备。它结合了水气电、空气静压高速主轴、精密机械传动、传感器及自动化控制等先进技术,具有高精度、高
    博捷芯划片机 2024-12-12 09:16 86浏览
  • 全球智能电视时代来临这年头若是消费者想随意地从各个通路中选购电视时,不难发现目前市场上的产品都已是具有智能联网功能的智能电视了,可以宣告智能电视的普及时代已到临!Google从2021年开始大力推广Google TV(即原Android TV的升级版),其他各大品牌商也都跟进推出搭载Google TV操作系统的机种,除了Google TV外,LG、Samsung、Panasonic等大厂牌也开发出自家的智能电视平台,可以看出各家业者都一致地看好这块大饼。智能电视的Wi-Fi连线怎么消失了?智能电
    百佳泰测试实验室 2024-12-12 17:33 60浏览
  • 时源芯微——RE超标整机定位与解决详细流程一、 初步测量与问题确认使用专业的电磁辐射测量设备,对整机的辐射发射进行精确测量。确认是否存在RE超标问题,并记录超标频段和幅度。二、电缆检查与处理若存在信号电缆:步骤一:拔掉所有信号电缆,仅保留电源线,再次测量整机的辐射发射。若测量合格:判定问题出在信号电缆上,可能是电缆的共模电流导致。逐一连接信号电缆,每次连接后测量,定位具体哪根电缆或接口导致超标。对问题电缆进行处理,如加共模扼流圈、滤波器,或优化电缆布局和屏蔽。重新连接所有电缆,再次测量
    时源芯微 2024-12-11 17:11 115浏览
  • 应用环境与极具挑战性的测试需求在服务器制造领域里,系统整合测试(System Integration Test;SIT)是确保产品质量和性能的关键步骤。随着服务器系统的复杂性不断提升,包括:多种硬件组件、操作系统、虚拟化平台以及各种应用程序和服务的整合,服务器制造商面临着更有挑战性的测试需求。这些挑战主要体现在以下五个方面:1. 硬件和软件的高度整合:现代服务器通常包括多个处理器、内存模块、储存设备和网络接口。这些硬件组件必须与操作系统及应用软件无缝整合。SIT测试可以帮助制造商确保这些不同组件
    百佳泰测试实验室 2024-12-12 17:45 66浏览
  • 全球知名半导体制造商ROHM Co., Ltd.(以下简称“罗姆”)宣布与Taiwan Semiconductor Manufacturing Company Limited(以下简称“台积公司”)就车载氮化镓功率器件的开发和量产事宜建立战略合作伙伴关系。通过该合作关系,双方将致力于将罗姆的氮化镓器件开发技术与台积公司业界先进的GaN-on-Silicon工艺技术优势结合起来,满足市场对高耐压和高频特性优异的功率元器件日益增长的需求。氮化镓功率器件目前主要被用于AC适配器和服务器电源等消费电子和
    电子资讯报 2024-12-10 17:09 99浏览
  • 习学习笔记&记录学习学习笔记&记录学习学习笔记&记录学习学习笔记&记录学习笔记&记录学习习笔记&记学习学习笔记&记录学习学习笔记&记录学习习笔记&记录学习学习笔记&记录学习学习笔记记录学习学习笔记&记录学习学习笔记&记录学习学习笔记&记录学习学习笔记&记录学习学习笔记&记录学习习笔记&记录学习学习笔记&记录学习学习笔记&记录学习学习笔记&记录学习学习笔记&记录学习学习笔记&记录学习学习笔记&记录学习学习笔记&学习学习笔记&记录学习学习笔记&记录学习学习笔记&记录学习学习笔记&记录学习学习笔记&记
    youyeye 2024-12-11 17:58 88浏览
  • 我的一台很多年前人家不要了的九十年代SONY台式组合音响,接手时只有CD功能不行了,因为不需要,也就没修,只使用收音机、磁带机和外接信号功能就够了。最近五年在外地,就断电闲置,没使用了。今年9月回到家里,就一个劲儿地忙着收拾家当,忙了一个多月,太多事啦!修了电气,清理了闲置不用了的电器和电子,就是一个劲儿地扔扔扔!几十年的“工匠式”收留收藏,只能断舍离,拆解不过来的了。一天,忽然感觉室内有股臭味,用鼻子的嗅觉功能朝着臭味重的方向寻找,觉得应该就是这台组合音响?怎么会呢?这无机物的东西不会腐臭吧?
    自做自受 2024-12-10 16:34 173浏览
我要评论
0
点击右上角,分享到朋友圈 我知道啦
请使用浏览器分享功能 我知道啦