Jenkins--持续集成及Jenkins介绍

目录

一、持续集成及Jenkins介绍

1. 软件开发生命周期

软件开生命周期又叫做SDLC(Software Development Life Cycle),它是集合了计划、开发、测试和部署过程的集合。如下图所示:

1.1 需求分析

这是生命周期的第一阶段,根据项目需求,团队执行一个可行性计划的分析。项目需求可能是公司内部或者客户提出的 。这阶段主要是对信息的收集,也有可能是对现有项目的改善和重新做一个新的项目。还要分析项目的预算多长,可以从哪方面收益及布局,这也是项目创建的目标。

1.2 设计

第二阶段就是设计阶段,系统架构和满意状态(就是要做成什么样子,有什么功能),和创建一个项目计划。计划可以使用图标,布局设计或者文章的方式呈现。

1.3 实现

第三阶段就是实现阶段,项目经理和分配工作给开发者,开发者根据任务和在设计阶段定义的目标进行开发代码。依据项目的大小和复杂程度,可能需要数月或更长时间才能完成。

1.4 测试

测试人员进行代码测试,包括功能测试、代码测试、压力测试等。

1.5 进化

最后阶段就是对产品不断的进化改进和维护阶段,根据用户的使用情况,可能需要对某功能进行修改,bug修复,功能增加等。

2. 软件开发者瀑布模型

瀑布模型是最著名和最常使用的软件开发模型。瀑布模型就是一系列的软件开发过程。它是由制造业繁衍出来的。一个高度化的结构流程在一个方向上流动,有点像生产线一样。在瀑布模型创建之初,没有其他开发的模型,有很多东西全靠开发人员去猜测,去开发。这样的模型仅适用于那些简单的软件开发,但是已经不适合现在的开发了。

下图是对软件开发模型的一个阐述。

优势 劣势
简单易用和理解 各个阶段的划分完全固定,阶段之间产生大量的文档,极大地增加了工作量
当前一阶段完成后,只需要去关注后续阶段 由于开发模型是线性的,用户只有等到整个过程的末期才能见到开发成果,从而增加了开发风险
为项目提供了按阶段划分的检查加点 瀑布模型的突出缺点是不适应用户需求的变化

3. 软件的敏捷开发

3.1 敏捷开发简介

敏捷开发(Agile Development)的核心是迭代开发(Iterative Development)与增量开发(Incremental Development)。

3.1.1 迭代开发介绍

对于大型软件项目,传统的开发方式是采用一个大周期(比如一年)进行开发,整个过程就是一次“大开发”;迭代开发的方式则不一样,它将开发过程拆分成多个小周期,即一次“大开发”变成多次“小开发”,每次小开发都是同样的流程,所以看上去就好像重复在做同样的步骤。

举例来说,SpaceX公司想做一个大推力火箭,将人类送到火星。但是,它不是一开始就造大火箭,而是先造一个最简陋的小火箭Falcon 1。结果,第一次发射就爆炸了,知道第四次发射,才成功进入轨道。然后,开发了中型火箭Falcon 9,九年中发射了70次。最后,才开发Falcon重型火箭。如果SpaceX不采用迭代开发,它可能直到现在还无法上天。

3.1.2 增量开发介绍

软件的每个版本,都会新增一个用户可以感知的完整功能。也就会说,按照新增功能来划分迭代。

举例来说,房产公司开发一个10栋楼的小区。如果采用增量开发的模式,该公司第一个迭代就是交付一号楼,第二个迭代交付二号楼……每个迭代都是完成一栋完整的楼。而不是第一个迭代挖好10栋楼的地基,第二个迭代建好每栋楼的骨架,第三个迭代架设屋顶……

3.2 敏捷开发如何迭代

虽然敏捷开发将软件开发分成多个迭代,但是也要求,每次迭代都是一个完整的软件开发周期,必须按照软件工程的方法论,进行正规的流程管理。

3.3 敏捷开发的好处

3.3.1 早期交付

敏捷开发的第一个好处,就是早期交付,从而大大降低成本。

还是以上一节的房产公司为例,如果按照传统的“瀑布开发模式”,先挖10栋楼的地基,再盖骨架,然后架设屋顶,每个阶段都等到前一个阶段完成后开始,可能需要两年才能一次性交付10栋楼,也就是说,如果不考虑预售,该项目必须等到两年后才能回款。

敏捷开发是六个月后交付一号楼,后面每两个交付一栋楼。因此,半年就能回款10%,后面每个月都会有现金流,资金压力就大大减轻了。

3.3.2 降低风险

敏捷可开发的第二个好处是,及时了解市场需求,降低产品不适用的风险。

请想一想,哪一种情况损失比较小,10栋楼都造好以后,才发现卖不出去。还是造好第一栋楼,就发现卖不出去,从而改进或停建后面90栋楼

4. 持续集成介绍

持续集成(Continuous integration,简称Ci)指的是,频繁地(一天多次)将代码集成到主干。

持续集成的目的,就是让产品可以快速迭代,同时还能保持高质量。它的核心措施是,代码集成到主干之前,必须通过自动化测试,只要有一个测试用例失败,就不能集成。

通过持续集成,团队可以快速的从一个功能到另一个功能,简而言之,敏捷软件开发很大一部分都要归功于持续集成。

4.1 持续集成的流程



根据持续集成的设计,代码从提交到生产,整个过程有以下几步。

4.1.1 提交

流程的第一步,是开发者向代码仓库提交代码。所有后面的步骤都始于本地代码的一次提交(commit)。

4.1.2 测试(第一轮)

代码仓库对commit操作配置了钩子(hook),只要提交代码或者合并进主干,就会跑自动化测试。

4.1.3 构建

通过第一轮测试,代码就可以合并进主干,就算可以交付了。

交付后,就先进行构建(build),再进入第二轮测试。所谓构建,指的是将源码转换为可以运行的实际代码,比如安装依赖,配置各种资源(样式表、JS脚本、图片)等等。

4.1.4 测试(第二轮)

构建完成,就要进行第二轮测试。如果第一轮已经涵盖了所有测试内容,第二轮可以省略,当然,这步构建步骤也要移到第一轮测试前面。

4.1.5 部署

过了第二轮测试,当前代码就是一个可以直接部署的版本(artifact)。将这个版本的所有文件打包(tar filename.tar *)存档,发到生产服务器。

4.1.6 回滚

一旦当前按本发生问题,就要回滚到上一个版本的构建结果。最简单的做法就是修改一下符号链接,指向上一个版本的目录。

4.2 持续集成的组成要素

● 一个自动构建过程,从检出代码、编译构建、运行测试、结果记录、测试统计等都是自动完成的,无需人工干预。

● 一个代码存储库,即需要版本控制软件来保障代码的可维护性,同时作为构建过程的素材库,一般使用SVN或Git。

● 一个持续集成服务器,jenkins就是一个配置简单和使用方便的持续集成服务器。

4.3 持续集成的好处

  1. 降低风险,由于持续集成不断去构建,编译和测试,可以很早期发现问题,所以修复的代价就少;
  2. 对系统健康持续检查,减少发布风险带来的问题;
  3. 减少重复性工作;
  4. 持续部署,提供可部署单元包;
  5. 持续交付可供使用的版本;
  6. 增强团队信息。

4. Jenkins介绍



Jenkins是一款流行的开源持续集成(Continuous Integration)&持续交付(Continous Delivery)工具,广泛用于项目开发,具有自动化构建、测试和部署等功能。

官网:http://jenkins-ci.org/

Jenkins的特征

● 开源的Java语言开发持续集成工具,支持持续集成,持续部署。

● 易于安装部署配置:可通过yum安装或下载war包以及通过docker容器等快速实现安装部署,可方便web界面配置管理。

● 消息通知及测试报告:集成RSS/E-mail通过RSS发布构建结果或当构建完成时通过e-mail通知,生成JUnit/TestNG测试报告。

● 分布式构建:支持Jenkins能够让多台计算机一起构建/测试。

● 文件识别:Jenkins能够跟踪哪次构建生成哪些jar,哪次构建使用哪个版本jar等。

● 丰富的插件支持:支持扩展插件,你可以开发适合自己团队使用的工具,如git,svn,maven,docker等。

二、Jenkins安装和持续集成环境部署

1. 持续集成流程说明

  1. 首先,开发人员每天进行代码提交,提交到Git仓库
  2. 然后,Jenkins作为持续成工具,使用Git工具到Git仓库拉取代码到集成服务器,再配合JKD,Maven等软件完成代码编译,代码测试与审查,测试,打包等工作,在这个过程中每一步出错,都重新再执行一次整个流程。
  3. 最后,Jenkins把生成的jar或war包分发到测试服务器或者生产服务器,测试人员或用户就可以访问应用。

2. 服务器列表

|名称|主机名|IP地址|安装的软件|

|---|---|---|

|代码托管服务器|gitlab_server|192.168.66.100|GitLab-12.4.2|

|持续集成服务器|jenkins_server|192.168.66.101|Jenkins-2.190.3,JDK1.8,Maven3.6.2,Git,SonarQube|

|应用测试服务器|test_server|192.168.66.102|JDK1.8,Tomcat8.5|

注:本实验虚拟机使用的是Centos 7.4。

3. GitLab代码托管服务器安装

3.1 GitLab简介



官网:https://about.gitlab.com/

GitLab是一个用于仓库管理系统的开源项目,使用Git作为代码管理工具,并在此基础上搭建起来的web服务。

GitLab和GitHub一样属于第三方基于Git开发的作品,免费且开源(基于MIT协议),与GitHub类似,可以注册用户,任意提交你的代码,添加SSHKey等等。不同的是,Gitlab是可以部署到自己的服务器上,数据库等一切信息都掌握在自己手上,适合内部团队协作开发,你总不可能把团队内部的智慧总放在别人的服务器上吧?简单来说可把GitLab看做个人版的GitHub。

3.2 GitLab安装

3.2.1 安装相关依赖

yum -y install policycoreutils openssh-server openssh-clients postfix

[root@gitlab_server ~]# yum -y install policycoreutils openssh-server openssh-clients postfix
3.2.2 启动ssh服务&设置为开机启动

systemctl enable --now sshd

[root@gitlab_server ~]# systemctl enable --now sshd
3.2.3 设置postfix开机自启,并启动,postfix支持gitlab发信功能

systemctl enable --now postfix

[root@gitlab_server ~]# systemctl enable --now postfix
3.2.4 开放ssh以及http服务,然后重新加载防火墙列表

firewall-cmd --add-service=ssh --permanent

firewall-cmd --add-service=http --permanent

firewall-cmd --reload

[root@gitlab_server ~]# firewall-cmd --add-service=ssh --permanent
Warning: ALREADY_ENABLED: ssh
success
[root@gitlab_server ~]# firewall-cmd --add-service=http --permanent
success
[root@gitlab_server ~]# firewall-cmd --reload
success

注:如果关闭防火墙就不需要做以上配置

3.2.5 下载gitlab包,并且安装

在线下载安装包:

wget https://mirrors.tuna.tsinghua.edu.cn/gitlab-ce/yum/el6/gitlab-ce-12.4.2-ce.0.el6.x86_64.rpm

[root@gitlab_server ~]# wget https://mirrors.tuna.tsinghua.edu.cn/gitlab-ce/yum/el6/gitlab-ce-12.4.2-ce.0.el6.x86_64.rpm
--2021-11-09 23:21:48-- https://mirrors.tuna.tsinghua.edu.cn/gitlab-ce/yum/el6/gitlab-ce-12.4.2-ce.0.el6.x86_64.rpm
正在解析主机 mirrors.tuna.tsinghua.edu.cn (mirrors.tuna.tsinghua.edu.cn)... 101.6.15.130, 2402:f000:1:400::2
正在连接 mirrors.tuna.tsinghua.edu.cn (mirrors.tuna.tsinghua.edu.cn)|101.6.15.130|:443... 已连接。
错误: 无法验证 mirrors.tuna.tsinghua.edu.cn 的由 “/C=US/O=Let's Encrypt/CN=R3” 颁发的证书:
颁发的证书已经过期。
要以不安全的方式连接至 mirrors.tuna.tsinghua.edu.cn,使用“--no-check-certificate”。
#证书过期,可通过--no-check-certificate不检查证书的方式进行下载
[root@gitlab_server ~]# wget https://mirrors.tuna.tsinghua.edu.cn/gitlab-ce/yum/el6/gitlab-ce-12.4.2-ce.0.el6.x86_64.rpm --no-check-certificate

安装:

rpm -i gitlab-ce-12.4.2-ce.0.el6.x86_64.rpm

[root@gitlab_server ~]# rpm -i gitlab-ce-12.4.2-ce.0.el6.x86_64.rpm
3.2.6 修改gitlab配置

vi /etc/gitlab/gitlab.rb

修改gitlab访问地址和端口,默认为80,我们改为82

external_url 'http://192.168.66.100:82'

nginx['listen_port']=82

[root@gitlab_server ~]# vi /etc/gitlab/gitlab.rb
#23行,修改
external_url 'http://192.168.66.100:82'
#1112行,取消注释并修改
nginx['listen_port'] = 82
3.2.7 重载配置及启动gitlab

gitlab-ctl reconfigure

gitlab-ctl restart

[root@gitlab_server ~]# gitlab-ctl reconfigure
[root@gitlab_server ~]# gitlab-ctl restart
3.2.8 把端口添加到防火墙

firewall-cmd --zone=public --add-port=82/tcp --permanent

firewall-cmd --reload

[root@gitlab_server ~]# firewall-cmd --zone=public --add-port=82/tcp --permanent
success
[root@gitlab_server ~]# firewall-cmd --reload
success

启动成功后,访问http://192.168.66.100:82 看到以下修改管理员root密码的页面,修改密码,然后登陆即可



3.3 GitLab添加组、创建项目、创建用户

3.3.1 创建组

使用管理员root创建组,一个组里面可以有多个项目分支,可以将开发添加到组里面进行设置权限,不同的组就是公司不同的开发项目或者服务模块,不同的组添加不同的开发即可实现对开发设置权限的管理。





设置完成后,点击“Create group”



项目组创建成功。

3.3.2 创建项目

项目组创建成功后,可以点击“New project”进行创建项目





完成设置后,点击“Create project”创建项目





项目创建完成。

3.3.3 创建用户









完成设置后,点击“Create user”



用户创建成功,点击“Edit”设置密码



完成密码设置后,点击“Save changes”完成用户创建

3.3.4 为项目组添加用户







● Guest(访客):可以创建issue、发表评论,不能读写版本库

● Reporter(报告者可以理解为测试员、产品经理等):可以克隆代码,不能提交,QA、PM可以赋予这个权限

● Developer(开发者):可以克隆代码、开发、提交、push,普通开发可以赋予这个权限

● Maintainer(维护者,一般是组长):可以创建项目、添加tag、保护分支、添加项目成员、编辑项目,核心开发可以赋予这个权限

● Owner(拥有者,一般是项目经理):可以设置项目访问权限(Visibility Level)、删除项目、迁移项目、管理组成员,开发组组长可以赋予这个权限

项目权限:

行为 Guest Reporter Developer Maintainer Owner
创建issue
留言评论
更新代码
下载项目
创建代码片段
创建合并请求
创建新分支
提交代码到非保护分支
强制提交到非保护分支
移除非保护分支
添加tag
创建wiki
管理issue处理者
管理labels
创建里程碑
添加项目成员
提交保护分支
使能分支保护
修改/移除tag
编辑项目
添加deploy keys
配置hooks
切换Visibility Level
切换项目namespace
移除项目
强制提交保护分支
移除保护分支
注意:关于保护分支的设置,可以进入Settings->Protected branches进行管理

组权限

行为 Guest Reporter Developer Maintainer Owner
浏览组
编辑组
创建项目
管理组成员
移除组
选择完成后,点击“Add users to group”
为test项目组添加用户zhangsan,并授予Owner权限
3.3.5 登录zhangsan用户

退出当前登录账户,使用zhangsan用户名和密码登录







Jenkins--持续集成及Jenkins介绍的更多相关文章

  1. Jenkins持续集成01—Jenkins服务搭建和部署

    一.介绍Jenkins 1.Jenkins概念 Jenkins是一个功能强大的应用程序,允许持续集成和持续交付项目,无论用的是什么平台.这是一个免费的源代码,可以处理任何类型的构建或持续集成.集成Je ...

  2. linux环境下搭建Jenkins持续集成(Jenkins+git+shell+maven+tomact)

    准备环境 jenkins.war包 ,jdk1.8  ,tomact , maven,git 1.Jenkins  war包,下载地址https://jenkins.io/zh/download/  ...

  3. jenkins持续集成:jenkins+SVN

    实现jenkins从svn拉取最新的代码,再执行驱动脚本进行自动化测试 新建一个任务 输入任务名,选“构建一个自由风格的软件项目”,点左下角“确定” 丢弃旧的构建,如下设置为保留3天内的10条构建记录 ...

  4. git+jenkins持续集成二-jenkins定时构建语法:定时构建语法

    构建位置:选择或创建工程_设置_构建触发器 1. 定时构建语法:* * * * * (五颗星,多个时间点,中间用逗号隔开)第一个*表示分钟,取值0~59第二个*表示小时,取值0~23第三个*表示一个月 ...

  5. Jenkins持续集成学习-Windows环境进行.Net开发1

    目录 Jenkins持续集成学习-Windows环境进行.Net开发 目录 前言 目标 使用Jenkins 安装 添加.net环境配置 部署 结语 参考文档 Jenkins持续集成学习-Windows ...

  6. jenkins持续集成工作原理、功能、部署方式等介绍

    超详细的jenkins持续集成工作原理.功能.部署方式等介绍 原创 波波说运维 2019-08-29 00:01:00 概述 今天简单整理了一下jenkins的一些概念性内容,归纳如下: 1.概念 j ...

  7. Jenkins持续集成体系 | 最完整的介绍及资料

    这篇文章是来给大家普及Jenkins知识的, Jenkins能解决什么问题, 有哪些应用场景, 为何要掌握Jenkins, 掌握Jenkins后有哪些好处, 弄懂Jenkins需要掌握哪些知识 不知道 ...

  8. 老李分享:持续集成学好jenkins

    老李分享:持续集成学好jenkins   poptest是国内唯一一家培养测试开发工程师的培训机构,以学员能胜任自动化测试,性能测试,测试工具开发等工作为目标.poptest测试开发工程师就业培训请大 ...

  9. Docker+Jenkins持续集成环境(4):使用etcd+confd实现容器服务注册与发现

    前面我们已经通过jenkins+docker搭建了基本的持续集成环境,实现了服务的自动构建和部署,但是,我们遇到一个问题,jenkins构建出来的镜像部署后,需要通过ip:port去访问,有什么更好的 ...

  10. Docker+Jenkins持续集成环境(5): android构建与apk发布

    项目组除了常规的java项目,还有不少android项目,如何使用jenkins来实现自动构建呢?本文会介绍安卓项目通过jenkins构建的方法,并设计开发一个类似蒲公英的app托管平台. andro ...

随机推荐

  1. 三角网格上的寻路算法Part.1—Dijkstra算法

    背景 最近在研究中产生了这样的需求:在三角网格(Mesh)表示的地形图上给出两个点,求得这两个点之间的地面距离,这条距离又叫做"测地线距离(Geodesic)".计算三角网格模型表 ...

  2. docker的无用镜像

    dangling images build 自己的 docker 镜像的时候,有时会遇到用一个甚至多个中间层镜像,这会一定程度上减少最终打包出来 docker 镜像的大小,但是会产生一些tag 为 n ...

  3. spring cloud --- Ribbon 客户端负载均衡 + RestTemplate ---心得【无熔断器】

    spring boot      1.5.9.RELEASE spring cloud    Dalston.SR1 1.前言 了解了 eureka 服务注册与发现 的3大角色 ,会使用RestTem ...

  4. java如何对接企业微信

    前言 最近实现社群对接企业微信,对接的过程遇到一些点,在此记录. 企业微信介绍 企业微信具有和微信一样的体验,用于企业内部成员和外部客户的管理,可以由此构建出社群生态. 企业微信提供了丰富的api进行 ...

  5. python实现掘金定时签到抽奖

    python实现掘金定时签到抽奖 一. 概述 这里记录一下使用 python 实现掘金定时签到抽奖.首先需要登录掘金,进入签到页面,按 F12 打开浏览器的调试面板,选择 Network,选择 XHR ...

  6. MATLAB绘图入门

    %%%1.运算符:(1).% mean() -->平均值 1.对于一个数组,mean(数组名)则返回均值2.对于一个矩阵,mean(数组名,1或2) 1代表返回矩阵每列的平均值 2代表返回矩阵每 ...

  7. 【刷题-LeetCode】223. Rectangle Area

    Rectangle Area Find the total area covered by two rectilinear rectangles in a 2D plane. Each rectang ...

  8. 【记录一个问题】thanos receiver在更换tsdb文件后,内存并未显著下降

    在16:14,切换了TSDB 在16::15分切换了TSDB,并且上游未写入数据 容器的内存并未在这个时刻明显下降 疑惑: 如果thanos receiver的内存占用不与time series数量正 ...

  9. 【摘抄】疑问chatterbot

    ChatterBot使用哪种机器学习? -------------------------------------------------- -  简而言之,ChatterBot使用了许多不同的机器学 ...

  10. Web开发底层是Servlet

    SpringMVC:是基于spring的一个框架,实际上就是spring的一个模块,专门是做web开发. 可以理解成servlet是一个升级 web开发底层是servlet,框架是在servlet基础 ...