簡單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倉庫。