主要内容:Jenkinsj简介、持续集成CI与DevOps、Jenkins功能架构
一、Jenkins简介
Jenkins是一个开源软件项目,是基于Java开发的一种持续集成工具,用于监控持续重复的工作,旨在提供一个开放易用的软件平台,使软件的持续集成CI变成可能。
二、持续集成CI与DevOps
无论是持续集成,还是DevOps,都是指软件开发流程。
软件的开发过程包括:需求、设计、编码、构建、测试、发布、运营。
上述是工业化生产软件的流程,每个环节就是软件生产过程中的一个环节,前一个环节的输出是下一个环节的输入。
每个环节之间都需要进行交接,有不同的团队来实现。
在软件需求快速变化的今天,为了加速软件的开发过程,把软件的自动化开发过程分为四个等级:
持续集成CI =》 持续交付 =》持续部署 =》持续运营与监控
第一个等级:持续集成CI
持续集成 的含义为:一键式软件开发、构建与测试。
这个过程包括:(需求、设计)、编码、构建、打包、测试
以图例说明持续集成的流程:
持续集成强调:
开发人员向代码库提交了新代码之后,
(1)自动完成代码库管理,
(2)自动进行构建Build
(3)自动化打包
(3)自动化测试:自动单元测试、回归测试、集成测试。根据测试结果,确定新代码和原有代码能否正确地集成在一起。如果失败,就会自动回退代码。
Jenkins就是管理自动化集成CI的工具 。
第二个等级:持续交付
交付:就是把软件产品交付给客户的过程
持续交付是在持续集成的基础之上,再增加一个自动的软件发布的环节。
第三个等级:持续部署
部署:就是把软件产品部署到客户现场。
持续部署:是在持续发布的基础之上,在增加一个自动把软件产品部署到客户的现场这个环节,并把部署的结果反馈给开发者则过程。
第四个等级:持续运营与监控
运营:就是利用软件产品给用户提供业务服务并进行盈利的过程。
持续运营与监控:是在持续部署的基础之上,在增加一个自动的软件的运营状况进行监控、数据分析,并把分析的结果直接反馈给开发者,进行实时反馈,实时完善的过程。
DevOps是两个词的缩写,Dev和Operation,即开发与运营。
传统的软件开发,是软件开发Dev和软件的运营Ops是分开的,
DevOps目标就是通过软件自动化,打破这两个环节之间手工或人为的操作,实现者两个环节的自动化连接。
持续的含义:
所谓持续,有几层含义:
(1)独立性:
从软件功能的角度看,持续意味着,每一次的代码提交,都是可以独立的不依赖于其他模块的完整实体。
如,持续集成,就意味着每次提交的代码是可以单独做集成测试的,不依赖其他模块;
持续发布,就意味着每次提交的代码是可以单独的发布给客户安装,不依赖其他模块;
持续部署,就意味着每次提交的代码是可以单独的部署给客户使用,不依赖其他模块;
持续运营,就意味着每次提交的代码是可以直接满足客户的某种业务的需求的,不依赖其他模块;
(2)自动化:
从人工参与的角度看,持续意味着,一键式代码提交后的自动化水平的程度。
要达到上述的“持续”的效果,除了每个环节需要大量的软件工具作为支撑,还需要把各个环节的软件功能集成起来,串接起来。
Jenkins就是这样一个,在软件开发过程中,辅助代码持续集成的管理工具。
三、Jenkins架构
1. 网络连接架构
- Jenkins web server处于整个自动化测试平台的中心,用于调度其他服务器
- 源代码仓库服务器:用来存放和管理源代码,支持软件版本控制。流行的源代码仓库服务有github、SVN
- 编译服务器:对源代码和相互依赖的库文件进行编译,通常需要把源代码库的文件下载到编译服务器上
- 自动化测试服务器:采用自动
- 数据存储服务器和文件服务器,用来存储数据或日志log
2. Jenkins功能架构
四、创建job
1. New Item的类型:
(1)freeStyle Project: 构建一个自由风格的软件项目:这里的所有配置都由自己定义,默认也不会添加特定环境的选项/
(2)构建一个maven项目:Apache Maven
( [`meivn]
)是一个软件项目管理和依赖管理工具。基于项目对象模型(POM
)的概念,Maven
可以通过资源仓库管理项目的构建,报告和文件。利用该项目类型,使用pom文件进行初始化配置,可以减少手动的配置工作、
(3)文件夹:用于组织其他item。
(4)GitHub Organization: 扫描gitHub上所有的仓库,找到符合条件或规则的条目。
(5)多分枝流水线:根据一个SCM仓库中检测到的分枝创建一系列流水线。
(6)External Job:Jenkins可用于监视进程的非交互式执行,例如cron作业,procmail,inetd启动的进程。通常这些任务是完全不受监控的(这使得您在发生错误时很难注意到),或者无论成功或失败都会不断发送电子邮件(导致相同的情况,因为您无论如何都会快速开始忽略它们。)使用Jenkins可以让您以很少的开销监视大量此类任务
2. 在这里,我们选择一个灵活的最大的freeStyle Project,作为案例
(1)General
- Discard old builds:在启动一次新build时,是否要放弃原先的build的内容
- Github项目:是否是GitHub项目
- This build requires lockable resources:是否需要锁定的资源
-
throttle builds:节流构建,通过设置时间段内允许并发的次数来实现构建的控制
-
disable this project:是否disable该project
-
如果必要,会进行并行build
(2)Source Code Management
源代码仓库如果是github的话,需要指定github的位置。
(3)Build Triggers:如何触发自动build
- 远程的脚本的build请求。
- 在某个project build完成后,就build此项目
- 周期性的build
- GitHub hook触发
- 通过SCM的查询来判断是否需要构建build
(4)Build Environment:build的环境设置
- 在启动一次性的build之前,清除workspace空间
- 使用加密的文本和文件
- 如果stuck了,这放弃此次build
- 在输出信息中添加时间戳。
(5)Build:这部分是核心
添加需要build的所有步骤(即需要执行的脚本)
(6)Post-build Actions:自动构建后,需要执行的所有步骤或操作(需要执行的脚本)
添加需要build完成后的需要额外执行的所有步骤(即需要执行的脚本)
这里通常是进行自动化测试!