2016年9月11日 星期日

如何安裝一個最簡單的 gerrit code review server

http://mqjing.blogspot.com/2016/09/gerrit-code-review-server.html

Install gerrit using Docker
Googoe doc: This Document

快速安裝


VirtualBox 以及 Vagrant 版本

cd lab-gerrit
. ./01_up.sh

直接安裝在自己機器的版本

cd lab-gerrit
. ./normal_install.sh



Local
目錄


容易卡住的點

  1. Docker 啟動時, 要注意事項

    • Docker 要有 WEBURL, 否則當你使用 OpenID 登入時, 將無法登入.

      • Ex: sudo docker run -d -p 8080:8080 -p 29418:29418 -e WEBURL=http://127.0.0.1:8080 openfrontier/gerrit
  2. RSA 連線時, 要注意的事項

    • 不只是 Gerrit User RSA 的部分要貼 public key ~/.ssh/id_rsa.pub
    • 在 client, 也要把 private 加入. 否則會造成 permission design.
      • Ex: [client] ssh-add ~/.ssh/id_rsa
    • 測試時, 要用  ssh -p 29418 {gerrit-user-name}@{gerrit-address}
      • 不是用 ssh -p 29418 ssh://{gerrit-user-name}@{gerrit-address}
  3. Clone Project 時, 要注意的事項

    • 拉 code 時, 要加 29418, 否則一樣會遇到 permission design
      • Ex: git clone ssh://yahoo_admin@127.0.0.1:29418/myproject
    • 用來 clone 與 ssh 測試的 username, 是用  Gerrit username 拉 code
      • 與 RSA comment 無關
      • 與 cient machine login user 無關.
  4. Git Review 時, 要注意的事項

    • 與你的 client git user.email 必須要跟你的 Gerrit 上, 對應 Gerrit user 的 email 一樣. 否則你無法 git review, 會出現下面錯誤.
    • 解法: 就是從新設定 user.email 並請修改你的 commit, 再 git review 一次
git config --global user.email {Gerrit 上登記的那個 email}
git commit --amend    # 修正含有錯誤 email 的 commit
git review

Ex:
git config user.email mqjing.eed86g@g2.nctu.edu.tw
git commit --amend
git review


Install Package

Setup Locale

function fun_setup_locale(){
   # Step 1: Create locale files for en_US, en_US.UTF-8, zh_TW and zh_TW.UTF-8
   sudo locale-gen en_US en_US.UTF-8 zh_TW zh_TW.UTF-8

   # Step 2: Reconfigures packages after they have already been installed
   sudo dpkg-reconfigure locales
}

fun_setup_locale

Install Docker

#!/bin/bash
# run this script as a root

function fun_install_docker(){
   # for https transport
   [ -e /usr/lib/apt/methods/https ] || {
     sudo apt-get -y update
     sudo apt-get -y install apt-transport-https
   }

   # for apt-key
   sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys 36A1D7869245C8950F966E92D8576A8BA88D21E9

   # update the apt-repository
   sh -c "echo deb https://get.docker.io/ubuntu docker main\
> /etc/apt/sources.list.d/docker.list"
   sudo apt-get -y update

   # install the docker
   sudo apt-get -y install lxc-docker
}

fun_install_docker

Install git review

sudo apt-get install git-review

Install and Start Gerrit

For Test Only

sudo docker run -d -p 8080:8080 -p 29418:29418 -e AUTH_TYPE=development_become_any_account -e WEBURL=${Your-Gerrit_Address:8080}  openfrontier/gerrit

ex:
sudo docker run -d -p 8080:8080 -p 29418:29418 -e AUTH_TYPE=development_become_any_account -e WEBURL=http://127.0.0.1:8080 openfrontier/gerrit

Verification

Open your browser to http://{gerrit-server-add}:8080

Ex:
firefox http://127.0.0.1:8080
選擇 Administrator: 此時這個登入的 ID 就會是 Administrator
你可以使用 Gerrit Administrator Account: admin 來 clone code.

處理 RSA 連線的問題

# 貼上你的 public key 到 gerrit server 上 (不做這個, ssh 會拒絕連線)
[client] ssh-keygen
[client] cat ~/.ssh/id_rsa.pub   # 把這個結果貼到, Gerrit SSH 欄位

# 加入自己的 private key 到 自己的 client 機器上 (不做這個, ssh 會拒絕連線)
[client] ssh-add {private-key}
Ex:
[client] ssh-add ~/.ssh/id_rsa

# test ssh connection
[client] ssh -p 29418 ${Gerrit-Account}@GerritIP
Ex:
[client] ssh -p 29418 admin@127.0.0.1
# clone
[client] git cline ssh://admin@127.0.0.1:8080/{Your-Project_Name}
Ex:
[client] git cline ssh://admin@127.0.0.1:8080/test

push code

sudo apt-get install git-review
git remote rename origin gerrit
git add 你新增的程式檔
git commit -m "message"
git review

Normal Usage

sudo docker run -d -p 8080:8080 -p 29418:29418 -e WEBURL=http:{你的 gerrit 位址}:8080 openfrontier/gerrit
Ex
Amazon 的例子
sudo docker run -d -p 8080:8080 -p 29418:29418 -e WEBURL=http://ec2-54-254-186-117.ap-southeast-1.compute.amazonaws.com:8080 openfrontier/gerrit

Local 測試的例子
sudo docker run -d -p 8080:8080 -p 29418:29418 -e WEBURL=http://127.0.0.1:8080 openfrontier/gerrit


設定 Gerrit Administrator user

第一個登入 user 就是 admin.
作法:
[Register] -> 選擇 Yahoo 帳號當作我們的 Admin




Create a Gerrit Project

# Set Access Right

輸入 Gerrit Username (Select a unique username 那個) 以及存取 key


[點選 Anonymous Coward (10000000)] -> Settings
設定 Username: yahoo_admin  (這個 name 很重要, 將來就是用這個 name clone)


設定 RSA Key

Step 1: 設定 Gerrit 上的 Public key

[client] ssh-keygen
[client] cat ~/.ssh/id_rsa.pub   # 把這個結果貼到, Gerrit SSH 欄位



Step 2: 設定 Client 端, 把 private key 加進來

# 加入自己的 private key 到 自己的 client 機器上 (不做這個, ssh 會拒絕連線)
[client] ssh-add {private-key}
Ex:
[client] ssh-add ~/.ssh/id_rsa


測試 ssh 連線

[client] ssh -p 29418 ${Gerrit-Account}@GerritIP
Ex:
# (注意: 沒有 ssh. 下面這樣是錯的 ssh://yahoo_admin@127.0.0.1)
[client] ssh -p 29418 yahoo_admin@127.0.0.1   

# Clone Your Project

Step 1: Clone project

[client] git cline ssh://{Your-Gerrit-Name}@127.0.0.1:29418/{Your-Project_Name}
Ex:
# 注意: 要加 29418, 否則你會遇到 permission denied
[client] git cline ssh://yahoo_admin@127.0.0.1:29418/test

Step 2: 設定本機的  remote branch 從 origin 到 gerrit

git remote rename origin gerrit
# 這是搭配 git review 指令用的, 不這麼做, 你在執行 git review 時, 會出現下面的錯誤

Step 3: 確定 git user.email

確定你的 git email 與 Gerrit user 一樣  (若 gerrit user 是 admiin, 則沒有 對應 gmail commit, 也可以 commit. 但一般 user 則會檢查 user.email). 否則你在 git review 時, 系統會告訴你 email 不合

git config -l   # 檢查 git user.email
如果不一樣,
git config --global user.email {Gerrit 上登記的那個 email}
ex:
git config --global user.email mqjing@gmail.com

# 若已經 commit 了, 發現 email 不合, 怎麼辦 ?
# 解法:

git config --global user.email mqjing@gmail.com
git commit --amend   # 修正上一次裡面有錯的 email commit
git review

Step 4: 開始編修你的檔案


Step 5:  push code

git add 你新增的程式檔
git pull   # sync 最新的 code, 以免屆時無法上 code
git commit -m "message"
git review
Ex:

Verification

因為剛剛是用 yahoo_admiin 上的 code, 所以在 gerrit 裡面, 你會看到一筆 commit

建立另外一個 user

這次用 Ubuntu One user 為例
Step 1: 選擇 [Sign in with a Launchpad ID]
Step 2: 輸入必要 Ubuntu One 驗證資訊
Ex:

設定 Ubuntu One User 在 Gerrit 的 username

Step 1: 點選 [User] -> [Settings]
Step 2: 設定 [Username]


設定 RSA Key

Step 1: 貼上 RSA key 到 [SSH Public Keys]
Step 2: 在 client 加上 private key
Command
ssh-add ~/.ssh/id_rsa

Assign Reviewer

Step 1: 點選 [commit] -> [Add...]

Step 2: 指定 兩位 Reviewer

  1. 選擇 另一個 Gerrit User

Ex:

(b) 再加一位 Reivwer

Code Review

  1. Check Admin Access Right

預設的情況下, yahoo_admin 可以 approve 整個 commit (see 下圖藍色方框)

(2) Check Registered User Access Right

另一位 普通 Gerrit user, 預設只能 review 其他登入後, 就會發現有一筆 commit 等著他 reivew
[All] ->[Open]

(3) Code Review

選擇上方 reply, 進行 Code Reivew

設定 Access Control

Purpose: 讓 Registered Use 也可以 Submit

Step 1: Check the Project's Access List

[Projects] -> [Access]: 點選 [Edit]

Step 2: Adjust the [Label Code-Review]

將 Registered Users Range 從 +1 調成 +2, 可以讓一般 Registered Users,  也可以 submit

Verification


Reference