1. 程式人生 > >簡單GerRit伺服器的搭建(Gitlab+GerRit+Jenkins)

簡單GerRit伺服器的搭建(Gitlab+GerRit+Jenkins)

程式碼稽核作為一個開源的程式碼稽核工具,已經被許多公司投入使用,GerRit自帶一個程式碼儲存倉庫,但是無法做到程式碼庫版本管理。我們一般使用GerRit作為程式碼稽核工具,程式碼版本使用Gitlab或Github。在程式碼提交到GerRit倉庫後,我們使用Replication外掛同步程式碼。下面就是簡單GerRit伺服器的搭建和部分許可權管理介紹。

GerRit有三種賬號管理機制,LDAP鑑權,HTTP,development_become_any_account,第三種方式管理使用者最為簡單,第一個登入的賬號將成為管理員賬號。本次安裝採用HTTP方式。

本次安裝採用Docker安裝方式:

docker run --name gerrit1 -p 9000:8080 -p 29418:29418 -v /gerrit1/review_site:/var/gerrit/review_site --restart=always -e AUTH_TYPE=HTTP  -e USER_NAME=root -e [email protected] -e SMTP_SERVER=smtp.aliyun.com -e SMTP_SERVER_PORT=465 -e SMTP_ENCRYPTION=ssl -e [email protected] -e SMTP_CONNECT_TIMEOUT=30sec -e SMTP_FROM=USER -e SMTP_PASS=******* openfrontier/gerrit

命令包括埠對映,邏輯卷對映來保證資料持久化,配置SMTP服務。

採用HTTP方式管理賬號需要設定nginx代理。

nginx代理採用Docker安裝:

docker run -p 2001:80 -p 8081:8081 --name nginx -v /nginx/www/html:/www/html -v /nginx/default.conf:/etc/nginx/conf.d/default.conf -v /nginx/logs:/wwwlogs -v /nginx/DockerFile/nginx/conf/h    tpasswd/gerrit.passwd:/etc/nginx/conf.d/gerrit.passwd nginx

邏輯卷對映包括網頁資訊,nginx配置,nginx日誌資訊,http代理使用者資訊。

修改nginx配置資訊如下:

server {
#config agency listen port
      listen port;
#config agency url
      server_name IP;
#^~ / is a way to express that url's outset is '/', just like 47.94.201.186/*
      location ^~ / {
            auth_basic "Restricted";
            auth_basic_user_file /etc/nginx/conf.d/gerrit.passwd;
        proxy_pass        http://IP:port;
        proxy_set_header  X-Forwarded-For $remote_addr;
        proxy_set_header  Host $host;
      }
    }

使用apache生成使用者名稱和密碼:

# pwd
/nginx/DockerFile/nginx/conf/htpasswd 
# htpasswd  gerrit.passwd jiche
New password:
Re-type new password:
Adding password for user jiche

之後在賬戶下·儲存ssh公鑰,便於以後使用。GerRit所使用的ssh埠是29418。我們可以通過以下方式驗證是否成功。

#ssh -T -p 29418 [email protected]**.**.***.***

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

Hi root, 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 在通過網頁進入頁面之後,我們可以設定賬戶郵箱,組和專案。

我們需要在程式碼檔案中加入.gitreview檔案,這樣才能使用git review命令去提交程式碼到GerRit程式碼庫。git clone程式碼之後加入以下程式碼:

$ cat .gitreview
[gerrit]
host=47.94.201.186
port=29418
project=maven-testng-gerrit-gitlab.git

這時候我們需要管理員許可權去push 程式碼,命令如下:

# git push origin master 

如果在設定公鑰之後任然不能clone程式碼,請設定ssh代理,如下:

#eval "$(ssh-agent -s)" 
#$ssh-add

許可權設定如下:

新建小組,同時使用小組對專案進行許可權管理,包括程式碼稽核機制,rebase等。如果在提交程式碼時出現郵箱尚未設定錯誤,請設定郵箱或者在使用者許可權中加入Forge Author Identity and Forge Committer Identity 這兩個許可權。

下面是在稽核完成之後,我們需要同步程式碼到Gitlab,這時候我們需要安裝Replication外掛。

# find . -name "gerrit.war"
./review_site/bin/gerrit.war
./review_site/bin/gerrit_site/bin/gerrit.war
[[email protected] gerrit1]# cd review_site/bin/
[[email protected] bin]# pwd
/gerrit1/review_site/bin 
# java -jar gerrit.war init -d gerrit_site --batch --install-plugin replication
Initialized /gerrit1/review_site/bin/gerrit_site
# cp replication.jar /gerrit1/review_site/plugins/.

之後我們可以修改replication的配置檔案來進行同步配置:

[remote "maven-testng-gerrit-gitlab"]
        projects = maven-testng-gerrit-gitlab
        url = http://user:[email protected]**.**.***.***:2018/dev-group/maven-testng-gerrit-gitlab.git
        push = +refs/heads/*:refs/heads/*
        push = +refs/tags/*:refs/tags/*
        push = +refs/changes/*:refs/changes/*
        threads = 3
        rescheduleDelay = 15

url 部分可以使用HTTP認證,也可以使用SSH認證,我在配置的時候出現了reject ip錯誤,提前設定不需要確認伺服器公鑰放棄安全或者是提前將公鑰加入到known檔案也不行,所以只能使用HTTP認證。

重新匯入replication外掛如下:

# ssh -p 29418 [email protected] gerrit plugin reload replication
# ssh -p 29418 [email protected] replication start --all

檢視Gitlab或者是日誌來驗證配置是否成功。如果配置成功,那麼我們Submit將程式碼合併到相應分支時就會將程式碼同步到Gitlab倉庫。