aiven'blog

openstack社区贡献方法

本人从2012年开始一直在从事openstack相关的开发工作,但大多时候都是基于公司的需求在openstack上做二次开发。一直也没有时间贡献社区,最近想把一些修改提交到社区上,所以也摸索了社区的贡献方式,现在整理如下。

贡献前期准备

注册OpenID

为社区做贡献之前先要注册所需要的账号,这个账号可以作为gerritlaunchpad的单点登录账号。点击这里注册

登录Gerrit

使用刚创建的账号登录Gerrit并设置唯一用户名,点击这里登录。Gerrit是代码review和commit管理的工具,在做贡献时要经常使用,可以通过该工具查看提交的贡献是否被review,是否通过单元测试,是否已经合并,等等。

上传SSH key

在刚才的Gerrit中设置上传代码的SSH key,这里可以使用keygen进行生成,这里与github或者gitlab设置的方法一样,具体就不细说了。点击这里上传

配置本地git环境

向社区提交代码肯定少不了git的使用和安装,社区的代码都是托管在github上,具体地址点击这里

下面设置用户名和邮箱地址,这里与前面注册时相同即可。

1
2
git config --global user.name "Firstname Lastname"
git config --global user.email "your_email@youremail.com"

查看是否设置成功

1
git config --list

安装git review工具

git review工具是用来提交代码的,这里我们不会使用git push进行提交,git review可以将代码展现到Gerrit中,并让其他贡献者进行代码的review

可以使用pip进行安装

1
pip install git-review

新项目贡献

clone项目

1
git clone https://git.openstack.org/openstack/<projectname>.git

进入项目目录,并初始化GerritGerrit会在提交代码后,自动加上Change-id,这个id是每一个提交的唯一ID,只要id相同,则在任何地方提交,都不会出现问题。

1
2
cd <projectname>
git review -s

配置git账号,这里yourgerritusername必须使用前面在gerrit上设置的用户名。

1
git config --global gitreview.username yourgerritusername

代码提交流程

贡献流程

上图是社区代码的贡献流程,前面我们已经讲了前期准备以及clone代码等。接下来我们结合上图讲解代码的提交流程。

社区代码贡献一般分为两类,一种是bug的修复,一种是blueprint。无论是哪种的提交,都是有很多共同点的。

  • 首先都需要基于master创建独立的分支
  • 本地master必须保证和上游的最新状态同步
  • 同步之后可以使用rebase更新对应的分支
  • 提交信息里需要有对应的bug id或者blueprint的名称

社区bug修复

要想知道目前组件有哪些bug需要修复,可在每个组件对应的launchpadbug管理页面查看,比如novabug list,可以在上面找一些目前还没有人修复的bug进行修复。

当然也可以自己提交bug,并且自己修复。自己创建的bug可以assign给自己,并且修改状态为开始。当然一般需要组件的管理员确认该bug是否存在。

对于贡献社区的新手来说,修改bug是比较好的选择,可以通过修复简单的bug来熟悉社区的贡献流程。

在bug修复时,首先需要创建bug对应的分支,一般都是使用bug的id作为分支名称,下面以1111111为id举例:

1
2
git branch Bug1111111
git checkout Bug1111111

修改完代码之后进行提交

1
git commit -am "Fix some bug"

此时,Gerrit会自动给该commit添加change-id。如果后续有修复,则需要使用--amend追加到之前的commit中。

1
git commit --amend

上面的命令会打开文件编辑,在里面添加bug描述信息和bug-id信息:

1
2
3
4
5
6
Fix som bug
This bug can affect some thing.
Closes-Bug: #1111111
Change-id: Idxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

修改之后没有问题了,可以进行提交:

1
git review

社区blueprint提交

blueprint对应一个独立的新功能,类似我们平时产品的一个独立需求。在向社区提交独立功能之前需要先提交一个blueprint作为记录。以nova为例,查看目前nova存在的blueprint list

一般提交完blueprint之后,需要提交spec文件,每个组件都有自己的spec项目。spec文件里主要是描述bp的功能说明,解决了什么问题,使用场景,加了什么参数,具有什么影响,在什么版本发布等等内容。

与bug修复类似,首先需要创建bp对应的分支,一般都是使用bp的名称作为分支:

1
2
git branch bp-cpu-qos
git checkout bp-cpu-qos

修改完代码之后进行提交

1
git commit -am "Support some function patch 1"

此时,Gerrit会自动给该commit添加change-id。如果后续有修复,则需要使用--amend追加到之前的commit中。

1
git commit --amend

上面的命令会打开文件编辑,在里面添加bp描述信息和bp的信息:

1
2
3
4
5
6
Support some function patch 1
Description some detail for this commits.
Implement: blueprint cpu-qos
Change-id: Idxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

bp一般可以根据代码逻辑或者层次,提交多个commit,一般很多组件都有多个driver,所以可以以此作为提交依据,一个driver对应一个提交,这样的好处是review的时候逻辑会比较清晰。

修改之后没有问题了,可以进行提交:

1
git review

至此向社区的代码提交就完成了,根据之前图上的流程可以看到,接下来就是等待其他贡献者的review了。如果reviewer提出问题需要及时回答,如果代码确实存在问题需要重新修改并提交。直到没有问题之后,core review会将code-review +2,此时review算是通过了。之后就是workflow,core会将workflow +1,然后没多久jenkins就会合并该代码。

需要注意的是,在修改代码的时候,要保证master与上游保持同步,并且及时rebase到当前分支中。这样就合并的时候就不会有问题。

贡献统计查看

openstack使用stackalytics统计贡献情况,可以在这上面查看用户或者企业对某些组件的贡献情况。这也是官方比较权威的贡献数据查询入口。

那么如何让自己的贡献出现在这里的统计里呢?其实非常简单,只需要将自己的用户信息提交到stackalytics项目中即可。具体的提交流程与上面讲的一样。

clone项目

1
2
3
git clone https://github.com/openstack/stackalytics.git
cd stackalytics
vi etc/default_data.json

添加自己的信息

1
2
3
4
5
6
7
8
9
10
11
12
{
"launchpad_id": "youropenid",
"gerrit_id": "yourgerritusername",
"companies": [
{
"company_name": "your company name",
"end_date": null
}
],
"user_name": "your name",
"emails": ["your email"]
},

这里需要注意,launchpad_id是要字典排序的,否则jenkins那里过不去。所以请先找到自己名字应该插入的地方。

等待该commit被合并之后,就可以在stackalytics上查到自己的名字了,这里是我的贡献查询

参考链接

openstack官方代码贡献流程指导

热评文章