51学通信论坛2017新版

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 2045|回复: 0
打印 上一主题 下一主题

如何向ONOS社区贡献代码

[复制链接]

 成长值: 15613

  • TA的每日心情
    开心
    2022-7-17 17:50
  • 2444

    主题

    2544

    帖子

    7万

    积分

    管理员

    Rank: 9Rank: 9Rank: 9

    积分
    74104
    跳转到指定楼层
    楼主
    发表于 2017-9-17 13:08:29 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
    ONOS是业界首个面向运营商业务场景的开源SDN控制器平台,主要面向服务提供商和企业骨干网。由于ONOS是完全开源的项目且面向全球的开发者开放,对于项目的管理有一整套的工具和流程,这也给想为社区贡献代码的同学带来一定的学习成本,笔者所在的实验室BUPT FNL在2015年成为ONOS在国内的第一个高校成员,因而有幸参与ONOS相关的研究与开发工作,本文是我根据自己一次成功提交代码的经历为大家梳理出来的详细步骤,希望能够为大家参与社区的代码开发提供帮助。


    众所周知,ONOS的代码管理是一个完整的CI系统(Continuous integration持续集成)。使用Gerrit来做代码审核和Git管理,使用Jenkins来做代码构建和测试,使用Github来做仓库的镜像存储。
    Jenkins是一个进行代码构建、测试、部署的自动化工具,在这里主要用于每次向Gerrit进行一次submit后,自动触发一次ONOS代码构建和测试,就像我们在本地修改完代码以后尝试mvn clean install一样,只不过在Jenkins中可以写一些脚本去强化这个过程。
    关于CI系统的详细内容不是本文的重点,大家可以Google之。
    在Github中,我们如果想贡献代码,需要以下几步:
    A.Fork
    B.Modify
    C.Pull request
    D.Code review
    E.Merge
    类似地,Gerrit则是:
    C.Submit
    D.Module-Owner’s review
    E.Amend
    F.Jenkins’s approval
    G.Module-Owner’s approval
    H.Merge
    那我们具体需要做些什么呢,下面以笔者的一次成功的代码贡献经历为例,为大家梳理一下步骤:


    0.Register
    在官网onosproject.org链接[http://onosproject.org/register/]上注册一个ONOS账号。
    在Gerrit上的提交是自动与Github同步的,按照ONOS的说法,Github只是作为一个镜像,仅供Clone,不接受PullRequest。
    注:同步到Github后,会显示为我们个人Github账号的一次commit信息。笔者暂时不知道两边的账号是如何匹配对应上的,暂且让注册的用户名和邮箱跟Github账号的一致吧。
    1.Gitclone
    下载onos的源码:


    2.Git checkout
    创建一个新的分支,在新分支上做代码修改,相当于fork:
    [代码块]
    Shell
    $ git checkout –b Improve-fwd-cfg-loading
    3.Make changes to the code
    使用各种IDE工具修改代码,注意一定要符合ONOS的代码风格要求,即CheckStyle.
    修改和调试完后,使用mvncleaninstall尝试完整构建一次ONOS,显示全部SUCCESS以后,再使用mvn clean做一次清理,只留下源码,删去构建出的target内容
    4.Sync the branch with updated master
    在我们修改代码的时候,ONOS源码也在不断更新之中,我们在提交自己的代码之前,首先要让本地的ONOS源码与仓库里的保持一致,也即同步master分支上的所有newcommits. 如果有mergeconflict,则需要我们做出相应修正。
    $ git checkout master
    $ git pull --ff-only origin master
    $ git checkout Improve-fwd-cfg-loading
    $ git rebase -i master
    5.Submit our contribution
    我们提交上去的分支,在正式被Merge之前,要经过诸位代码审核者Reviewers的评论comment、许可确认Code-Review+1/-1,并且我们还要根据他们给出的修改意见去修正amend代码。 每一次修正和提交,都被记录成一次Patch Set,并且每次都需要经过Jenkins去完整地构建和测试代码,只有当它给出了Verified+1的结果,代码的审核流程才会继续下去。
    提交我们的修改,这就相当于Github的pullrequest:
    [代码块]
    注:需要gitreview这个命令,这不是git标配,我们可从网上下载安装文件,也可通过pip安装
    然后即可看到我们的分支类似地出现在此处,ALL -> Open


    点进我们提交的分支,如下是Jenkins构建的结果,这也将在上图的右下角“V”(Verified)中标示。


    6.Reply reviewer’s comment
    在我们提交之后,Reviewer会对我们的代码提出问题、作出评论,我们可以进入Patch Set的评论页面,进行回复,如下图:



    7.Amend our submission
    在Reviewer作出了修改意见后,我们需要切换回我们的分支去做修正,首先要在上图的网址中找到我们submission的编号(上图中是7677)接下来简单的几步如下:
    $ git review -d 7677
    // 在IDE中修正我们的代码
    $ git add [modified files]
    $ git commit --amend
    $ git review –R //提交此次修正,成为一个新的Patch Set
    8.Reviewers approve and merge
    当ONOS的Module Owner (诸位Reviewer之一) 审核并许可代码之后,将由这位Owner进行Merge操作,我们的此次代码贡献也就完成了!


    9.后记
    按照以上8个步骤即可成功向ONOS社区贡献代码,如果在此过程中遇到问题还可以通过下面两种方式进行沟通和协作:
    A.可以通过ONOS的邮件列表(链接https://wiki.onosproject.org/display/ONOS/Mailing+Lists),参与开发者的讨论和协作。
    B.也可以利用ONOS的Jira工具(链接https://jira.onosproject.org),管理我们提交的分支。
    作者简介:
    毛健炜,2015/03 -至今,北京邮电大学信息与通信工程学院,未来网络理论与应用实验室(BUPT FNL实验室)。
    --------------华丽的分割线------------------
    本文系《SDNLAB原创文章奖励计划》投稿文章,该计划旨在鼓励广大从业人员在SDN/NFV/Cloud网络领域创新技术、开源项目、产业动态等方面进行经验和成果的文字传播、分享、交流。有意向投稿的同学请通过官方唯一指定投稿通道进行文章投递,投稿细则请参考《SDNLAB原创文章奖励计划》
    声明:本文转载自网络。版权归原作者所有,如有侵权请联系删除。
    扫描并关注51学通信微信公众号,获取更多精彩通信课程分享。

    本帖子中包含更多资源

    您需要 登录 才可以下载或查看,没有帐号?立即注册

    x
    回复

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    Archiver|手机版|小黑屋|51学通信技术论坛

    GMT+8, 2025-1-31 20:07 , Processed in 0.062861 second(s), 33 queries .

    Powered by Discuz! X3

    © 2001-2013 Comsenz Inc.

    快速回复 返回顶部 返回列表