所谓“存在即合理”,任何事物的兴起,都是其出现的背后有强烈的诉求需要解决。开源领域的出现,就是在开源者为了满足自身促进交流的诉求而形成的。可以说,没有开源诉求,就没有开源的发展。同时,开源项目给了很多人技术成长的环境。
一、开源贡献背景
1.1、为什么参加开源贡献
- 个人兴趣方面:一些开源者最初只是单纯对开源领域感兴趣,有浓烈的好奇心,所以才加入开源社区。而后随着不断深入了解,最终成为一名优秀的开源者。
- 日常需求方面:有些开源者是因为生活或工作中接触到了相关的开源技术,需要技术交流或解决问题,因此加入开源社区
- 技术成长方面:可以跟着互联网大厂的技术大牛提升研发能力,学习大厂优秀程序员的代码思维与创新,有一定技术基础的开源者,会产生提升个人技术的想法,想要为个人的职业规划发展打造个人品牌,所以加入开源社区进行技术深造。
- 求职面试的亮点,避免被人理解过去的工作都是CRUD
1.2、参加开源贡献的好处
-
与大厂程序员近距离接触,学习其设计思想和大厂项目的工作方式
-
个人成长:在解决个人诉求的过程中,各项能力也在随着自己的努力而成长。自己会因掌握一项开源项目而得到专业技能的提升,也会因为开源社区的技术交流与沟通提升自己的沟通能力和团队协作能力。自己在开源领域的贡献所有人都会看在眼中,有过优秀开源经历的开源者在求职方面也能够得到青睐,求职遇到开源社区的小伙伴也说不定哦
-
正向激励:一个人可能走得更快,但是一群人会走得更远。在开源过程中,自己会结识志同道合的朋友,获得朋友的认可与支持,甚至能够与自己崇拜的业界大佬共同交流。是不是想想就让人感到兴奋?而且,开源社区也会举办各类活动,促进开源社区的发展,参与活动的开源者一般能够得到不错的精神或物质奖励。
-
代码质量:参与开源项目是提升个人代码质量的好方法。一方面开源会激发程序员的“耻感”,一旦清楚这些代码是要公开给别人看的,就会自觉将代码写得更加整洁、干净,加更多注释。另一方面,如果项目有一定的影响力,其他关注、参与的程序员也会给予更多建议,这样可以博采众长,无形之中约束自己的代码规范,改进自己的代码质量。
可以阅读这篇文章了解下开源:m.seaxiang.com/blog/00a764…
1.3、开源贡献的方式
- 去下载源码,然后分析下相关单词是否存拼写错误、注释不准确、单元测试用例不完善、项目版本依赖是否安全等等
- 去看下项目是否存在待解决的ISSUE问题、待开发的Feature特征或问题、待完善的说明文档等等
- 报名参加每年都在进行的开源之夏活动,和项目的导师一起解决发布的课题
- 将自己的工作中的经验、知识、通用问题的解决方案贡献给社区(比如我之前发现某个第三方支付工具包,不支持正向代理的网络请求,于是给他加上了一个支持正向代理设置的代码)
1.4、开源贡献的步骤
1、熟悉项目的基本知识、技术、架构与原理,当前待解决的ISSUE问题和新需求
2、然后去项目主页fork主仓库,然后就会在自己的帐户中创建一个副本。自己可以进行更改并将任何代码推送到此fork,而不必担心会弄乱原始代码库。单击页面顶部的fork按钮以创建一个新的fork。
3、Fork后的仓库克隆到电脑上,这样我们就有了代码的本地副本。单击Fork后的仓库的SSH或HTTPS URL旁边的剪贴板图标来复制它。
4、创建分支,在对代码进行任何修改时,最好的做法是为我们需要进行的修改创建一个新的特性分支。这样可以确保我们保持master分支的整洁,并且能够在必要时简单地还原我们的代码或进行更新。
二、我的开源贡献之路
2.1、第一次开源贡献
记得第1次的开源贡献来自于2021年一次工作,工作中需要对接微信支付,当时自己选择了wxjava工具包,在使用的过程中发现,我们的项目会部署在内网中,无法调用互联网的接口进行支付信息的通信,于是计划采用正向代理的方式去进行网络接口通信,然后就发现该工具包中的某个方法未提供支持正向代理的参数设置,于是我便下载了源代码,为其增加上了正向代理的请求处理代码,然后PR到了主仓库,管理员也很快进行了合并,当时做完了的感觉很兴奋,自己的业务场景与开源项目融合了,虽然是一个小小的改动,但是让我踏进了开源贡献这个新世界的大门。
2.2、第二次开源贡献
第2次的开源贡献来源于空闲的时间,偶然发现微服务注册中心Nacos有几个需求是关于数据库适配的ISSUE,当时感觉自己可以做,因为自己当时所在的公司是处理BI类的系统业务,这类系统就会要开发适配多种数据库的情况,虽然自己不是改动的主线核心代码内容,但是也将Nacos数据源适配的过程中几个旁路的兼容问题做了简单的处理,也合并到了Nacos主代码中,变成了一名简单的Nacos的贡献者。在贡献的过程中由于持续且热心的参与Nacos的Github的ISSUE的讨论和回复,被管理员邀请Nacos核心开发者群(截至目前,该群只有58个人,一些项目的贡献者、提交者都在里面),这个也是令我没有想到的,也是很高兴的,目前还给Nacos的仓库中,提交了一份Nacos适配PostgreSQL数据库的插件代码。
在2023年初的时候,管理员也给我送了一个奖杯和纪念品,自己的心情更舒服了:
在参与开源贡献的过程中,我发现,只要自己持续且关注社区的ISSUE问题和发展,经常会遇到自己力所能及的问题可以解决,同时对新特性和新版本的关注也是非常好的。
三、Nacos最新版源码环境搭建
说了这么多,开始我们今天的主题吧,今天又计划给Nacos贡献一个代码解决某个现象,于是把自己心得和处理过程经验分享给搭建。先从Nacos源码环境的搭建开始吧。
3.1、Nacos的开源贡献步骤
这块可以参考官方的文档:nacos.io/zh-cn/docs/…
3.2、准备工作,SSH权限设置
1、使用Git客户端打开Git Bash窗口,输入如下命令验证当前是否自己具备项目的SSH配置:
cat ~/.ssh
2、如果未配置,则输入如下命令进行生成SSH的公钥信息,确保后续的git clone可以操作成功。
ssh-keygen -t rsa -b 2048 -C "email@163.com(写自己的邮箱)"
3、在Github或Gitee的后台的个人中心中,添加刚才我们生成好的公钥信息,到Github信任的SSH Key信息菜单中,在客户端的窗口中,输入输入命令获取生成的公钥信息:
cd ~/.ssh cat id_rsa.pub
然后再Github的设置中,粘贴我们的公钥信息,如下图所示:
设置成功后,我们就可以在自己的电脑上进行项目的clone和提交代码等操作了。
3.3、Nacos源码最新版本环境搭建
截至到2023年5月21日,Nacos仓库中的主线开发分支的代码的pom的版本为待发布的2.3版本了,相信很快正式版就会发布了。所以这里也是基于仓库中最新的Nacos2.3快照版的代码进行环境搭建的。
1、首先,我们再Github的Nacos的项目主页中,选择fork到自己的仓库,如图所示:
单击fork以后,出现创建确认页面,这里单击确认创建即可:
2、fork成功以后,再自己的仓库主页上,单击SSH复制,如下图所示:
3、然后,再我们个人的电脑上,使用git的客户端进行项目clone,如下图所示:
4、然后,再IDEA中导入该项目,如下图所示:
接下来我们就开始进行项目的编译和安装,这里需要提前再IDEA中安装好protobuf的插件,因为nacos的一致性协议模块中,需要该插件进行编译,否则可能会失败:
5、执行maven的编译和安装,对项目进行初始化安装:
如果提示成功,则代表源码环境构建成功
3.4、项目环境启动
1、鼠标右键修改console工程中的启动类Nacos,修改其运行启动参数,并设置为单机独立模式,如图所示:
设置为单机运行和参数,这里指定了启动的JVM参数为单机模式运行和主目录。
5、启动Nacos类,测试效果
如果启动失败,则看看console工程下的resources文件夹中的application.properties文件是否指定了如下这个参数:
nacos.core.auth.plugin.nacos.token.secret.key
如果报错和这个选项有关则设置下密钥信息。
四、我的最近一次源码PR记录
4.1、贡献背景
很多社区的小伙伴反馈,再使用Nacos的过程中,经常再启动的时候提示:No DataSource set,无法具体的提醒出真实的异常信息是什么,排错时间较长。本地源码贡献过程便是基于此ISSUE进行处理。
出现这个错误的原因是Nacos的依赖的JDBCTemplate再启动的过程中由于连接数据库问题不成功,内部封装的代码默认的校验提示的。而目前的项目代码中,未能更原始的提示出到底是哪里连接不上,是远程连接超时呢,还是用户名密码错误呢。
4.2、贡献过程
1、再之前的源码搭建环境成功的基础上,设置项目的基本用户信息,再根目录设置项目的Git的用户信息
git config --local user.name “你的名称”
git config --local user.email “你的邮箱”
2、然后基于当前的开发分支develop分支创建一个需求/特性分支,这块相关的操作也可以参考下Nacos官方提供的贡献流程的步骤。这里我是输入如下命令创建了一个Git分支。避免再Nacos的主分支上进行改动:
git checkout -b feature0521_datasource
3、然后再IDEA中导入Nacos的统一code style的文件,避免修改项目代码后,产生格式问题,如下所示:
这一个步骤是非常重要的,如果没有设置,那么最后PR给Nacos的主仓库的代码很大概率上会CICD失败,影响格式,无法被管理员合并等。
自己写完代码后,进行代码的格式化和扫描,避免出现格式不统一的问题,这个非常重要,有经验的Nacos贡献者非常清楚这个操作,常见的开源项目也都有各自的code style文件。
4、修改完成具体的代码后,本地测试无误后,根据自己编写类的业务,补充下相关的单元测试用例。一些核心的改动,自己提交前,一定要执行和编写相关的测试用例,确保无影响。
然后提交即可,并推送到当前自己空间中的代码中,推送后的效果如下所示:
5、接下来回到仓库的主页面,此时可以看到一个待Pull Request的样式的说明,单击按钮,进入大家常说的PR操作:
6、再确认改变页面中,根据自己改造的目的和原因进行说明,同时如果改造的是一个ISSUE的问题,请再标题中和内容中进行明确说明,如下图所示:
7、确认无误后,提交即可,提交代码后会触发Nacos项目的CI/CD操作,如果测试通过,则等待管理员的合并即可,如果是第一次合并请求,需要再结果页面签署了协议之类的。提交后的结果如下所示:
当这些CI/CD的过程通过后,项目维护者审核通过后便可以合并到主开发分支中,等待下次发版即可。
五、总结
本文简答的介绍了开源贡献的理解、个人的开源贡献记录、Nacos的开源贡献的过程和PR的提交方式,希望对开源贡献感兴趣的小伙伴一点帮助。
看到这里,是不是有小伙伴想知道怎么发现开源项目中的贡献点再哪里呢?
这个文章的前面分享过,学习了某个项目以后,理解了其核心原理、基础的代码流程后,可以先从简单的贡献开始,比如发现是否存在错误的单词拼写、是否存在缺失的单元测试用例、是否存在不安全的版本依赖、是否符合阿里巴巴代码规范等等。如果当前自己处于学生阶段,现在到6月初,还可以参加Nacos的开源之夏(summer-ospp.ac.cn/org/orgdeta…
今年,社区给大家准备了9个Nacos待解决的课题,对Nacos的开源贡献感兴趣的小伙伴可以去报名参与哦,除了Nacos还有很多开源项目都发布了今年待解决的课题,对学生学习技术帮助很大哦。
参加开源可以:
- 获取大厂程序员的代码设计和思维方式的小伙伴,提升在公司的代码编写能力
- 吸收和理解某些代码设计,引入到当前自己所在的项目中的小伙伴,提升在公司的创新和应用能力
- 提升自己对于技术知识点的理解和应用场景的小伙伴,提升在技术层面的认知能力
如果正在看文章的你,喜欢本篇文章的,可以收藏、关注、分享、转发、评论哦。和我一起交流,一起成长.