本文整理向openstack社群提交程式碼的基本流程,以及社群一些介紹資料。如有轉載,請註明出處!
先放張圖說明一下OpenStack的code review的大體流程:
對OpenStack提交程式碼更改的流程主要如下:
- 配置Git與Gerrit環境
- 克隆目標專案的程式碼並在新branch上進行更改
- commit到本地的repo後推送給遠端Gerrit,然後由reviewer給出意見
- 根據reviewer的修改意見不斷更新patch
其中OpenStack使用Gerrit作為程式碼review系統,使用Jenkins系統對程式碼進行自動測試,使用tox工具可以在本地進行相同的程式碼測試。
基本前提
- 建立一個Launchpad賬號(Gerrit使用Launchpad進行SSO)
- 登入Gerrit,完成基本配置
- 加入OpenStack基金會
- 簽署Contributor License Agreement
- 安裝 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-review和Gerrit的互動是一組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即可。
在本地克隆程式碼庫
- 克隆原始碼
$ git clone https://github.com/openstack/YourTargetProjectName.git
- 進入到克隆後的目錄
$ cd YourTargetProjectName
- 建立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
- 可以在Git中設定Gerrit/Launchpad的使用者名稱,
$ git config --global --add gitreview.username YourName
- check out 到master分支,更新遠端並將其pull到本地的master分支
$ git checkout master; git remote update; git pull origin master
6. 在Launchpad上report 一個新的bug, 或者找一個尚未被解決的bug然後將它assign給自己,將bug的狀態改為In progress, OpenStack使用Launchpad記錄Blueprints和報告bugs。
7. 想要fix某個bug,就必須新建一個分支,然後在這個分支裡對原始碼進行修改,例如:
$ git checkout -b fix-bug-#123456
- 上述命令建立並切換到新分支“fix-bug-#123456”,接下來所有的本地工作在這個分支裡進行,直到所有fixation都完成後再commit,
$ git commit -a
提交時會要求輸入commit message,commit message可以有下面的欄位:
Implements: blueprint BLUEPRINT
Closes-Bug: #123456
Partial-Bug: #123456
Related-Bug: #123456
通過這些欄位來標識自己工作相關的bug或者blueprint,一旦註明,CI系統會自動將你的commit和相同ID的bug對應起來。
- 上面的命令提交到本地repo後接下來就是push到Gerrit了。
$ git review -v
Gerrit是OpenStack遠端Git倉庫的一道大門,所有的submission都要在這裡經過review後才能被merge到master分支中,因此之前的工作一定不能在master分支進行,這樣會產生一個merge commit,Gerrit預設是不接受merge commit的。
如果提交成功,Gerrit將返回一個顯示你此次提交內容的URL,開啟它就可以檢視commit以及reviewer的評價了:http://review.openstack.org/nnnnnn
如果需要修改commit怎麼辦?
此時需要到http://review.openstack.org上查詢自己的patch記錄,然後記下這一個patch的review 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,
如果配置Git或Gerrit的過程中遇到了問題,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