Centos搭建CI持續集成系統環境--部署gerrit環境完整記錄

gerrit是一套代碼審覈環境,安裝前提需要安裝java環境,mysql環境,nginx環境。這裏我爲了簡單直接用lnmp一鍵安裝,剩下就是java了。

lnmp不會安裝的可以參考一下用shell腳步一鍵搭建lnmp環境實戰

安裝前需要準備的文件如下:(http://pan.baidu.com/s/1jIwJSz0,提取密碼:fue3)

mysql-connector-java-5.1.21.jar

bcpkix-jdk15on-1.52.jar

gerrit-2.11.3.war

#############################gerrit其他版本下載地址####################

如果選擇其他版本,可以參考一下鏈接:http://www.cnblogs.com/kevingrace/p/5624122.html#commentform

wKiom1fI6XrhjZOJAAH4MP0HFxw738.png-wh_50

準備工作完成,下面開始安裝。

首先安裝的是java

先刪除系統自帶的java

[root@wulaoer ~]# yum remove java
[root@wulaoer ~]# ls
anaconda-ks.cfg  install.log.syslog          lnmp1.3-full         lnmp-install.log
install.log      jdk-8u101-linux-x64.tar.gz  lnmp1.3-full.tar.gz
[root@wulaoer ~]# mkdir /usr/local/jvm
[root@wulaoer ~]# tar -zxf jdk-8u101-linux-x64.tar.gz -C /usr/local/jvm/

我已經下載好了,直接傳上來了,設置java環境變量,

[root@wulaoer ~]# vi /etc/profile
...............省略部分.....................
export JAVA_HOME=/usr/local/jvm/jdk1.8.0_101
export CLASSPATH=.:$JAVA_HOME/lib:$JAVA_HOME/jre/lib:$CLASSPATH
export PATH=$JAVA_HOME/bin:$JAVA_HOME/jre/bin:$PATH
[root@wulaoer ~]# source /etc/profile  #生效java環境

檢查java和javac環境

[root@wulaoer ~]# java
用法: java [-options] class [args...]
           (執行類)
   或  java [-options] -jar jarfile [args...]
           (執行 jar 文件)
其中選項包括:
    -d32          使用 32 位數據模型 (如果可用)
    -d64          使用 64 位數據模型 (如果可用)
    -server       選擇 "server" VM
..................省略部分................................

javac環境

[root@wulaoer ~]# javac
用法: javac <options> <source files>
其中, 可能的選項包括:
  -g                         生成所有調試信息
  -g:none                    不生成任何調試信息
  -g:{lines,vars,source}     只生成某些調試信息
  -nowarn                    不生成任何警告
  -verbose                   輸出有關編譯器正在執行的操作的消息
  -deprecation               輸出使用已過時的 API 的源位置
.....................省略部.................................

java環境,到此安裝完成。

第二,創建gerrit數據庫,並自定義編碼爲utf-8

[root@wulaoer ~]# mysql -uroot -p
Enter password: 
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 1
Server version: 5.5.48-log Source distribution

Copyright (c) 2000, 2016, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql> create database gerritdb CHARACTER SET utf8 COLLATE utf8_general_ci;
Query OK, 1 row affected (0.07 sec)

mysql> grant all on gerritdb.* to 'gerrituser'@'localhost' identified by 'gerritpass';
Query OK, 0 rows affected (0.06 sec)

第三、創建gerrit賬戶,並把安裝文件放到gerrit家目錄下。

創建gerrit用戶

[root@wulaoer ~]# useradd gerrit
[root@wulaoer ~]# su - gerrit
[gerrit@wulaoer ~]$

把文件拷貝到gerrit家目錄下

[root@wulaoer ~]# ll
總用量 713868
-rw-------. 1 root root      1431 6月   1 19:17 anaconda-ks.cfg
-rwxr-xr-x. 1 root root    622849 7月  14 11:22 bcpkix-jdk15on-1.52.jar
-rwxr-xr-x. 1 root root  45136951 7月   8 19:34 gerrit-2.11.3.war
-rw-r--r--. 1 root root     27338 6月   1 19:16 install.log
-rw-r--r--. 1 root root      7572 6月   1 19:15 install.log.syslog
-rw-r--r--. 1 root root 181352138 7月  20 11:50 jdk-8u101-linux-x64.tar.gz
-rwxr-xr-x. 1 root root    827942 7月  14 11:22 mysql-connector-java-5.1.21.jar

把文件拷貝到gerrit目錄下並給予權限

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

第四、在gerrit賬戶下進行安裝

注意,這裏選用了mysql數據庫,Verified,http認證代理,其他的都是默認

[root@wulaoer ~]# su - gerrit
[gerrit@wulaoer ~]$ 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  #選擇mysql
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/local/jvm/jdk1.8.0_101/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://localhost: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

到了這裏,gerrit安裝完成,下面開始啓動。

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

出現這種錯誤解決方法如下:

[gerrit@wulaoer ~]$ java -jar gerrit-2.11.3.war reindex -d /home/gerrit/gerrit_site
[2016-09-06 10:22:27,387] INFO  com.google.gerrit.server.git.LocalDiskRepositoryManager : Defaulting core.streamFileThreshold to 61m
[2016-09-06 10:22:28,067] INFO  com.google.gerrit.server.cache.h2.H2CacheFactory : Enabling disk cache /home/gerrit/gerrit_site/cache
Reindexing changes: done    
Reindexed 0 changes in 0.0s (0.0/s)
Warning: InterruptedException
java.lang.InterruptedException
        at java.lang.Object.wait(Native Method)
        at java.lang.Thread.join(Thread.java:1253)
        at org.h2.util.MathUtils.getSecureRandom(MathUtils.java:104)
        at org.h2.util.MathUtils.secureRandomBytes(MathUtils.java:301)
        at org.h2.store.FileLock.setUniqueId(FileLock.java:309)
        at org.h2.store.FileLock.lockFile(FileLock.java:339)
        at org.h2.store.FileLock.lock(FileLock.java:133)
        at org.h2.engine.Database.open(Database.java:575)
        at org.h2.engine.Database.openDatabase(Database.java:236)
        at org.h2.engine.Database.<init>(Database.java:231)
        at org.h2.engine.Engine.openSession(Engine.java:56)
        at org.h2.engine.Engine.openSession(Engine.java:160)
        at org.h2.engine.Engine.createSessionAndValidate(Engine.java:139)
        at org.h2.engine.Engine.createSession(Engine.java:122)
        at org.h2.engine.Engine.createSession(Engine.java:28)
        at org.h2.engine.SessionRemote.connectEmbeddedOrServer(SessionRemote.java:323)
        at org.h2.jdbc.JdbcConnection.<init>(JdbcConnection.java:105)
        at org.h2.jdbc.JdbcConnection.<init>(JdbcConnection.java:90)
        at org.h2.Driver.connect(Driver.java:73)
        at com.google.gerrit.server.cache.h2.H2CacheImpl$SqlHandle.<init>(H2CacheImpl.java:636)
        at com.google.gerrit.server.cache.h2.H2CacheImpl$SqlStore.acquire(H2CacheImpl.java:604)
        at com.google.gerrit.server.cache.h2.H2CacheImpl$SqlStore.buildBloomFilter(H2CacheImpl.java:365)
        at com.google.gerrit.server.cache.h2.H2CacheImpl$SqlStore.open(H2CacheImpl.java:337)
        at com.google.gerrit.server.cache.h2.H2CacheImpl.start(H2CacheImpl.java:167)
        at com.google.gerrit.server.cache.h2.H2CacheFactory$1.run(H2CacheFactory.java:113)
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
        at java.lang.Thread.run(Thread.java:745)
[2016-09-06 10:22:29,825] INFO  com.google.gerrit.server.cache.h2.H2CacheFactory : Finishing 4 disk cache updates

啓動一次看看

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

如果出現

[gerrit@wulaoer ~]$ /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

第五、配置gerrit

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

[gerrit@wulaoer ~]$ vi gerrit_site/etc/gerrit.config 
[gerrit]
        basePath = git
        canonicalWebUrl =  http://192.168.0.145:8081/    #nginx代理IP和端口 
...........................................................
[httpd]
        listenUrl = http://*:8080/

nginx定義新的端口代理配置,把/usr/local/nginx/conf/nginx.conf複製一份到/usr/local/nginx/conf/vhost/下,更名爲gerrit.conf,gerrit的配置文件修改如下。

[gerrit@wulaoer vhost]$ pwd
/usr/local/nginx/conf/vhost
[gerrit@wulaoer vhost]$ cat gerrit.conf 
server
    {
        listen 8081;   #端口
        server_name 192.168.0.145;  #訪問IP
        index index.html index.htm index.php;

        location / {

          auth_basic              "Gerrit Code Review";

          auth_basic_user_file    /home/gerrit/gerrit_site/etc/passwords;

          proxy_pass              http://192.168.0.145:8080/;#默認的ip+端口

          proxy_set_header        X-Forwarded-For $remote_addr;

          proxy_set_header        Host $host;

       }
}

AuthUserFile路徑爲/home/gerrit/gerrit_site/etc/passwords

在nginx進程用戶默認的是www,無權訪問路徑需要給/home/gerrit賦予權限

[root@wulaoer ~]# setfacl -m g:www:rx /home/gerrit

溫馨提示:這裏如果不賦予權限訪問提示500錯誤

[或者 setfacl -R -m u:www:rx /home/gerrit  上面是針對所屬組進行授權,這裏可以針對用戶授權]

第六、創建用戶

在創建用戶的時候需要用到htpasswd,所以這裏需要安裝一下:

[root@wulaoer ~]# yum -y install httpd

創建認證權限(就是登陸的時候用到的賬號和密碼)

注意:第一次加-c參數是爲了創建系統管理員,不加-c是普通話用戶。

[root@wulaoer ~]# htpasswd -c /home/gerrit/gerrit_site/etc/passwords  gerrit
New password: 
Re-type new password: 
Adding password for user gerrit
[root@wulaoer ~]# htpasswd  /home/gerrit/gerrit_site/etc/passwords  wulaoer
New password: 
Re-type new password: 
Adding password for user wulaoer
[root@wulaoer ~]# htpasswd  /home/gerrit/gerrit_site/etc/passwords  jenkins
New password: 
Re-type new password: 
Adding password for user jenkins

這裏創建了一個管理員gerrit,兩個普通用戶jenkins,wulaoer。兩個普通用戶會在另一個文章裏做說明,大家現在不必過於在意。

重啓一下nginx服務和關閉防火牆。

[root@wulaoer ~]# /usr/local/nginx/sbin/nginx -s reload
[root@wulaoer ~]# service iptables stop
iptables:將鏈設置爲政策 ACCEPT:filter                    [確定]
iptables:清除防火牆規則:                                 [確定]
iptables:正在卸載模塊:                                   [確定]

下面訪問http://192.168.0.145:8081,輸入創建的用戶信息即可登錄gerrit

wKiom1fPsbbDRgOUAAGenBD-GgY563.png-wh_50

以上是關於gerrit的搭建和簡單的配置。

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

下面是郵箱的設置,原本在安裝的時候郵箱環節是默認安裝的,安裝後登錄gerrit,默認郵箱是空的,所以設置手動設置,註冊郵箱並激活,設置如下:

[root@wulaoer ~]# su - gerrit
[gerrit@wulaoer ~]$ cd gerrit_site/etc/
[gerrit@wulaoer etc]$ vi gerrit.config 
#####################################################################
[sendemail]
        smtpServer = smtp.exmail.qq.com        #發件箱信息設置
        smtpUser = *******@qq.com
        from = *******@qq.com
        smtpPass = **********
#####################################################################
[gerrit@wulaoer etc]$ vi secure.config 
####################################################################
[sendemail]
        smtpPass = **********

注意:sendemail的密碼會保存到secure.config文件裏,一定要保證gerritconfig文件裏的密碼和secure.conf的密碼一致

重啓gerrit服務即可

[gerrit@wulaoer etc]$ /home/gerrit/gerrit_site/bin/gerrit.sh restart
Stopping Gerrit Code Review: OK
Starting Gerrit Code Review: OK

重啓成功後登錄gerrit頁面進行註冊郵箱,默認清晰不註冊郵箱,在設置欄裏沒有郵箱可以選擇

wKiom1fPvIuSrEu-AAF_NiLpWCI278.png-wh_50

發送成功,登錄自己的qq郵箱會收到gerrit上設置的發件人發過來的郵件,查看自己的郵件就是上面輸入的69結尾的QQ郵箱。點擊紅色連接可以直接激活,有的瀏覽器不能調整建議更換成火狐瀏覽器。

wKiom1fPvWmTXnoNAAEsoecgntA376.png-wh_50

點擊連接激活郵箱,在設置欄就有激活的郵箱了。

wKiom1fPvm3htrc4AAEbcGhkujg732.png-wh_50

點擊右上角的用戶有一個settings

wKioL1fPvyui54oIAAEebXEk3ck356.png-wh_50

注:用htpasswd創建第一個用戶時系統管理員,ID爲1,只有系統管理員纔有Create權限(創建group和project),其他的只有查看權限。使用htpaswd創建用戶時,並沒有往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@wulaoer ~]# yum install -y gitweb    【或者直接yum install -y git*】

gitweb安裝後的目錄路徑是/var/www/git

2. 通過git config配置一下

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

3.重啓gerrit,然後登陸gerrit後,gitweb超鏈接效果就有了

wKiom1fPwq6AWW4UAAEn3cLX5jE218.png-wh_50

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


gitweb還是蠻實用的。

可以通過打開gerrit上某個工程的gitweb,查看到這個工程代碼近期的所有動向!

【默認情況下:只有gerrit的管理員權限才能查看gitweb】

【普通用戶要想訪問gitweb,需要後續添加訪問權限,後期會繼續詳解】

**************************ssh公鑰設置********************************************

在gerrit本機上使用下面的命令生成管理員賬號(這裏將gerrit作爲管理員)的公私鑰

[root@wulaoer ~]# su - gerrit
[gerrit@wulaoer ~]$ ssh-keygen -t rsa -C [email protected]
Generating public/private rsa key pair.
Enter file in which to save the key (/home/gerrit/.ssh/id_rsa): 
Created directory '/home/gerrit/.ssh'.
Enter passphrase (empty for no passphrase): 
Enter same passphrase again: 
Your identification has been saved in /home/gerrit/.ssh/id_rsa.
Your public key has been saved in /home/gerrit/.ssh/id_rsa.pub.
The key fingerprint is:
bc:58:5a:8d:73:0b:ac:01:39:ac:96:02:85:45:92:ba [email protected]
The key's randomart p_w_picpath is:
+--[ RSA 2048]----+
|.=+              |
|oo . .           |
|o   =            |
|o  o o o o       |
|..+   . S o      |
|Eo     B = .     |
|      + . .      |
|                 |
|                 |
+-----------------+
[gerrit@wulaoer ~]$ cat ~/.ssh/id_rsa.pub 
ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEA2e/iJxw7FG0rhSZkSy2M31JBW/lnNewRgu6cyC2jMheqYVHZhf9XlAR9gfR8V8h1nqBo8GWraNchdOAdTNTZ1nqfrE4iDRd2FKhL2zx47oErj3H/Hv6747r0pagP+kCt7c2hglHXhhs4SLWg3BSK+tXOM1Db7kgp+QhwrbmjkbLXJ+G/LwlLJMY1q6mI5fmEUmCC+QfZgZ9e9vKO6fjFDjD5nHsRd70Jnf1fUQC99FvqiYhw8e/YJNnY+dMoczTDDwzx6zsB0qx6Cpw5GskCUPVztqDeH7TgRZgY6Ttkakglied2sv11sRzVV0sn3msCgmu1qsIdTeCDx5gdJQEI0w== [email protected]

將gerrit賬號的公鑰內容拷貝到gerrit界面的SSH Public Keys裏。

wKioL1fPxGCCdSKDAAICHhBMDiQ726.png-wh_50

Settings

wKioL1fPxMDRAWNmAAGdyLnJSPo687.png-wh_50


接下來設置別名,方便使用ssh連接gerrit

可以直接在gerrit用戶家目錄(/home/gerrit)下的.bashrc文件裏設置。如下別名是登錄gerrit的admin賬號下的操作:

[gerrit@wulaoer ~]$ vi .bashrc
# .bashrc

# Source global definitions
if [ -f /etc/bashrc ]; then
        . /etc/bashrc
fi
# User specific aliases and functions

然後讓文件生效

[gerrit@wulaoer ~]$ source .bashrc
[gerrit@wulaoer ~]$ ssh-gerrit
The authenticity of host '[192.168.0.145]:29418 ([192.168.0.145]:29418)' can't be established.
RSA key fingerprint is 4f:6a:ec:3c:7e:52:2e:56:0a:e0:b1:fb:38:86:da:42.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '[192.168.0.145]:29418' (RSA) to the list of known hosts.

  ****    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://[email protected]:29418/REPOSITORY_NAME.git

Connection to 192.168.0.145 closed.

********************************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/<ref>(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也可以查看(即使沒用此權限)


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章