[原創]CI持續集成系統環境---部署gerrit環境完整記錄

 

開發同事提議在線上部署一套gerrit代碼審覈環境,廢話很少說,部署gerrit的操做記錄以下:
提早安裝好java環境,mysql環境,nginx環境
測試系統:centos6.5
下載下面三個包,放到/root目錄下(下載地址:http://pan.baidu.com/s/1nuP0X9R (提取密碼gqj5))
mysql-connector-java-5.1.21.jar
bcpkix-jdk15on-1.52.jar
gerrit-2.11.3.warhtml

--------------------------------------------gerrit歷史版本下載地址-----------------------------------------------java

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

 

---------------------------------------------------------------------------------------------------------------nginx

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/gerritgit

接着在gerrit帳號下進行安裝
除了選用mysql數據庫,Verified,http認證代理,其餘的都是默認! web

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

*** Gerrit Code Review 2.11.3
*** shell


*** Git Repositories
*** 數據庫

Location of Git repositories [git]: vim

*** 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 daemon
com.google.inject.ProvisionException: Unable to provision, see the following errors:

1) No index versions ready; run Reindex

1 error
at 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/cache
Reindexing changes: done
Reindexed 0 changes in 0.0s (0.0/s)

再次啓動gerrit就成功了
[gerrit@115 ~]$ /home/gerrit/gerrit_site/bin/gerrit.sh start
Starting 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,須要後續添加訪問權限,具體參照http://www.cnblogs.com/kevingrace/p/5651447.html文章底部的介紹】

以下:

--------------------------------------------------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/<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也能夠查看(即便沒用此權限)

相關文章
相關標籤/搜索