OpenStack提交程式碼的review流程

weixin_33941350發表於2015-04-01

  本文整理向openstack社群提交程式碼的基本流程,以及社群一些介紹資料。如有轉載,請註明出處!

  先放張圖說明一下OpenStack的code review的大體流程:

  對OpenStack提交程式碼更改的流程主要如下:

  • 配置Git與Gerrit環境
  • 克隆目標專案的程式碼並在新branch上進行更改
  • commit到本地的repo後推送給遠端Gerrit,然後由reviewer給出意見
  • 根據reviewer的修改意見不斷更新patch

  其中OpenStack使用Gerrit作為程式碼review系統,使用Jenkins系統對程式碼進行自動測試,使用tox工具可以在本地進行相同的程式碼測試。

 

基本前提

  1. 建立一個Launchpad賬號(Gerrit使用Launchpad進行SSO)
  2. 登入Gerrit,完成基本配置
  3. 加入OpenStack基金會
  4. 簽署Contributor License Agreement
  5. 安裝 Git 和 git review

  本文所有操作在Ubuntu Server 14.04 LTS上進行

 

配置Git

  首先配置Git命令列工具,便於以後的操作

$ git config --global user.name 'YourName'
$ git config --global user.email example@example.com
$ git config --global gitreview.username YourName

 

   如果需要檢視Git的配置:

$ gir config --list

 

安裝配置Git-Review

  1. git-review工具是一組Git子命令,主要用於和OpenStack的程式碼review系統Gerrit互動,git-reviewGerrit的互動是一組Git命令,在每個git review命令後新增-v選項可以列印所有執行的Git命令。

$ sudo apt-get install git-review

 

   2. 在你要提交程式碼的機器上生成一個SSH key

 $ ssh-keygen –t rsa 

  如果建立RSA金鑰時設定了口令,該口令需要妥善保管,因為以後每一次提交都需要驗證該口令。

  3. 檢視公鑰部分並將其複製到git-review

$ less ~/.ssh/id_rsa.pub

  將公鑰部分的內容新增到git-review即可。

 

在本地克隆程式碼庫

  1. 克隆原始碼
$ git clone https://github.com/openstack/YourTargetProjectName.git

 

  1. 進入到克隆後的目錄
$ cd YourTargetProjectName

 

  1. 建立git review 環境
$ git review -s

This repository is now set up for use with git-review. You can set the default username for future repositories with: 
git config --global --add gitreview.username yourgerritusername

 

  1. 可以在Git中設定Gerrit/Launchpad的使用者名稱,
$ git config --global --add gitreview.username YourName

 

  1. check out master分支,更新遠端並將其pull到本地的master分支
$ git checkout master; git remote update; git pull origin master

 

  6. Launchpadreport 一個新的bug 或者找一個尚未被解決的bug然後將它assign給自己,將bug的狀態改為In progress, OpenStack使用Launchpad記錄Blueprints和報告bugs。

 

  7. 想要fix某個bug,就必須新建一個分支,然後在這個分支裡對原始碼進行修改,例如:

$ git checkout -b fix-bug-#123456

 

  1. 上述命令建立並切換到新分支“fix-bug-#123456”,接下來所有的本地工作在這個分支裡進行,直到所有fixation都完成後再commit
$ git commit -a

 

  提交時會要求輸入commit messagecommit message可以有下面的欄位:

  Implements: blueprint BLUEPRINT

  Closes-Bug: #123456

  Partial-Bug: #123456

  Related-Bug: #123456

  通過這些欄位來標識自己工作相關的bug或者blueprint,一旦註明,CI系統會自動將你的commit和相同IDbug對應起來。

 

  1. 上面的命令提交到本地repo後接下來就是pushGerrit了。
$ git review -v

 

   Gerrit是OpenStack遠端Git倉庫的一道大門,所有的submission都要在這裡經過review後才能被mergemaster分支中,因此之前的工作一定不能在master分支進行,這樣會產生一個merge commitGerrit預設是不接受merge commit的。

   如果提交成功,Gerrit將返回一個顯示你此次提交內容的URL,開啟它就可以檢視commit以及reviewer的評價了:http://review.openstack.org/nnnnnn

 

如果需要修改commit怎麼辦?

  此時需要到http://review.openstack.org上查詢自己的patch記錄,然後記下這一個patchreview number,就是review.openstack.org對應patch頁面的後幾位數字:https://review.openstack.org/#/c/nnnnnn/

$ cd ourTargetProjectName    #切換到專案原始碼目錄
$ git review -d nnnnnn        #把patch給check out,然後就可以編輯了

 

   接著根據reviewer們的意見重新編輯patch,然後提交

$ git commit -a --amend    #在本地commit
$ git review

 

  對上一次的commit進行了修改,或者commit message沒有寫標準,都可以重新提交commit,但是一定要切換到自己上次提交commit的分支執行上面的命令。如果希望檢視完整的git命令流,可以在git review命令後新增 -v選項。

2015-04-01 12:24:50.927128 Running: git log --color=never --oneline HEAD^1..HEAD
2015-04-01 12:24:50.930189 Running: git remote
2015-04-01 12:24:50.932609 Running: git branch -a --color=never
2015-04-01 12:24:50.935309 Running: git rev-parse --show-toplevel --git-dir
2015-04-01 12:24:50.937601 Running: git remote update gerrit
Fetching gerrit
2015-04-01 12:25:04.406800 Running: git rebase -i remotes/gerrit/master
2015-04-01 12:25:04.507110 Running: git reset --hard ORIG_HEAD
2015-04-01 12:25:04.514952 Running: git config --get color.ui
2015-04-01 12:25:04.517383 Running: git log --color=always --decorate --oneline HEAD --not remotes/gerrit/master --
2015-04-01 12:25:04.523654 Running: git branch --color=never
2015-04-01 12:25:04.526527 Running: git log HEAD^1..HEAD
Using local branch name "fix-bug-123456" for the topic of the change submitted
2015-04-01 12:25:04.530764 Running: git push gerrit HEAD:refs/publish/master/fix-bug-123456
remote: Processing changes: updated: 1, refs: 1, done
remote: (W) 81a1233: commit subject >65 characters; use shorter first paragraph
remote: (W) 81a1233: no files changed, message updated
To ssh://YourName@review.openstack.org:29418/openstack/TargetProject.git
 * [new branch]      HEAD -> refs/publish/master/fix-bug-123456
2015-04-01 12:25:11.126958 Running: git rev-parse --show-toplevel --git-dir

 

一些Troubleshoot

  如果配置GitGerrit的過程中遇到了問題,https://wiki.openstack.org/wiki/Documentation/HowTo/FirstTimers的最後提供了常見問題的troubleshoot,可以參考。

 

OpenStack的Commit Message風格,

  這裡對於每一次提交commit時commit message的風格有一定的介紹:https://wiki.openstack.org/wiki/GitCommitMessages

 

OpenStack的bug分流,

  這裡有OpenStack對不同程度的bug進行分流的介紹:https://wiki.openstack.org/wiki/BugTriage

 

OpenStack的bug分類,

  OpneStack根據狀態、重要程度等指標對Bug進行分類:https://wiki.openstack.org/wiki/Bugs

 

OpenStack的blueprints,

  WIKI介紹:https://wiki.openstack.org/wiki/Blueprints

  Launchpad上的OpenStack專案首頁:https://blueprints.launchpad.net/openstack

 

OpenStack所有專案的Spec,

  specifications記錄了每個專案的設計規範,這裡是所有專案的Specs:http://specs.openstack.org/

 

OpenStack的發行週期,

  這裡是關於發行週期的一些介紹,https://wiki.openstack.org/wiki/ReleaseCycle

  所有OpenStack專案的分支tar包:http://tarballs.openstack.org/

 

OpenStack程式碼分支模型,

  這裡是程式碼分支模型的介紹,https://wiki.openstack.org/wiki/Branch_Model

相關文章