1. 程式人生 > >Linux環境搭建gerrit伺服器

Linux環境搭建gerrit伺服器

一、環境準備

1.Java環境

gerrit依賴,用於安裝gerrit環境。

安裝:sudo tar zxvf ./jdk-7u79-linux-x64.tar.gz -C /opt

配置:vim ~/.bashrc(針對當前使用者) or vim /etc/profile(針對所有使用者,推薦)

export JAVA_HOME=/opt/jdk1.7.0_79

export JRE_HOME=$JAVA_HOME/jre

export CLASSPATH=$JAVA_HOME/lib:$JRE_HOME/lib:$CLASSPATH

export PATH=$JAVA_HOME/bin:$JRE_HOME/bin:$PATH

驗證:java -version

java version "1.7.0_79"
Java(TM) SE Runtime Environment (build 1.7.0_79-b15)
Java HotSpot(TM) 64-Bit Server VM (build 24.79-b02, mixed mode)

2.git環境

gerrit依賴,用來操作git repository。

安裝:sudo apt-get install git

驗證:git --version

git version 1.9.1

初次配置Git時,將使用者改為自己。

     ① git config --global user.name "your name"

     ② git config --global user.email "your email"

3.gerrit環境

本人安裝使用了gerrit-2.12.war

4.apache2環境

安裝:sudo apt-get install apache2 

驗證:sudo /etc/init.d/apache2 start

5.gerrit管理帳號(可選,使用獨立賬號配置gerrit)

gerrit依賴,用來管理gerrit。

sudo adduser gerrit

sudo passwd gerrit

並將gerrit加入sudo許可權

sudo visudo

gerrit  ALL=(ALL:ALL) ALL

二、安裝與配置gerrit

1.配置gerrit

預設安裝:java -jar gerrit-2.12.war init -d ~/review_site

安裝過程中,Authenticationmethod [OPENID/?]:輸入http,另外Behind reverse proxy [y/N]?選y 反向代理,其他的預設即可

更新配置檔案:sudo vim ~/review_site/etc/gerrit.config

[gerrit]

    basePath = code_repo      //在/home/gerrit/review_site/code_repo存放各專案git庫

    canonicalWebUrl =http://192.168.200.130:8080/

[database]

    type = h2

    database =/home/gerrit/review_site/db/ReviewDB

[auth]

    type = HTTP

[receive]

    enableSignedPush = false

[sendemail]     //用於傳送郵件進行確認

        smtpServer =smtp.qiye.163.com

        smtpServerPort = 465

        smtpEncryption = SSL

        smtpUser = [email protected]

        smtpPass = XXXXXXXXXX

        from = [email protected]

[container]

    user = gerrit

    javaHome = /home/gerrit/jdk/jre

[sshd]

    listenAddress = *:29418

[httpd]

    listenUrl = proxy-http://*:8080/

[cache]

    directory = cache

2.設定反向代理

(2.1)在mods-enabled中建立軟連結:

 cd /etc/apache2/mods-enabled

          ln -s ../mods-available/proxy.load

          ln -s ../mods-available/proxy.conf

          ln -s ../mods-available/proxy_http.load

(2.2)在/etc/apache2/sites-enabled/000-default.conf中新增代理配置(黃色背景部分)

[email protected]:/etc/apache2/sites-enabled$ cat000-default.conf

<VirtualHost *:80>

    ServerAdmin [email protected]

    DocumentRoot /var/www/html

    ErrorLog ${APACHE_LOG_DIR}/error.log

    CustomLog ${APACHE_LOG_DIR}/access.log combined

ServerName 192.168.200.130

ProxyRequests Off

ProxyVia Off

ProxyPreserveHost On

<Proxy *>

    Order deny,allow

    Allow from all

</Proxy>

<Location /login/>

AuthType Basic

AuthName "Gerrit Code Review"

Require valid-user

AuthBasicProvider file

AuthUserFile /home/gerrit/review_site/etc/passwd

</Location>

ProxyPass / http://127.0.0.1:8080/

ProxyPassReverse / http://127.0.0.1:8080/

</VirtualHost>

# vim: syntax=apache ts=4 sw=4 sts=4 sr noet

3.配置gerrit賬戶密碼

touch /home/gerrit/review_site/etc/passwd

htpasswd -b /home/gerrit/review_site/etc/passwd admin 123456(管理員)

htpasswd -b /home/gerrit/review_site/etc/passwd xpp 123456(普通使用者)

4.啟動gerrit&啟動apache2

sudo ~/review_site/bin/gerrit.sh start

sudo /etc/init.d/apache2 start

5.訪問gerrit

管理介面 http://192.168.199.112:8080/

第一次訪問,需要輸入第3步設定的admin及密碼,該賬戶將作為gerrit管理員賬戶。進入後可設定FullName: GerritAdmin。

三、如何使用gerrit

前提:需要git使用端 / gerrit服務端配合使用。

1.新增專案(gerrit 服務端)

1.1使用gerrit新增新專案:(                                   

ssh -p 29418 gerrit1@192.168.199.112gerrit create-project--empty-commit --namedemo-project #建議採用管理介面新增

ssh -p 29418 gerrit1@192.168.199.112gerrit create-project--empty-commitdemo-project

或者使用gerrit管理介面

1.2使用gerrit新增已有專案:(適用於已有專案下移植到gerrit中)

ssh -p 29418 gerrit1@192.168.199.112 gerrit create-project --nameexist-project #建議採用管理介面新增

ssh -p 29418 gerrit1@192.168.199.112 gerrit create-project  exist-project 

或者使用gerrit管理介面

然後將已有專案與gerrit上建立的exist-project關聯,即將已有程式碼庫程式碼push到gerrit中進行管理。

cd~/gitcode/exist-project

git pushssh://[email protected]:29418/exist-project *:*

2.生成sshkey(git使用端)

在開發賬戶中生成sshkey,用作與gerrit伺服器連線。

ssh-keygen -t rsa #生成sshkey

ls ~/.ssh/ #可檢視sshkey

cat ~/.ssh/id_rsa.pub #檢視sshkey

ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQCj1XDqjNXbn39oeacJOxe8FklBJRpGS1CcHRThWBytZ4A5KXAaxYzcD94GUd9UxxZzKCr6y90mwuJ+jkKxCTlqUiwj73QIiPWQ3Re08M049W4XxdfGnu/jyTI9DptWBsF0dwFJlQquUtitS+b1Tkz7Jr7+WipbZ22aiHwRvY4VcvCCdIHy/BnCCbVcfgk9u8f+X+ROm+DkOGfUcBNXWEJydqF0wy/D13Q5gp9OAXMIOD05T3GToJRwYtx2cVFmK4jE9HtcudOrrZNFVHqeblbA7EMKpIuDpLho7esmpwJ/woB1wnKTwHoUzbMt0a6hHPMNWyP2WIJebEA1KzThLixt [email protected]

3.新增sshkey到gerrit伺服器(gerrit 服務端)

此步驟與git流程類似,即將id_rsa.pub內容上傳到git repository,gerrit中幫我們管理git repository.

4.拉取程式碼&配置git hooks(git client端)

驗證sshkey是否配置成功:[email protected] -p 29418

The authenticity of host '[192.168.199.112]:29418 ([127.0.0.1]:29418)' can't be established.
  RSA key fingerprint is db:07:3d:c2:94:25:b5:8d:ac:bc:b5:9e:2f:95:5f:4a.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '[192.168.199.112]:29418' (RSA) to the list of known hosts.
****    Welcome to Gerrit Code Review    ****
Hi user, 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

1.拉取程式碼: 

git clonessh://[email protected]:29418/demo-project

2.更新githooks:gitdir=$(git rev-parse --git-dir);

scp -p -P 29418 gerrit1@192.168.199.112:hooks/commit-msg${gitdir}/hooks/

該過程用來在commit-msg中加入change-id,gerrit流程必備。

3.修改程式碼並提交,推送時與原有git流程不一致,採用

git push origin HEAD:refs/for/master 。

git push origin HEAD:refs/for/master
Counting objects: 6, done.
Delta compression using up to 4 threads.
Compressing objects: 100% (3/3), done.
Writing objects: 100% (3/3), 381 bytes | 0 bytes/s, done.
Total 3 (delta 0), reused 0 (delta 0)
remote: Processing changes: new: 1, refs: 1, done
remote: 
remote: New Changes:
remote:   http://localhost:8081/4 Append date to testfile
remote: 
To ssh://[email protected]:29418/demo-project
 * [new branch]      HEAD -> refs/for/master

四、使用gerrit website完成codereview

當完成push後,可在gerrit管理介面看到當前提交code review的change。

檢視需要code review的提交:

檢視某次提交的詳細資訊(稽核者+2可通過本次提交,提交者可通過Abandon本次提交):

如果稽核者+2通過後,可提交該次commit.

五、gerrit注意事項

* 需要為每個使用者分配gerrit賬號,不要都使用admin賬號,因為admin賬號可直接pushmaster

* pull程式碼後需要配置githooks檔案,以便在commit時自動生成change-id,否則無法push

* push程式碼時需要使用git push originHEAD:refs/for/master(branch),gerrit預設關閉非admin賬號的push direct許可權

* push程式碼時需要commit email與gerrit account email一致,否則無法push成功,可選擇關閉email notify,並開啟forge user許可權,或者通過修改gerrit資料庫account email資訊

使用注意:

4.初次配置Git時,將使用者改為自己。

     ① git config --global user.name "your name"

     ② git config --global user.email "your email"

1.git clone ssh://[email protected]:29418/demo-project  //拉取程式碼

/***下載commit-msg到project的.git/hooks資料夾裡,主要是在提交時自動建立Change-Id。***/

chmod u+x .git/hooks/commit-msg

(更新程式碼到Cache:git fetch

 把Cache程式碼Merge到本地工程: git rebase )

3.新增檔案:git add . (若沒有新檔案,本條可省略)

4.提交到本地:git commit –m “”

5.提交到遠端:git push origin HEAD:refs/for/master

六、安裝repo

1.安裝git

sudo apt-get install git-core

2.安裝curl

sudo apt-get install curl

3.安裝repo, 通過curl下載repo

mkdir ~/bin

curl http://php.webtutor.pl/en/wp-content/uploads/2011/09/repo >~/bin/repo

4.修改執行許可權

chmod a+x ~/bin/repo

5.修改~/bin/repo檔案將第五行

問題:

curl http://commondatastorage.googleapis.com/git-repo-downloads/repo >~/bin/repo

  % Total    % Received % Xferd  Average Speed  Time    Time     Time  Current

                                Dload  Upload   Total  Spent    Left  Speed

  0     0    0     0    0    0      0      0 --:--:-- --:--:----:--:--     0

curl: (56) Recv failure: 連線被對端重置

解決方法:修改~/bin/repo檔案將第五行

REPO_URL='https://gerrit.googlesource.com/git-repo'

改為

REPO_URL='http://gerrit.googlesource.com/git-repo'

或改為:

https://gerrit-google.tuna.tsinghua.edu.cn/git-repo

6.然後向PATH中新增bin路徑:

export PATH=$PATH:~/bin

使用$PATH 檢視該值,看是否新增成功

【下面就是獲取原始碼了:

$ repo init -ugit://git.omapzoom.org/platform/omapmanifest.git -b 27.x -mRLS27.12.1-P2_Gingerbread.xml

$ repo sync

七、repo管理專案程式碼

1、manifest.xml格式

在專案XXX.git中新增default.xml檔案,檔案格式如下:
<?xml version="1.0" encoding="UTF-8"?>
<manifest>
    <remote name="test" fetch="ssh://192.168.220.130:29418" review="review.source.android.com" />
    <default revision="master" remote="test" />
    <project name="demo-project" path="demo-project"/>
    <project name="new_project" path="new_project"/>
</manifest>
可以新建一個專案manifest(用於管理其他多個專案),然後本地建立一個default.xml。格式如上,提交,上傳。

然後執行

repo init -u ssh://[email protected]:29418/manifest.git

repo sync

2、upload

1、register email

htpasswd -b /home/gerrit/review_site/etc/passwd gerrit1123456

新增使用者後要登陸gerrit設定register email進行確認,然後才可以repo upload

2、default.xml

<?xml version="1.0" encoding="UTF-8"?>
<manifest>
    <remote name="test" fetch="ssh://192.168.200.130:29418" review="review.source.android.com" />
    <default revision="refs/heads/demo" remote="test" />
    <project name="demo-project" path="demo-project"/>
    <project name="new_project" path="new_project"/>
</manifest>

專案遠端倉庫建立demo分支

3、

Upload之前需要在本地建立分支

repo start branchname –all (所有專案)

4、

git add

git commit

本地修改專案,然後就可以repo upload

流程

1.      repo init –u xxx初始化

2.      repo sync同步要改動的專案

3.      在該專案下面repo start xxx新建一個本地分支

4.      做好改動以後git commit本地提交改動

5.      repo upload xxx將改動上傳,等別人通過gerrit review

6.      review如果有需要改動的地方,那本地改好後,git commit --amend來儲存新的修改

7.      repo upload將新的改動上傳

8.      重複5-7步,直到review通過,然後merge改動,完畢

八、tag

1.Gerrit上檢查是否已有相應的Access許可權

Projects ->List -> All-Projects -> Acess,點選Edit

2.從Gerrit獲取預設的master分支到本地,並在本地建立annotatedtag

git clone ssh://[email protected]:29418/bbauto/bba
cd bba
gittag -a -m "Adding v1.0 tag" v1.0
或git tag -s -m "Adding v1.0 tag" v1.0

git tag -a v1.0


3.提交本地的tag到Gerrit

git push origin v1.0 refs/tags/v1.0:refs/tags/v1.0
或git push origin v1.0 HEAD:refs/tags/v1.0
git push originv1.0
或git push origin tag v1.0
或git push origin --tags#提交本地的所有tags

4.獲取指定tag到本地

git clone ssh://[email protected]:29418/bbauto/bba

git checkout v1.0

九、許可權管理

在gerrit中許可權控制是基於群組的. 每個使用者有一個或者多個群組, 訪問許可權被賦予這些群組.訪問許可權不能賦予個人使用者.

1、System Groups

Gerrit系統自帶下面的群組

  • Anonymous Users
  • Change Owner
  • Project Owners
  • Registered Users

AnonymousUsers

所有使用者都是匿名使用者成員, 所有使用者都能繼承Anonymous Users所有訪問許可權.
當前只有Read access許可權值得賦予給Anonymous Users群組, 因為其他許可權都需要認證.

2、Predefined Groups

system groups在Gerrit系統內部就定義好了, 而普通群組資訊被儲存在ACCOUNT_GROUPS表中,Predefined groups群組資訊也儲存在ACCOUNT_GROUPS表中

Gerrit自帶兩個predefinedgroups:

  • Administrators
  • Non-Interactive Users

Administrators

AdministratorsGerritroot角色, 在Gerrit初始化時Administrate Server許可權被賦予給這個PredefinedGroups群組.
Administrators組的成員可以管理所有專案, 但是不意味著任何其他許可權. Administrators組不會自動獲得程式碼審查批准和提交許可權.

Non-Interactive Users

Interactive Users比如在web頁面上審查程式碼, 在提交/獲取程式碼的使用者
Non-Interactive Users是可以通過Gerrit介面進行操作的組, 在Gerrit初始化時PriorityBATCHStream Events許可權被賦予給這個Predefined Groups組.
Non-Interactive UsersInteractiveUsers使用不同的執行緒池, 防止互動式使用者搶佔執行緒. 當系統資源緊張時確保了互動式的使用者可以繼續工作.

3、Project Access Control Lists

All Projects

All Projects專案中的訪問許可權會自動被其他專案繼承, 只有Administrate Server capability能夠編輯All-Projects許可權.

Admin登陸後,通過Projects -> List -> All-Projects -> Acess,點選Edit可對許可權進行管理,Add Permission新增許可權,Add Group新增該許可權對應的組別。

specialand magic references

refs/heads/*refs/tags/*Git常用的引用名稱空間, 一個用來儲存分支一個用來標籤
refs/*名稱空間下的引用都是有效的,Gerrit在refs/*有一些特殊用處的名稱空間和引用

AccessCategories

Abandon

程式碼審查時允許使用者丟棄這個審查。如果對changepush許可權,同時具有push,abandon,restore許可權

Create Reference

使用者可以建立新的references, branchesor tags, 建立時引用必須不存在,不能刪除已經建立的引用
如果僅僅推送標籤,給refs/tags/*賦予Create Reference許可權
這個許可權通常用在建立某個名稱空間下的分支, 如:某個部門自由建立分支許可權refs/heads/hello/*
給某使用者自由建立分支許可權, 給refs/heads/sandbox/${username}/*賦予Create Reference許可權
如果你這樣賦予Create Reference許可權,記得同時賦予push force許可權, 這樣擁有清理

相關推薦

Linux環境搭建gerrit伺服器

一、環境準備 1.Java環境 gerrit依賴,用於安裝gerrit環境。 安裝:sudo tar zxvf ./jdk-7u79-linux-x64.tar.gz -C /opt 配置:vim ~/.bashrc(針對當前使用者) or vim /etc/profil

Linux搭建Git伺服器 Jenkins持續整合環境部署

1、安裝Git 見 Jenkins持續整合環境部署 第四節 2、建立Git使用者和使用者組 1 groupadd git 2 useradd git -g git 3、建立證書切換到git使用者建立證書 1 su git 2 cd /home/git 3 mkdir .ssh 4 c

linux搭建java伺服器環境

目錄 1.jdk安裝 2.tomcat安裝 3.redis安裝 4.nginx安裝 5.mysql安裝 一.jdk安裝: (1)去甲骨文官網下載對應版本的jdk這裡以1.8為例:jdk1.8 我這

如何在Linux(CentOS7)環境搭建 Jenkins 伺服器環境

    最近,我自己要親手搭建一套完整的企業級 CI/CD 環境,這個環節裡面涉及了很多內容,沒有辦法把這麼多的內容都放在一篇文章裡,所以 Jenkins 的安裝和Java 的 JDK 安裝我就是分了兩篇文章來寫的。而且這套環境中也包含 Docker 容器,涉及的東西不少,有些東西,自己也是第一次遇到,所以就

學習elasticsearch(一)linux環境搭建(2)——啟動elasticsearch

-1 一個空格 ctrl+c 意思 報錯 ping通 /tmp 搜索 測試 在啟動訪問es的過程中遇到了各種的奇葩問題。 1.網上各種版本的啟動方式讓人眼花繚亂不知如何啟動。簡單粗暴——到es的bin目錄下直接 執行 ./elasticsearch //顯示啟動,ctr

linux環境搭建lnmp環境

數據庫 pass () mat ttext test ica ket stat 編譯安裝lnmp環境準備軟件:nginx1.10.3+php-5.5.12+mariadb10.0.8(數據庫在此使用的yum安裝)如果需要編譯安裝的可以給我留言,我後續再發布出來! 依賴包均已

linux環境搭建ldap服務器

span alt roc nbsp pass enter apt detail har 首先保證linux正常聯網 yum install openldap-servers -y 拷貝配置文件 cd /usr/share/openldap-servers/ cp slap

大數據學習之Linux環境搭建(導航)

vmw href 。。 人的 com linu 過程 htm next 環境搭建過程網上有挺多,我只是站在巨人的肩膀上。 更多是對自己的搭建環境過程中的一個記錄。 首先是VMware軟件的安裝,沒什麽說的,一直“下一步”就好了,虛擬機下安裝Linux系統也比較簡單,不贅述。

[原創]基於Zynq Linux環境搭建(二)

alt boa per inux class arch can 解壓 arc 在此篇,我們編譯UBOOT 解壓: [#17#17:26:56 FPGADeveloper@ubuntu ~/Zybo_Demo]$tar zxvf *.tar.gz    在

[原創]基於Zynq Linux環境搭建(一)

ans develop sharp ftw load 生效 bubuko hive path 安裝VMWare版本12 Ubuntu版本 12.04.5 64bit 系統安裝完成後,登陸系統,在sotfware中心安裝konsole、gvim、softwa

[原創]基於Zynq Linux環境搭建(三)

linux ubuntu 完成後 light 重啟 dtc defcon man ubun 此篇編譯Kernel 解壓: [#17#17:26:56 FPGADeveloper@ubuntu ~/Zybo_Demo]$tar zxvf *.tar.gz

kafka--linux環境搭建

連接 技術分享 console cati 打開 inf ext sum plain 1.JDK 1.8 2.zookeeper 3.4.8 解壓 3.kafka 配置  在kafka解壓目錄下下有一個config的文件夾,裏面放置的是我們的配置文件   consumer.p

Linux環境搭建 jdk+tomcat+mysql

mmu 配置文件 KS text amp ima mysq cda 服務 安裝jdk(jre也行),tomcat,m‘y‘s‘ql 一、jdk安裝及環境變量配置:我是用 jdk-7u79-linux-x64.tar.gz 安裝的 在linux下安裝上傳下載的工具:#y

Linux環境搭建 | 手把手教你安裝Linux虛擬機

界面 rup 對話 rtu 發行版 所在 兼容性 運維 編輯 前言 作為一名Linux工程師,不管是運維、應用、驅動方向,在工作中肯定會需要Linux環境。想要獲得Linux環境,一個辦法就是將電腦系統直接換成Linux系統,但我們平常用慣了Windows系統,直接切換為L

【安裝】Redis4.0.10在Linux環境搭建

指定 conf 安裝 col style nbsp 0.10 clas fig 1.下載Redis後上傳到指定目錄 2.解壓 tar -zxvf redis-4.0.10.tar.gz 3.進入加壓後的目錄並編譯 cd redis-4.0.10 m

linux環境搭建-tomcat-jdk-jenkins

通過 官網下載 tools.jar www 目錄 -- 文件 tools pps 一、搭建jdk環境1、jdk下載http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.

Linux環境搭建 | 手把手教你如何安裝CentOS7虛擬機

說明 超過 pad 服務器安裝 官網下載 u盤 沒有 linux環境 add centos 下載地址: 可以去官網下載最新版本:https://www.centos.org/download/ 以下針對各個版本的ISO鏡像文件,進行一一說明: CentOS-7.0-

linux entos6 搭建ftp伺服器

最近在學習linux系統,然後想搭一個ftp伺服器,找了好多教程終於搭好了,現在總結一下: 第一步:先保證linux能上網,因為可能會需要下載東西。 點選System eth0連線網路(如果沒有選項的話,建議百度一下liunx怎麼聯網) 聯網之後就是上面這樣的。 第二步:ctrl+a

(一)linux上面搭建rabbitmq伺服器

一、因為工作需要,用於業務解耦,要用到訊息中介軟體,並且選擇了rabbitmq,使用它就需要在linux伺服器上面搭建rabbitmq伺服器,經過網上搜索與實踐,先是在自己的私人伺服器上面搭建成功並且成功訪問,後續在公司測試環境與正式環境上面搭建成功,在多次實踐的過程中總結出搭建過程,並且踩了一些坑

Linux搭建 Git 伺服器後如何新建專案和新增使用者

關於如何在Linux 下搭建 Git 伺服器的問題,大家可以參考這篇文章(https://www.cnblogs.com/dee0912/p/5815267.html)。 我按照上面文章內容操作,確實搭建完成Git伺服器後,但是又出現了一個問題,如何新建專案,並且把參與開發人員加到該專案呢?下面