介绍:成为一名 Jenkins 贡献者的旅程

2023-05-16

转自Jenkins 中文社区

作为一名软件工程师,这些年来在我工作过的不同公司里用到过许多开源软件(包括框架、库、工具等)。 然而,在此之前我从没有以一名贡献者的身份参与过开源项目。

自从我向 Jenkins 提交第一个简单又滑稽的 commit 已经过去六个月(2018 年 9 月)了, 我也尝试过作出更多贡献。然而总的来说,向开源项目贡献代码是具有挑战的, 特别是像 Jenkins 这样有着很长生命周期的项目,项目中不乏遗留代码和系统知识。 它通常难以入手,也很难想到一个计划来持续贡献使你的付出从长远看来是有意义的。

对于 Jenkins 社区来说,我在尝试加入社区时所遇到的困难是其它人也有可能会面临的, 因此我决定分享我成为 Jenkins 活跃贡献者的心路历程。

我计划大概每月发布一篇博文来描述我的这段旅程,我将从简单容易入手的项目开始, 随着时间推移再介绍更加复杂的项目。

从哪开始

jenkins.io

要成为 Jenkins 的贡献者,首先会看到的就是 jenkins.io, 在顶部导航中"社区"下拉列表里第一个"参与"的链接就能将我们带到"参与和贡献"这个页面。

在这个页面中列举了我们能够参与 Jenkins 项目和社区的许多方式。尽管它展示了所有可能的选项供读者选择,但一下子看上去令人有些无所适从。

这个页面被分成了左右两个部分,左边提供了参与社区的方法,右边是向社区贡献的方法。

参与社区的建议

在“参与和贡献”页面的左侧是有关参与社区的建议,其中包括结交他人、审阅修改或者提供反馈信息。

这里面最让我困惑的是沟通渠道,里面列出的沟通渠道有 几个邮件列表 还有 IRC 和 Gitter 频道。

当我第一次尝试参与时,我订阅了许多邮件列表和几个 IRC 和 Gitter 频道,但我很快发现里面有重要的讨论正在进行, 并且活跃的讨论中多数是关于特定的用户或开发者的问题。因此,我不建议你一开始在这上面花太多时间, 除非你是要为其他用户提供帮助(当你是经验丰富的 Jenkins 用户时可能会有这种情况)或者你已经有一个明确的问题需要提问。

看一看社区成员如何互相帮助是好事,但是对新人来说它的信息量过于庞大。如果你的兴趣在于向 Jenkins 项目作贡献(不管是翻译、文档还是代码), 这些对话不会对你有太大的帮助。

向社区贡献的建议

在“参与和贡献”页面的右侧有一些关于如何贡献的建议,主要分为:编写代码,翻译,文档和测试。

在之后的博客中,我将介绍所有的这些贡献类型,以及如何参与的建议包括如何审阅 Pull Requests(PRs)或提供反馈 (反馈问题或者复现其它用户反映过的问题,提供额外信息来帮助维护者复现和修复它们。)

开源之旅的第一次贡献

当看到「参与和贡献」页面时,我发现我可以帮助改进这个页面的一些内容。本来我打算选择其中一个作为这篇文章的第一个例子,但当我阅读贡献指南时, 我发现了一个更简单的贡献。我认为它可以更好的说明开始贡献社区是多么的简单,于是我决定就用它来当例子。

网站代码仓库

在「文档」菜单中有一个链接 jenkins.io 的贡献指南, 这个 CONTRIBUTING 文件是大多数开源项目代码仓库的根目录中都会有的常见文件。

点击链接跳转到 jenkins.io 代码仓库,这个仓库包含了网站的源代码其中也包括这篇文章。 事实上,我首先查看的是贡献指南,以便了解如何为网站做出贡献的相关信息。

找到一个失效链接

通过阅读贡献指南,我了解了 Awestruct 静态站点生成器,它是用于将代码仓库中的 AsciiDoc 源文件转换为网页的工具。 然而,当我点击链接想查看更多信息时,我发现这个链接失效了——域名已经过期。

为何不修复它?

这是一个好机会,我用它来向新人展示开始贡献是多么容易。

创建代码仓库分支

第一步,通常是 fork 代码仓库,并克隆到本地。

进行修改

下一步就是对相应文件进行修改。我创建了一个新的分支 “alternative-awestruct-link” 并对它作了如下修改:

确保构建正确并且通过测试

尽管在这次的情况下,我的贡献并不针对网站的实际页面,而是对贡献指南(因此不太可能造成什么破坏),但是最好习惯每个贡献都遵循规范流程, 这样才能确保之后有所改变时构建也能够正常进行。

如贡献指南所述,要构建此项目,我们只需在代码仓库的根目录中以默认的 “make” 作为 target 来运行构建命令。

一旦命令执行完成,如果没有出现报错,我们就可以进行下一步:创建 Pull Request

创建 PR

把我的改动 commit 并 push 到远程库以后,我就需要创建一个 PR 了。 有一个简单的方法,只需单击推送完成后在 git 日志中显示的链接,如果愿意的话也可以通过 GitHub UI 创建 PR; 或者甚至可以使用 GitHub CLI 的 “hub” 来完成它。

这次我直接点击了链接,它将我跳转到 Github 的创建 PR 页面,我在这个页面上添加描述并创建了 PR。

当创建这个代码仓库的 PR 后,可以发现有一些检查开始运行。Jenkins 代码仓库配置了 “Jenkins on Jenkins”, 它会为每个代码仓库运行 Jenkinsfile 中描述的相应 CI 流水线。

检查结束后,可以在 PR 中看到结果:

如果想看到执行的细节,可以点击 “Show all checks” 链接:

PR review

现在我们已经创建好了 PR 并通过了自动测试,只需要等待代码 review 了。

一旦 PR 被审核通过然后被 merge,你的贡献就会被整合到代码仓库的主分支并成为下次版本更新的一部分。

我已经作出了贡献!

我做的这个贡献是微不足道的,它的复杂性很小,如果你的目标在于为 Jenkins 项目本身贡献代码,它可能看起来不是很有趣。

然而对于我作为一名贡献者,这是一个熟悉代码库、贡献指南、jenkins.io 网站背后的技术的很好的方式; 并且最重要的是,我开始“放下恐惧”,为 Jenkins 这样的开源项目做出了贡献。

因此,如果你同我一样,请不要犹豫。来吧,找到你自己的第一个贡献。每一个细节都很重要!

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

介绍:成为一名 Jenkins 贡献者的旅程 的相关文章

随机推荐

  • sql server 索引总结一

    一 存储结构 在SQL Server中 xff0c 有许多不同的可用排列规则选项 二进制 xff1a 按字符的数字表示形式排序 ASCII码中 xff0c 用数字32表示空格 xff0c 用68表示字母 34 D 34 因为所有内容都表示为
  • CSS 为什么这么难学?

    最近半年 xff0c 我一直都没在知乎上遇到好的前端问题 xff0c 而这个问题 xff0c 问到我心坎上了 在过去一年的教学过程中 xff0c 不断有学生尝试理性地理解 CSS xff0c 都以失败告终 我告诉他们 CSS 是没有逻辑可言
  • 时间复杂度分析经典问题——最大子序列和

    时间复杂度经典问题 最大子列和问题 最大子序列和问题 最大子列和问题是非常经典的问题 xff0c 基本上讲算法的书都会将这个例子 xff0c 用此例题来讲解算法时间复杂度的重要性 xff0c 对比不同算法的时间复杂度 最大子列和问题如下 x
  • 无法运行宏,可能是因为该宏在此工作簿中不可用,或者所有的宏都被禁用的解决方法...

    此行为发生以下条件之一都为真时 xff1a 宏存储在未打开的文件中 宏已被禁用 若要确定是否已禁用了宏 xff0c 请按照下列步骤操作 xff1a 单击 Microsoft Office 按钮 xff0c 然后单击 Excel 选项 单击
  • h3c vlan配置

    1 基于端口的VLAN配置命令 SWA vlan 10 创建VLAN SWA vlan10 port Ethernet1 0 1 向当前VLAN添加端口 SWA vlan 20 创建VLAN SWA vlan20 port Ethernet
  • LMDB概述

    2019独角兽企业重金招聘Python工程师标准 gt gt gt 发现一篇讲解LMDB不错的文章 xff0c 记录一下 xff0c 原文在这里 Overview homepage http symas com mdb https gith
  • GPU加速的FAST特征提取 Faster than FAST: GPU-Accelerated Frontend for High-Speed VIO (IROS 2020)

    在许多的VIO Pipeline中 xff0c 视觉特征通常依靠图像数据的detection和tracking 这两个部分通常会比较耗时 xff0c 比如一些经典的算子 xff0c 运算量都比较大 xff0c 如果将这些视觉前端用GPU进行
  • 什么是死锁及死锁的必要条件和解决方法【转】

    来自 xff1a http blog 163 com yanenshun 64 126 blog static 128388169200982444858590 fromdm amp fromSearch amp isFromSearchE
  • 获取C# RadioButton选中值

    C RadioButton的一些属性介绍 1 C RadioButton只允许用户从几个选项中选择一个 xff0c 同一个容器中一次只能选择一个按钮 xff1b 2 C RadioButton的Appearance属性 xff1a 根据的以
  • vc-api-枚举所有子窗口实例

    我经常想枚举一个父窗口的所有子窗口 xff0c 网上搜索了很多都没有搞的太懂 xff0c 经过多次实践 xff0c 总算搞明白了 xff0c 发一个最简单的实例 xff0c 希望能给大家带来帮助 实例 xff1a 枚举QQ登陆这个窗口所有的
  • VC 获取鼠标下面的窗口

    POINT pt GetCursorPos amp pt 得到鼠标下面的窗口句柄 HWND hWnd 61 WindowFromPoint pt 得到鼠标所在的子窗口句柄 HWND hChild 61 ChildWindowFromPoin
  • [SE]软件项目需求分析为什么困难

    有几种原因使需求分析变得困难 xff1a xff08 1 xff09 客户说不清楚需求 xff1b xff08 2 xff09 需求自身经常变动 xff1b xff08 3 xff09 分析人员或客户理解有误 1 客户说不清楚需求 有些客户
  • C++到底还能做什么?

    嗯 xff0c 这是一位朋友发到我邮箱里面的 xff0c 很奇怪 xff0c 发到了gmail邮箱 xff0c 而不是我常用的hotmail邮箱哈 我呢 xff0c 试着回答一下 xff0c 如果回答得不好 xff0c 叫做肖某人学艺不精
  • Docker 创建 MySQL 容器

    2019独角兽企业重金招聘Python工程师标准 gt gt gt 1 拉取镜像 docker pull mysql 5 7 2 查看当前所有的镜像 docker image ls 3 创建并启动一个容器 docker run name t
  • 深入理解Arrays.sort()

    翻译人员 铁锚 翻译日期 2013年11月16日 原文链接 Deep Understanding of Arrays sort T Comparator lt super T gt c Arrays sort T Comparator lt
  • 18个实时音视频开发中会用到开源项目

    实时音视频的开发学习有很多可以参考的开源项目 一个实时音视频应用共包括几个环节 xff1a 采集 编码 前后处理 传输 解码 缓冲 渲染等很多环节 每一个细分环节 xff0c 还有更细分的技术模块 比如 xff0c 前后处理环节有美颜 滤镜
  • px4 uavcan linux,UAVCAN - UAVCAN Bootloader - 《PX4中文维基》 - 书栈网 · BookStack

    安装UAVCAN启动程序警告 xff1a 无人机控制器局域网络 Unmanned Aerial Vehicle Controller Area Network xff0c UAVCAN 设备通常在出厂时就预安装了启动程序 如果你不对UAVC
  • VISTA -MIT开源基于数据驱动的自动驾驶仿真引擎

    引言 VISTA 是MIT开源的一个基于数据驱动的用于自动驾驶感知和控制的仿真引擎 VISTA API提供了一个接口 xff0c 用于将真实世界的数据集转换为具有dynamic agents sensor suites task objec
  • 计算机管理储存u盘无法使用,解决电脑识别不出U盘的问题

    电脑识别不出U盘怎么样 要解决这个问题 xff0c 首先我们要确定的是U盘在其他电脑上使用正常 xff0c 而且你的电脑USB接口也是一切正常的 xff0c 插入电脑后虽然有反应 xff0c 但就无法正确显示出盘符 xff0c 资源管理器也
  • 介绍:成为一名 Jenkins 贡献者的旅程

    转自Jenkins 中文社区 作为一名软件工程师 xff0c 这些年来在我工作过的不同公司里用到过许多开源软件 xff08 包括框架 库 工具等 xff09 然而 xff0c 在此之前我从没有以一名贡献者的身份参与过开源项目 自从我向 Je