Jenkins:从商标危机到开源CI/CD革命的传奇分裂
2010年,Oracle收购Sun Microsystems后,一个关键的开源项目面临商标危机。Kohsuke Kawaguchi和核心开发者们在邮件列表中发起投票:是继续与Oracle协商,还是创建一个全新的分支?75%的人投票支持分叉,Jenkins项目就此诞生。
导语
2011年1月,在Hudson项目的邮件列表中,一场激烈的争论正在进行。Oracle刚刚收购了Sun Microsystems,获得了Hudson持续集成工具的商标权。当社区要求Oracle将商标捐赠给开源社区时,Oracle拒绝了。面对这个威胁,Hudson的创建者Kohsuke Kawaguchi和核心开发者们发起了一次投票:是继续与Oracle协商,还是创建一个全新的分支?75%的开发者投票支持分叉,Jenkins项目就此诞生。这个决定不仅挽救了项目,更开启了一场持续至今的开源CI/CD革命。十年后,Jenkins已经成为事实上的CI/CD标准,支撑着全球数百万个软件项目的自动化构建。这是一个关于社区力量、开源精神和果断决策的故事——它证明了当企业试图控制开源项目时,社区有能力重建并超越原有的成就。
时代背景(Why now)
2000年代末,敏捷开发(Agile)和持续集成(Continuous Integration)正在改变软件开发的方式。
敏捷开发强调短周期迭代、快速反馈和持续改进。但敏捷需要一个关键的基础设施支持:自动化的构建和测试。每当开发者提交代码,系统需要自动拉取代码、编译、运行测试、生成报告。这让团队能够快速发现问题,保持代码的健康状态。
但当时市场上缺乏好用的持续集成工具。CruiseControl是最早的CI工具之一,但配置复杂,用户体验差。Apache Continuum、Buildbot等工具也存在类似的问题。市场需要一个简单、灵活、可扩展的CI工具。
与此同时,Java是主流的企业开发语言,Java项目需要编译、打包、测试,对CI工具的需求尤为迫切。Java社区需要一个专门为Java设计的CI工具。
2005年,Sun Microsystems的工程师Kohsuke Kawaguchi开始开发Hudson——一个开源的CI工具。Hudson的设计目标是简单、易用、可扩展。它提供了Web界面,让开发者可以轻松配置构建任务。Hudson的插件系统允许扩展功能,支持各种版本控制、构建工具和通知方式。
Hudson迅速流行,成为Java社区的标准CI工具。到2010年,Hudson已经有了庞大的用户群和丰富的插件生态系统。
但2010年,Sun Microsystems被Oracle收购,Hudson的命运发生了转折。
产品诞生(Origin Story)
Kohsuke Kawaguchi是Hudson的创造者。
Kawaguchi 1977年出生于日本,在东京大学获得计算机科学学位后加入了Sun Microsystems。在Sun,他从事Java EE和GlassFish的开发工作。
2005年,Kawaguchi开始开发Hudson。最初,这只是他个人的一个实验项目,目的是解决Sun内部Java项目的构建问题。但Hudson的设计非常优秀,Kawaguchi决定将其开源。
2006年,Hudson在java.net上开源发布。Kawaguchi选择了Eclipse Public License(EPL)——一个商业友好的开源许可证。
Hudson迅速流行。它的优势在于:
- 简单安装:一个WAR文件,部署到Servlet容器即可运行
- Web界面:通过浏览器配置和管理构建任务
- 丰富的插件:支持Git、Subversion、Maven、Ant等各种工具
- 分布式构建:支持主从架构,可以在多台机器上并行构建
到2008年,Hudson已经成为Java社区的标准CI工具。Sun Microsystems正式支持Hudson项目,Kawaguchi被允许用部分工作时间维护Hudson。
2010年,Oracle以74亿美元收购Sun Microsystems。这个收购在技术界引发了巨大关注,许多开源项目的命运变得不确定。
对于Hudson来说,收购带来了一个直接的问题:Hudson的商标权归Oracle所有。
2010年底,Hudson社区与Oracle开始讨论商标问题。社区希望Oracle将Hudson商标捐赠给开源社区,确保项目的独立性。但Oracle拒绝了。
Oracle提出了一些条件:Hudson的发布必须通过Oracle的审核,Oracle可以任命项目领导,项目的方向需要与Oracle的战略一致。
这些条件对开源社区来说是不可接受的。开源的核心是社区自治,而不是企业控制。
第一个关键突破(First Breakthrough)
2011年1月,Kawaguchi在Hudson邮件列表中发起了一次投票。
投票的问题是:是否应该将项目分叉,创建一个新的独立项目?
结果令人震惊:75%的投票者支持分叉。
这个结果反映了社区的强烈意愿。开发者们不愿意将项目的控制权交给Oracle,他们相信社区自治的力量。
2011年2月1日,Jenkins项目正式诞生。
Jenkins这个名字来源于Butler(管家)的概念,寓意为”自动化执行任务的仆人”。这个名字也与Hudson形成对比——Hudson是探险家Henry Hudson的名字,Jenkins则是更平民化的名字。
分叉后,几乎所有的Hudson核心开发者都转向了Jenkins。插件开发者、用户、文档贡献者也纷纷迁移。Jenkins迅速成为原Hudson社区的事实延续。
分叉的过程并不容易。团队需要重新建立:
- 代码仓库和版本控制
- 网站和文档
- 构建和发布流程
- 社区治理结构
- 基础设施(服务器、域名等)
但他们得到了Eclipse基金会的支持。Eclipse基金会提供了一个中立的家园,帮助Jenkins建立治理结构。Jenkins采用了类似Eclipse的治理模式,由一个选举产生的治理委员会管理。
分叉后,Jenkins的活跃度迅速超越了原Hudson项目。 新的提交、新的插件、新的用户都涌向Jenkins。
扩张阶段(Growth)
2011年至2015年是Jenkins的快速成长期。
2011年,Jenkins发布了多个重要版本,改进了用户界面、增强了安全性、优化了性能。更重要的是,Jenkins的生态系统迅速壮大。
Jenkins的插件生态系统是其核心竞争力。 到2012年,Jenkins已经有超过500个插件,支持各种版本控制系统(Git、SVN、Mercurial)、构建工具(Maven、Gradle、Ant)、部署目标(AWS、Azure、Docker)、通知方式(Email、Slack、HipChat)等。
2012年,Jenkins的治理结构正式化。成立了Jenkins治理委员会,由社区选举产生,负责项目的战略方向。Kawaguchi担任第一任治理委员会主席。
2013年,Jenkins用户超过10万,安装实例估计超过10万个。Jenkins已经成为事实上的CI/CD标准工具。
2014年,Jenkins迎来了重要的技术演进。这一年,Kawaguchi提出了Jenkins 2.0的愿景——让Jenkins从CI工具,演变为完整的持续交付(CD)平台。
Jenkins 2.0的核心特性是Pipeline(流水线)。 Pipeline允许开发者用代码(Groovy DSL)定义整个CI/CD流程,从构建到测试到部署。这带来了几个好处:
- 版本控制:Pipeline代码可以存储在Git仓库中,与代码一起版本化
- 可重复性:Pipeline可以在不同环境中重复执行
- 可视化:Pipeline提供了可视化的流程图,显示每个阶段的状态
- 可扩展性:Pipeline支持自定义步骤和共享库
2016年4月,Jenkins 2.0正式发布。这是Jenkins历史上最重要的版本之一,标志着Jenkins从CI工具向CD平台的演进。
2016年至2018年,Jenkins继续快速发展。
- Blue Ocean:一个新的用户界面,提供更现代的Pipeline可视化
- Pipeline as Code:Jenkinsfile成为标准的Pipeline定义方式
- Multibranch Pipeline:自动为Git仓库的每个分支创建Pipeline
- Declarative Pipeline:提供更简洁的声明式语法
到2018年,Jenkins的周活跃用户估计超过150万,安装实例超过20万个。
关键竞争(Competition)
Jenkins面临来自多个方向的竞争。
Travis CI是Jenkins最早的云竞争对手之一。Travis CI于2011年推出,是首批托管的CI服务之一。Travis CI的优势在于与GitHub的紧密集成,配置简单(只需一个.travis.yml文件)。Travis CI在开源社区尤其流行,许多GitHub项目使用Travis CI进行持续集成。
但Travis CI在2019年被收购后,服务质量下降。2020年,Travis CI宣布将停止对开源项目的免费服务,引发了社区的批评。许多项目从Travis CI迁移到GitHub Actions或其他CI服务。
CircleCI是另一个主要的云CI服务。CircleCI于2011年推出,提供了更现代的CI/CD体验。CircleCI的优势在于:
- 快速的构建性能(通过优化的容器化环境)
- 强大的缓存机制
- 与Docker的深度集成
- 直观的配置语法
CircleCI在2019年完成了E轮融资,估值达到15亿美元。它是Jenkins的主要云竞争对手。
GitHub Actions是GitHub于2018年推出的CI/CD服务。GitHub Actions直接集成在GitHub平台中,与代码仓库无缝集成。GitHub Actions的优势在于:
- 与GitHub的深度集成
- 丰富的Actions Marketplace
- 简洁的YAML配置
- 对开源项目免费
GitHub Actions推出后迅速流行,成为CI/CD市场的重要玩家。许多项目从Jenkins、Travis CI迁移到GitHub Actions。
GitLab CI是GitLab内置的CI/CD工具。GitLab CI与GitLab代码仓库深度集成,提供了从代码管理到CI/CD的完整DevOps平台。GitLab CI的优势在于”单一应用”的理念,用户不需要在多个工具之间切换。
面对竞争,Jenkins采取了几个关键策略:
1. 云原生Jenkins。Jenkins推出了Jenkins X——专门为Kubernetes和云原生应用设计的CI/CD平台。Jenkins X提供了更现代的CI/CD体验,支持GitOps、预览环境等功能。
2. 插件生态系统。Jenkins的插件生态系统是其最强大的护城河。超过1800个插件支持各种工具、平台和工作流。这种丰富的生态是其他CI工具难以复制的。
3. 灵活性和可控性。Jenkins提供自托管的能力,让用户完全控制CI/CD环境。这对于有严格安全和合规要求的企业来说非常重要。
4. 社区驱动。Jenkins保持开源和社区驱动,不受单一公司的控制。这赢得了许多企业的信任。
拐点(Turning Point)
2018年至2020年是Jenkins的关键转折点。
2018年,GitHub Actions的推出对Jenkins构成了直接威胁。GitHub Actions直接集成在GitHub平台中,与代码仓库无缝集成。许多GitHub项目从Jenkins迁移到GitHub Actions。
2018年,Jenkins推出了Jenkins X,应对云原生和Kubernetes的趋势。Jenkins X是一个完全重新设计的CI/CD平台,专为云原生应用设计。它采用Kubernetes作为基础设施,支持GitOps工作流,提供了预览环境、自动升级等现代功能。
但Jenkins X的采用速度不如预期。许多用户仍然使用传统的Jenkins,迁移到Jenkins X需要学习新的概念和工作流。
2019年,Kawaguchi离开Jenkins项目,创立了创业公司Launchable。Kawaguchi的离开是Jenkins社区的重大损失,但项目继续发展。
2020年,Jenkins庆祝了10周年纪念。10年来,Jenkins从Hudson的分支,成长为全球最受欢迎的CI/CD工具之一。
2021年至2024年,Jenkins继续演进,但增长速度放缓。
- Pipeline的持续改进:支持更多的步骤类型、更好的错误处理、更强大的共享库
- 用户体验的优化:改进的界面、更好的文档、更简单的配置
- 安全性:加强对插件的安全审计,提供更好的安全扫描
- 云原生:Jenkins Kubernetes Operator让企业更容易在Kubernetes上运行Jenkins
到2024年,Jenkins仍然是使用最广泛的CI/CD工具之一,虽然面临GitHub Actions、GitLab CI等新兴工具的竞争。
结果(Outcome)
到2024年,Jenkins已经发展成为CI/CD领域的基石工具。
用户规模:Jenkins的周活跃用户估计超过100万,安装实例超过25万个。Jenkins支撑着全球数百万个软件项目的自动化构建。
插件生态系统:Jenkins拥有超过1800个插件,覆盖几乎所有的开发工具和平台。从版本控制到构建工具,从部署目标到通知方式,Jenkins都有相应的插件支持。
行业影响:
- CI/CD的普及:Jenkins让持续集成和持续交付变得普及,推动了DevOps文化的兴起
- DevOps文化的推动:Jenkins是DevOps运动的关键工具之一,促进了开发和运维的协作
- 开源CI的标杆:Jenkins证明了开源CI工具的可行性,影响了后来的许多CI工具
商业模式:
Jenkins本身是开源免费的,但围绕Jenkins形成了商业生态系统:
- CloudBees:Jenkins的主要商业支持公司,提供企业版Jenkins、培训、咨询等服务
- 托管Jenkins服务:AWS、Azure、Google Cloud等云厂商提供托管的Jenkins服务
- 插件商业化:一些插件开发者提供商业版本的插件
技术演进:
Jenkins从一个简单的CI工具,演变成一个完整的自动化平台。它支持:
- 持续集成(CI):自动构建、测试、代码质量检查
- 持续交付(CD):自动部署到各种环境
- 基础设施即代码:通过Pipeline定义整个交付流程
- 云原生:Jenkins X支持Kubernetes和GitOps
规律总结(Lessons)
Jenkins的故事为我们提供了关于开源治理、社区力量和持续集成的宝贵启示:
1. 社区自治是开源项目的核心
Jenkins的诞生源于对社区自治的坚持。当Oracle试图控制Hudson时,社区选择了分叉。这个决定证明了开源项目的力量——当企业试图控制时,社区有能力重建并超越原有的成就。
2. 插件生态系统是强大的护城河
Jenkins的插件生态系统是其最强大的竞争优势。超过1800个插件支持各种工具和工作流,这种丰富的生态是其他CI工具难以复制的。插件生态系统也降低了用户的迁移成本——一旦配置了Jenkins,迁移到其他工具需要重新配置。
3. 灵活性胜过简单易用
Jenkins以配置复杂著称,但正是这种灵活性让它能够满足各种复杂的CI/CD需求。相比Travis CI、CircleCI等工具的”约定优于配置”,Jenkins提供了几乎无限的定制能力。对于有复杂需求的企业来说,灵活性比简单易用更重要。
4. 自托管的价值
在云CI服务流行的时代,Jenkins的自托管能力仍然是其重要价值。对于数据安全、合规要求严格的企业,能够在自己的基础设施上运行CI/CD是必需的。
5. 适应云原生趋势
Jenkins X的推出展示了Jenkins对云原生趋势的适应。虽然Jenkins X的采用速度不如预期,但云原生化是CI/CD工具发展的必然方向。
6. 开源需要持续的投入
Jenkins的成功得益于Kawaguchi和核心开发者多年的持续投入。开源项目需要长期的维护和社区建设,不是一蹴而就的。
“开源不是关于代码,而是关于社区。如果你不能信任社区,那么你就不应该做开源。当Oracle拒绝捐赠Hudson商标时,我们没有犹豫——社区的价值比商标更重要。分叉的决定是痛苦的,但也是必要的。十五年后,Jenkins支撑着全球数百万个项目的自动化构建,这证明了社区的力量。最好的软件不是由一家公司控制的,而是由一群志同道合的人共同创造的。” —— Kohsuke Kawaguchi,Jenkins创始人