介绍:成为一名 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 贡献者的旅程 的相关文章

  • 在 Jenkins 上编译 Android 项目时如何修复此 ZipException?

    我最近将 Jenkins 机器上的 Android SDK 从 rev13 更新到 rev15 并且必须重做一些自定义构建内容build xml以适应 rev14 中所做的更改 我在我的工作站上解决了这个问题 并检查了它 期望一切顺利 相反
  • 如何指定 Gradle 包装器下载位置?

    我们将项目转移到了 gradle 并在 Jenkins 上持续构建 我们使用 gradle 包装器和 Jenkings gradle 插件 通过查看控制台输出 我发现每次构建都会下载 gradle 11 24 42 Downloading
  • 在同一 Jenkins 项目的后期重用工件

    我有一个 Jenkins 管道 其构建步骤有一个archiveArtifacts命令 构建步骤之后是单元测试 集成测试和部署 在部署步骤中 我想使用其中一个工件 我以为我可以在构建步骤生成它的同一个地方找到它 但显然archiveArtif
  • 如果执行 shell 失败,jenkins 构建不会失败

    作为构建过程的一部分 我运行 git commit 作为执行 shell 步骤 但是 如果工作区中没有任何更改 Jenkins 将导致构建失败 这是因为当没有要提交的更改时 git 返回错误代码 如果是这种情况 我想要么中止构建 要么将其标
  • 如何从 jenkins 作业的 scm 轮询中排除 jenkins 文件

    我正在使用声明性管道语法 我的 jenkins 文件存储在 git hub 存储库中 与要构建的代码分开 因此我设置了 jenkins 作业以从 scm 获取管道脚本 并在 master 分支上选择我的 git 存储库 在我的管道脚本中 我
  • 如何添加更多数据存储在 jenkins Rest api 中

    为了使问题变得简单 我知道我可以通过以下方式获取一些构建信息https jenkins server https jenkins server api json xml python 我获得了有关该构建记录的大量信息 但是 我想向该构建记录
  • Jenkins 管道中的导出命令

    如何在 Jenkins 管道中添加 导出 unix 命令 我里面有一个詹金斯 舞台 和 步骤 导出命令的语法是什么 我需要使用导出命令设置环境变量 PATH 您可以更新 PATH像这样 pipeline agent label docker
  • Maven 不能在 jenkins 上运行(但可以通过 eclipse 和命令行运行)

    我有一些 CI 测试 全部在 Maven 中进行 当我在本地 Windows 10 的 Eclipse 中运行它们以及通过 ec2 Linux 服务器中的命令行运行它们时 构建成功 仅当我从 Jenkins 构建相同的项目时 我会收到以下错
  • PHP启动:无法使用Jenkins加载动态库'/usr/lib/php/20160303/pdo_sqlite.so'

    在 Jenkins 管道中运行 phpunit 测试套件时 我收到此警告 PHP Warning PHP Startup Unable to load dynamic library usr lib php 20160303 pdo sql
  • 如何使用 jenkins shell 创建新的 git 分支

    我想达到以下目标 在某些詹金斯工作中 从 dev branch 创建一个新分支 对新创建的分支 new branch 进行一些更改 将新创建的分支推送到 git repo 我在詹金斯中执行了以下步骤 我已经在 源代码管理 部分配置了我的 g
  • 在使用 Ant/Jenkins 时,如何查看同一 Java 项目的不同 Subversion 标签/分支?

    这是我的开发配置 颠覆之下 我有我的project X trunk 带有我最新的开发人员 我有我的project X tags 具有不同的版本 我正在考虑添加一个分支文件夹 我正在使用 Jenkins 使用 Ant 脚本构建我的projec
  • 如何在Jenkins上更改工作空间并建立记录根目录?

    我希望将 Jenkins 的数据写入驱动器 E 因为这是服务器上的大型驱动器 Jenkins 本身安装在 C 上 我怎么做 我看到的默认配置是 工作区根目录 ITEM ROOTDIR 工作区 构建记录根目录 ITEM ROOTDIR 构建
  • Apache 反向代理的基本身份验证问题

    我想为在 Ubuntu 服务器 12 04 1 上运行的 Apache 反向代理站点添加基本身份验证 网络应用程序是Jenkins http jenkins ci org运行在 Java EE 容器上 我在中添加了以下配置httpd con
  • 使用 zip 实用程序从工作区目录中压缩多个文件/文件夹

    我们有一个 Jenkins 管道 我想压缩位于工作区中多个目录中的多个文件 py 和 cfg 有没有一种方法可以将多个值传递给dirzip 方法的选项 zip zipFile package zip dir WORKSPACE infra
  • 无法指向 Jenkins 主机上 ~/.ssh 中的 ssh 密钥

    我已经安装了 SSH 代理插件来使用 SSH 身份验证拉取 Git 存储库 我想使用位于系统文件中的 SSH 密钥 来自 Jenkins master ssh选项 这是从官方插件页面截取的屏幕截图 不幸的是我没有看到这个选项 我只能选择 直
  • Jenkins 管道中的 Sonarqube 质量门状态检查失败

    我是詹金斯管道脚本和声纳库的新手 如果我能就以下问题获得一些帮助 那就太好了 当质量门检查失败时 我想使 Jenkins 声明式管道作业失败 根据声纳文档 https docs sonarqube org latest analysis s
  • Jenkins 和 Github 不使用 SSH 密钥

    我已将 Jenkins 设置为从 Github 上的私有存储库中提取特定作业 尽管我已经生成了私钥 公钥并将其作为部署密钥添加到 github 但 Jenkins 似乎并未使用 SSH 密钥 当我从 Jenkins 用户进行 git clo
  • Jenkins中找不到环境变量

    我想在詹金斯中设置很多变量 我试过把它们放进去 bashrc bash profile and profile of the jenkins用户 但 Jenkins 在构建发生时找不到它们 唯一有效的方法是将所有环境变量放入Jenkinsf
  • Jenkins 可以检测到任何 svn 用户每次提交代码吗?

    Jenkins 可以检测到任何 svn 用户每次提交代码吗 我想知道每次 Jenkins 提交 svn user 时 有什么方法或 jenkins 插件吗 现在我用svn updateJenkins 中的 cmd 来更新 svn 您可以按照
  • 在 System Groovy 中暂时禁用 Jenkins 服务器上的 SCM 轮询

    我们有一个 Jenkins 服务器 正在运行 20 到 30 个作业 由于构建过程相当复杂 我们将实际构建分解为 1 个子构建 其中一些可以同时运行 其他则必须遵循之前的构建步骤 因此 我们将每个构建步骤分为 3 组 这三组在构建进行时会被

随机推荐

  • 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