1. 程式人生 > >CI持續整合系統環境---部署gerrit環境完整記錄

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.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)新增賬號 [

[email protected] ~]#useradd gerrit [[email protected] ~]#su - gerrit [[email protected] ~]$ 在root賬號下操作 [[email protected] ~]# cp /root/gerrit-2.11.3.war /home/gerrit 下面一步很重要,就是說提前把下面的兩個軟體放到相應的位置,以防在gerrit安裝過程中再去執行下載操作(因為安裝過程中再去下載,由於網速問題會failed!) [[email protected] ~]#mkdir -p /home/gerrit/gerrit_site/lib [
[email protected]
~]#cp /root/mysql-connector-java-5.1.21.jar /home/gerrit/gerrit_site/lib/ [[email protected] ~]#cp /root/bcpkix-jdk15on-1.52.jar /home/gerrit/gerrit_site/lib/ [[email protected] ~]#chown -R gerrit.gerrit /home/gerrit

接著在gerrit賬號下進行安裝 除了選用mysql資料庫,Verified,http認證代理,其他的都是預設!

[[email protected] ~]$ 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)

[[email protected] ~]$/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)

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

檢視日誌,報錯如下: [[email protected] ~]$ 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 [[email protected] ~]$ 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就成功了 [[email protected] ~]$ /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的認證代理配置記錄

[[email protected] vhosts]# pwd

/usr/local/nginx/conf/vhosts

[[email protected] 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進行賦權:  [[email protected] ~]# setfacl -m g:www:rx /home/gerrit 這一步很重要!否則,訪問gerrit的時候會報500的錯!

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

建立認證許可權(也就是登陸的時候輸入的許可權)

注意:第一次加-c引數是為了建立密碼檔案,預設第一個使用者是系統管理員

[[email protected] vhosts]#htpasswd -c /home/gerrit/gerrit_site/etc/passwords  gerrit

New password:

Re-type new password:

Adding password for user gerrit

[[email protected] vhosts]#htpasswd /home/gerrit/gerrit_site/etc/passwords wangshibo

New password:

Re-type new password:

Adding password for user wangshibo

[[email protected] vhosts]#htpasswd /home/gerrit/gerrit_site/etc/passwords jenkins

New password:

Re-type new password:

Adding password for user jenkins

檢視下認證賬號檔案資訊

[[email protected] vhosts]# cat /home/gerrit/gerrit_site/etc/passwords

重啟nginx服務

[[email protected] vhosts]# /usr/local/nginx/sbin/nginx -s reload

訪問http://ip,輸入上面建立的使用者資訊即可登陸gerrit

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

下面是設定郵箱的操作!!!

在gerrit一鍵安裝的時候,郵箱環節採用的是預設安裝。

安裝後登陸gerrit,預設情況下郵箱是空的。

這個時候,可以手動設定。

註冊郵箱並激活,具體設定如下:

切換到gerrit賬號下

[[email protected]]$ pwd

/home/gerrit/gerrit_site/etc

[[email protected] etc]$ cat gerrit.config

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

[sendemail]

        smtpServer = smtp.xqshijie.cn                  【此處設定的是發件郵箱資訊】

        smtpUser = [email protected]

        from = [email protected]

        smtpPass = iJWxSmXcOz9hs4xH                     

[[email protected] etc]$ cat secure.config

[auth]

  registerEmailPrivateKey = 65RWiWt5/ZxKN0ISPv8U8dee9vL2+cLidPk=

  restTokenPrivateKey = O9k9OAlvWxdtOspz4Mjff85ZoUlZJfxvxDU=

[sendemail]

  smtpPass = iJWxSmXcOz9hs4xH

注意:

sendmail的密碼會另儲存到secure.config檔案裡,一定要保證gerrit.config檔案裡的密碼和secure.config裡的密碼一致!

然後重啟gerrit服務即可!

[[email protected] 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 = [email protected]

from = [email protected]

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,然後進行相關配置

[[email protected] ~]# yum install -y gitweb     【或者直接yum install -y git*】

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

2. 通過git config配置一下

[[email protected] ~]#git config --file /home/gerrit/gerrit_site/etc/gerrit.config gitweb.cgi /var/www/git/gitweb.cgi 

[[email protected] ~]#git config --file /home/gerrit/gerrit_site/etc/gerrit.config --unset gitweb.url

3.重啟gerrit,然後登陸gerrit後,gitweb超連結效果就有了

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

gitweb還是蠻實用的。

可以通過開啟gerrit上某個工程的gitweb,檢視到這個工程程式碼近期的所有動向!

【預設情況下:只有gerrit的管理員許可權才能檢視gitweb】

如下:

--------------------------------------------------ssh公鑰設定-------------------------------------------

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

[[email protected]]$ ssh-keygen -t rsa -C [email protected]

[[email protected]]$ cd ~/.ssh/                            【~是切換到當前使用者家目錄下】

[[email protected]]$ ls  

id_rsa  id_rsa.pub

[[email protected]]$ cat id_rsa.pub ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEAqvdgToL4veIqVe4D2iOwpzggdnGU8eGfRpwZH5hsCPdrIfjMgAMYz4TCKzmD9yv8VXrG/hCOX1zgL63ZLJ1NUTTG4zJ48UefRA0i3YqDez0RH5fhI/T69KalBNfPaRcaCqcdTfJcSW5FxZ4CMsHj7uyKrGry6sA3VkYhy08WA4CVcXHPI4R+va+Ga0KvTVKxBqpEiR+1r8+hECTyWo1XngqRVQpfJismQwUXe2J9U41T+DaQfJDaB+hdYPm2Xoeu7LlsyPFrUn/Jq3vy4YeU1XVD4BIMGXxg87MUdmZh0CzbeUSc1TgKYccUccTgnVDfgwgvwY/gJYbb7csCrlW5+w== [email protected]

然後將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使其生效

如下:

[[email protected]]$vim /home/gerrit/.bashrc [[email protected]]$source /home/gerrit/.bashrc [[email protected]]$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 [[email protected]]$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://[email protected]:29418/REPOSITORY_NAME.git

Connection to 103.10.86.30 closed.

---------------------------------------------------------擴充套件----------------------------------------------------------

下面是在安裝過程中,選用預設的H2資料庫情況下的操作事項:

預設情況下,gerrit登陸後,setting處的賬戶郵箱是空的

除了上面使用郵箱註冊並激活的方法

還可以直接在資料庫中手動插入郵箱

如下:

 

檢視資料庫,發現預設是沒有郵箱資訊的

[[email protected]]$ ssh-gerrit gerrit --help           【ssh-gerrit是上面設定過的別名】

[[email protected]]$ 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', '[email protected]', 'NULL', 'mailto:[email protected]');

gerrit>insert into ACCOUNT_EXTERNAL_IDS values('1000001', '[email protected]', 'NULL', 'mailto:[email protected]');

gerrit>insert into ACCOUNT_EXTERNAL_IDS values('1000002', '[email protected]', 'NULL', 'mailto:[email protected]');

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    | [email protected]         | NULL     | mailto:[email protected]

 1000001    | [email protected]   | NULL     | mailto:[email protected]

 1000002    | [email protected] | NULL     | mailto:[email protected]

(9 rows; 1 ms)

gerrit>

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

[[email protected]]$# 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://[email protected]: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://[email protected]: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也可以檢視(即使沒用此許可權)