使用Container構築自己的OpenStack開發環境

OpenStack是一個開源的雲計算管理平臺, 當前最新的版本是Stein. 當前OpenStack整體已經非常的穩定和成熟了。但是作爲開源軟件,在使用的過程當中難免的會遇到一些Bug,而瞭解OpenStack最好的方式就是在使用的過程當中遇到Bug後加以分析和解決。並且最好是能夠把自己的Fix Commit到社區,使自己也慢慢的參與到OpenStack的開發中去。我在剛接觸OpenStack,提交第一個patch的時候也是走了不少彎路的,所以本文主要講述瞭如何構築自己的OpenStack開發環境,如何向社區提交代碼。

前提條件

  1. 一臺裝好docker的服務器,如何安裝?
  2. 申請一個自己的Ubuntu帳號,GerritLaunchpad需要用到
    • Gerrit用於Review提交的代碼
    • Launchpad用於Track Bugs

創建Container

以CentOS爲例

# 拉取docker image
docker pull ubuntu
# 啓動Container
docker run -it -d --network host --name openstack_deloyment ubuntu

跑完上述命令,我們會直接進入到容器中。這個時候我們就可以直接在容器裏面安裝我們需要用到的軟件包了。

安裝依賴包

# 在容器裏面
apt-get update
apt-get install iputils-ping
apt-get install net-tools
apt-get install git
apt-get install git-review
apt-get install libbz2-dev

配置Git

git config --global user.email <Email>
git config --global user.name <Name>
git config --global --add gitreview.username <自己Gerrit帳號的Profile裏的Username>

配置公鑰

由於向Gerrit提交Review的時候需要通過密鑰進行認證,所以我們需要在本地創建一個密鑰對,並且將公鑰上傳到Gerrit。

# 生成ssh密鑰對,執行ssh-keygen後一路回車
ssh-keygen
# 在~/.ssh可以找到自己生成的密鑰對
ls ~/.ssh
> id_rsa  id_rsa.pub  known_hosts

將公鑰id_rsa.pub的內容通過Add Key添加到Gerrit。
上傳公鑰

構建Python測試環境

由於現在Python有Python2和Python3兩個版本,在提交代碼的時候OpenStack的各個組件都會針對Python2和Python3分別進行Unit Test. 由於上傳代碼後Gerrit那邊的Zuul check比較緩慢。所以我們可以在自己本地構建Unit Test的測試環境,這樣就可以更高效的進行開發了。

# OpenStack的Unit Test是基於Tox的
apt-get install tox

apt-get install vim
apt-get install wget
# 分別下載2.7和3.5兩個版本的Python代碼
wget https://www.python.org/ftp/python/3.5.6/Python-3.5.6.tgz
wget https://www.python.org/ftp/python/2.7.15/Python-2.7.15.tgz

# 安裝編譯Python代碼需要的依賴包
apt-get install gcc
apt-get install g++
apt-get install make
# 安裝libssl-dev,不然編譯出來的python不支持ssl
apt-get install libssl-dev

# 編譯Python3
tar zxf Python-3.5.6.tgz 
cd Python-3.5.6
./configure --prefix=$HOME/.python3.5
make install

# 編譯Python2
tar zxf Python-2.7.15.tgz
cd Python-2.7.15
./configure --prefix=$HOME/.python2.7
make install

# 創建Python2運行時環境
virtualenv py27 -p .python2.7/bin/python2.7
# 創建Python3運行時環境
virtualenv py35 -p .python3.5/bin/python3.5

# 這個時候我們就可以非常簡單的在python2和python3之間切換了
# 並且由於我們是跑在Container裏面,所以和底層的操作系統也是沒有關係的

# 切換成Python2運行時環境
. /root/py27/bin/activate

# 切換成Python3運行時環境
. /root/py35/bin/activate

提交代碼到Gerrit

首先我們要找一個我們想要參與的Project,然後把它的源碼通過Git下載下來。
下載源碼

git clone ssh://[email protected]:29418/openstack/nova
cd nova
git checkout -b TOPIC-BRANCH # Ex: fix_bug_11111, 11111可以是這個bug在launchpad裏的bug編號
# 修改完後
git commit -a
# 添加Commit Message,之後通過git review提交Review
# Commit Message怎麼寫可以參考:https://docs.openstack.org/infra/manual/developers.html
git review

# 如果有人在Gerrit上留了Comment,需要再次修改代碼,則修改完成後通過下述命令更新需要Review的代碼
git commit -a --amend
git review

# 如果是backport已經提交到master的代碼到某一個branch,譬如說要backport到Queens Release
git checkout -t  origin/stable/queens
git cherry-pick -x 4e627004f6a21bfe248d82a32818faabf1834c06

Unit Test

每次改完代碼後,在提交代碼之前我們可以跑一下Unit Test,這樣可以更快的發現問題。

cd nova
# 修改完代碼後
# 針對Python2跑Unit Test
. /root/py27/bin/activate
tox -e py27

# 針對Python3跑Unit Test
. /root/py35/bin/activate
tox -e py35
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章