# 一、jenkins 是什么?

Jenkins 是一个开源的、提供友好操作界面的持续集成(CI)工具,起源于 Hudson(Hudson 是商用的),主要用于持续、自动的构建/测试软件项目、监控外部任务的运行(这个比较抽象,暂且写上,不做解释)。Jenkins 用 Java 语言编写,可在 Tomcat 等流行的 servlet 容器中运行,也可独立运行。通常与版本管理工具(SCM)、构建工具结合使用。常用的版本控制工具有 SVN、GIT,构建工具有 Maven、Ant、Gradle。

主要用于:

  1. 持续、自动地构建/测试软件项目。
  2. 监控一些定时执行的任务。 Jenkins 拥有的特性包括:
  3. 易于安装-只要把 jenkins.war 部署到 servlet 容器,不需要数据库支持。
  4. 易于配置-所有配置都是通过其提供的 web 界面实现。
  5. 集成 RSS/E-mail 通过 RSS 发布构建结果或当构建完成时通过 e-mail 通知。
  6. 生成 JUnit/TestNG 测试报告。
  7. 分布式构建支持 Jenkins 能够让多台计算机一起构建/测试。
  8. 文件识别:Jenkins 能够跟踪哪次构建生成哪些 jar,哪次构建使用哪个版本的 jar 等。
  9. 插件支持:支持扩展插件,你可以开发适合自己团队使用的工具。

# 二、CI/CD 是什么?

CI(Continuous integration,中文意思是持续集成)是一种软件开发时间。持续集成强调开发人员提交了新代码之后,立刻进行构建、(单元)测试。根据测试结果,我们可以确定新代码和原有代码能否正确地集成在一起。借用网络图片对 CI 加以理解。

CD(Continuous Delivery, 中文意思持续交付)是在持续集成的基础上,将集成后的代码部署到更贴近真实运行环境(类生产环境)中。比如,我们完成单元测试后,可以把代码部署到连接数据库的 Staging 环境中更多的测试。如果代码没有问题,可以继续手动部署到生产环境。下图反应的是 CI/CD 的大概工作模式。 jenkins