目录
- 技术背景
- 常规的手动打包步骤
- Jenkins
- 简介
- 起源与发展
- Jenkins的核心价值
- 1.自动化
- 1.1代码构建
- 1.2测试自动化
- 1.3自动部署
- 2.持续集成与持续部署
- CI/CD的概念
- 如何减少集成问题
- 更快速地发布软件版本
- Jenkins优势
- Jenkins的主要竞争对手
- Travis CI:
- CircleCI:
- GitLab CI:
- Jenkins与其他工具的比较
- 最佳适用场景:
- Jenkins持续集成流程说明
- 传统部署与Jenkins自动化部署
- 传统部署
- 自动化部署
技术背景
在现代软件开发中,自动化已经成为了一个核心理念。然而在实际开发中,我们经常要一边开发一边测试,当然这里说的测试并不是程序员对自己代码的单元测试,而是同组程序员将代码提交后,由测试人员测试;或者就是前后端分离后,经常会修改接口,然后重新部署;这些情况都会涉及到频繁的打包部署
常规的手动打包步骤
- 提交代码
- 问一下同组小伙伴有没有要提交的代码
- 拉取代码并打包(war包,或者jar包)
- 上传到Linux服务器
- 查看当前程序是否在运行
- 关闭当前程序
- 启动新的jar包
- 观察日志看是否启动成功
- 如果有同事说,自己还有代码没有提交…(-_-|||
那么,有一种工具能够实现,将代码提交到git后就自动打包部署——Jenkins。Jenkins作为自动化的标杆,为我们提供了多种核心功能来简化和加速开发流。
Jenkins
简介
- Jenkins是一个开源的、用Java编写的持续集成和持续交付(CI/CD)工具。
- 它提供了一种简单易用的方式来自动化构建、测试和部署软件。
- Jenkins的主要目标是帮助开发团队加快软件开发过程,提高软件质量,并通过自动化流程减少手动操作和重复性工作。
- 中文官网:https://www.jenkins.io/zh/
起源与发展
Jenkins最初是由Ohloh团队开发的 Hudson 项目的一个分支。Hudson最初是由Kosuke Kawaguchi开发,后来被Sun Microsystems收购并进一步发展。随着Sun Microsystems被Oracle收购,Hudson项目更名为Jenkins,并继续由开源社区维护和发展
Jenkins的核心价值
1.自动化
1.1代码构建
- Jenkins支持多种编程语言和构建工具,从Java的Maven或Gradle,到JavaScript的npm或yarn,再到Python的pip,Jenkins都能轻松应对。
- 这种自动化构建不仅仅是为了编译源代码,它还确保了在每次代码提交后,项目都是可构建的,从而避免了“在我机器上可以运行”的问题。
1.2测试自动化
- 仅仅构建代码并不足够。我们还需要确保代码的质量和功能的正确性。
- 通过Jenkins,我们可以轻松地在每次代码提交或定期的基础上运行测试用例,从单元测试到集成测试再到UI测试。
1.3自动部署
- 当代码被成功构建并通过所有测试后,下一步就是将其部署到目标环境中。
- 不论是传统的物理服务器、虚拟机,还是现代的容器和云平台,Jenkins都可以与各种部署工具和平台集成,实现代码的自动部署。
2.持续集成与持续部署
持续集成与持续部署(简称CI/CD)是现代软件交付的基石,而Jenkins正是这一过程中的关键角色。
CI/CD的概念
-
持续集成 (CI): CI指的是在开发过程中频繁地(通常是每天)将代码集成到主干,然后运行自动化测试来验证代码质量。
-
持续部署 (CD): CD则是确保软件在任何时候都处于可以部署的状态,并允许在短时间内将新功能、改进和修复推送到生产环境。
如何减少集成问题
持续集成鼓励开发者频繁提交代码,从而早期发现并解决集成问题。当每次代码提交都经过自动化测试,团队可以迅速地发现并修复问题,而不是在发布前的集成阶段。这样可以降低风险,提高软件质量,并加速交付周期。
更快速地发布软件版本
持续部署意味着软件在完成开发后可以立即部署。没有了繁琐的手工部署步骤,新功能和修复可以更快地达到用户手中。这种快速迭代的能力使得团队能够更好地响应市场需求,提高用户满意度和业务价值。
Jenkins优势
-
持续集成
Jenkins支持通过持续集成管道(Pipeline)来自动化构建、测试和部署。它能够检测代码的变更,并触发相应的构建和测试过程,确保及时地发现和解决问题。
在持续集成和持续部署的世界中,集成能力是关键。Jenkins以其卓越的集成能力脱颖而出。- 与众多开发和运维工具的整合: Jenkins可以与众多的版本控制工具(如Git、SVN)、构建工具、测试框架、代码质量评估工具、部署平台等进行整合。这确保了软件交付流水线的流畅和自动化。
- 构建链的自动化: Jenkins支持创建复杂的构建链,从代码提交到生产部署,每一个环节都可以自动化。这样,开发者可以专注于编写代码,而Jenkins负责处理编译、测试和部署的繁琐工作。
-
插件生态系统
Jenkins拥有丰富的插件生态系统,可以扩展各种功能和集成其他工具。无论是构建工具、版本控制系统、测试框架还是部署平台,都可以通过插件进行集成,满足不同项目的需求。 -
可扩展性
Jenkins具有良好的可扩展性,可以根据项目的需求进行定制和配置。它支持并行化构建和分布式构建,可以在多个节点上执行任务,提高构建的效率和并发能力。 -
多平台支持
Jenkins可以运行在各种操作系统上,包括Windows、Linux和Mac OS等。它也可以与各种开发工具和平台无缝集成,适用于不同的开发环境。 -
可视化界面
Jenkins提供了直观的用户界面,方便用户进行配置、监控和管理。用户可以通过Web界面轻松地创建和管理任务,查看构建结果和日志等信息
Jenkins的主要竞争对手
Travis CI:
- 概述: Travis CI是一个基于云的CI/CD服务,为开源项目提供免费构建。
- 特点: 它完美地与GitHub集成,配置简单,支持多种语言和环境。
CircleCI:
- 概述: CircleCI也是一个基于云的持续集成和交付平台。
- 特点: 它提供了Docker支持、并行运行任务等高级特性,使得构建更快、更灵活。
GitLab CI:
- 概述: GitLab不仅仅是一个版本控制平台,它的CI/CD工具GitLab CI使其成为了一个完整的DevOps平台。
- 特点: 与GitLab紧密集成、自动化的DevOps流水线、Kubernetes支持等。
Jenkins与其他工具的比较
工具 | 优势 | 劣势 |
---|---|---|
Jenkins | 插件生态丰富,可扩展性强。 长期的社区支持和成熟度。 灵活性高,适合多种环境和需求。 | 由于历史原因,某些部分的界面和体验可能显得过时。 需要自己托管和维护。 |
Travis CI & CircleCI | 完全云基础的,不需要自己托管。 良好的GitHub集成。 为开源项目提供免费计划。 | 对于大型企业可能显得功能不足。 可能存在计费问题,特别是对于大量的构建任务。 |
GitLab CI | 完整的DevOps解决方案,从源代码管理到CI/CD。 强大的Kubernetes集成。 | 对于只需要CI/CD的团队来说,可能有些功能过多或冗余。 |
最佳适用场景:
工具 | 场景 |
---|---|
Jenkins | 当需要高度定制化或特定于环境的流水线时,或在拥有复杂的工作流和大量的插件需求时,Jenkins是一个理想的选择 |
Travis CI & CircleCI | 对于小到中型的项目,特别是GitHub项目,它们是很好的选择。特别是当你希望迅速启动并无需管理基础设施时。 |
GitLab CI | 当需要一个完整的DevOps平台,包括源代码管理、代码审查、CI/CD和监控时,GitLab CI是一个强大的选项。 |
Jenkins持续集成流程说明
- 首先,开发人员每天进行代码提交,提交到 Git 仓库,测试人员进行合并;
- 然后, Jenkins 作为持续集成工具,使用 Git 工具到 Git 仓库拉取代码到集成服务器,再配合 JDK ,Maven 等软件完成代码编译,代码测试与审查,测试,打包等工作,在这个过程中每一步出错,都重新再执行一次整个流程。
- 最后, Jenkins 把生成的 jar 或 war 包分发到测试服务器或者生产服务器,测试人员或用户就可以访问应用。
传统部署与Jenkins自动化部署
传统部署
自动化部署
搭建上述持续集成环境可以把整个构建、部署过程自动化,很大程度上减轻工作量。对于程序员的日常开发来说不会造成任何额外负担——自己把代码提交上去之后,服务器上运行的马上就是最新版本,一切都发生在无形中。
下一章:Jenkins安装与部署