官方网址:https://www.jenkins.io/
CI/CD是什么?
CI(Continuous integration,中文意思是持续集成)是一种软件开发实践。持续集成强调开发人员提交了新代码之后,立刻进行构建、(单元)测试。根据测试结果,我们可以确定新代码和原有代码能否正确地集成在一起。借用网络图片对CI加以理解。
CD(Continuous Delivery, 中文意思持续交付)是在持续集成的基础上,将集成后的代码部署到更贴近真实运行环境(类生产环境)中。比如,我们完成单元测试后,可以把代码部署到连接数据库的Staging环境中做更多的测试。如果代码没有问题,可以继续手动部署到生产环境。下图反应的是CI/CD 的大概工作模式。
什么是Jenkins
Jenkins可以运行插件来支持构建、部署和自动化任何项目。
管道(pipeline)
官方资料: https://www.jenkins.io/doc/book/pipeline/
什么是pipeline
pipeline由一系列插件组成,它可以在Jenkins中实现并整合持续交付。
可以使用Jenkinsfile或者UI界面定义一个pipeline。
pipeline中的概念
Node
node是Jenkins环境中的一个机器,有能力执行pipeline。
Stage
pipeline中会有很多的任务,这些任务的子集构成了Stage。
Step
step就是pipeline中的一个单一任务,会明确的描述Jenkins在某个时间点做什么。
Blue Ocean
官方资料:https://www.jenkins.io/doc/book/blueocean/
什么是Blue Ocean
Blue Ocean提供pipeline的可视化。
特性:
- 对于持续集成pipeline,提供精细的可视化。
- pipeline编辑器。
- 个性化。适应团队中每个人的角色。
- 非常精确。用户提出的要求,可以很快的被满足。
- 对于分支和pull请求,提供原生的整合。
Jenkins架构
网络流图
展示网络进入jenkins和离开jenkins的过程。如下图所示:
模型
对Jenkins应用进行高层级概览。如下图所示:
┌─────────────────────────────────────────┐ ┌─────────────────────┐ ┌─────────────┐
│ Automation, machine to machine │ │ End users/Browsers │ │ Agents │
│ command line prompt (curl, wget..) │ │ │ │ │
└─────────▲─────────────────────▲─────────┘ └───────────▲─────────┘ └───────▲─────┘
│ │ │ │
│ │ │ │
│ │ │ │
┌───────────▼───────────┬─────────▼───────────┬─────────────▼───────────┬─────────▼──────┐
│ Command line CLI │ HTTP Endpoints │ Web user interface │ Remoting │
├───────┬───────────────│ │ │ │
│ SSH │ websocket │ │ (Jelly /Groovy views) │ │
│ │ or HTTP │ │ │ │
│ ├───────────────┴─────────────────────┴─────────────────────────┤ │
│ │ │ │
│ │ Stapler: security, routing, requests processing │ │
│ │ │ │
├───────┴───────────────────────────────────────────────────────────────┴────────────────┤
│ │
│ Business layer: models, processing, scheduling │
│ │
├────────────────────────────────────────────────────────────────────────────────────────┤
│ │
│ Storage layer: XML files on JENKINS_HOME │
│ │
└────────────────────────────────────────────────────────────────────────────────────────┘
插件可以为jenkins添加特性,所以从定义上来讲,业务层的内容是无限的。
Web框架
Jenkins使用Stapler将类绑定到URL上,绑定会依据特定的规则进行。
扩展
Jenkins在接口和抽象类中定义了扩展点,方便插件实现这些扩展点。
远程操作
Jenkins提供了一个jar来支持远程操作,其实现了Jenkins的通信层。这个通信层支持controller <=> agent 和 controller <=> CLI 交互操作。
总结
简单理解,jenkins就是在代码变更后自动进行构建、测试和部署的一个工具,可以运行插件。
参考资料
1、官方资料:https://www.jenkins.io/doc/
2、百度百科:https://baike.baidu.com/item/Jenkins/10917210?fr=aladdin