Jenkins持续集成,原来那么简单

Jenkins持续集成,原来那么简单1 软件开发生命周期软件开发生命周期又叫做 SDLC SoftwareDeve 它是集合了计划 开发 测试和部署过程的集合

大家好,欢迎来到IT知识分享网。

1、持续基础介绍

  • 需求分析
    这是生命周期的第一阶段,根据项目需求,团队执行一个可行性计划的分析。项目需求可能是公司内部或者客户提出的。这阶段主要是对信息的收集,也有可能是对现有项目的改善和重新做一个新的项目。还要分析项目的预算多长,可以从哪方面受益及布局,这也是项目创建的目标。
  • 设计
    第二阶段就是设计阶段,系统架构和满意状态(就是要做成什么样子,有什么功能),和创建一个
  • 项目
    计划。计划可以使用图表,布局设计或者文者的方式呈现。
  • 实现
    优势劣势简单易用和理解各个阶段的划分完全固定,阶段之间产生大量的文档,极大地
    增加了工作量。当前一阶段完成后,您只需要去关注后续阶段。由于开发模型是线性的,用户只有等到整个过程的末期才能见到开发成果,从而增加了开发风险。为项目提供了按阶段划分的检查节点瀑布模型的突出缺点是不适应用户需求的变化。
    第三阶段就是实现阶段,项目经理创建和分配工作给开者,开发者根据任务和在设计阶段定义的目标进行开发代码。依据项目的大小和复杂程度,可以需要数月或更长时间才能完成。


  • 测试
    测试人员进行代码测试 ,包括功能测试、代码测试、压力测试等。
  • 进化
    最后进阶段就是对产品不断的进化改进和维护阶段,根据用户的使用情况,可能需要对某功能进行修改,bug修复,功能增加等。

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

敏捷开发(Agile Development) 的核心是迭代开发(Iterative Development) 与 增量开发
(Incremental Development) 。
何为迭代开发?
对于大型软件项目,传统的开发方式是采用一个大周期(比如一年)进行开发,整个过程就是一次”大开发”;迭代开发的方式则不一样,它将开发过程拆分成多个小周期,即一次”大开发”变成多次”小开发”,每次小开发都是同样的流程,所以看上去就好像重复在做同样的步骤。
举例来说,SpaceX 公司想造一个大推力火箭,将人类送到火星。但是,它不是一开始就造大火箭,而是先造一个最简陋的小火箭 Falcon 1。结果,第一次发射就爆炸了,直到第四次发射,才成功进入轨道。然后,开发了中型火箭 Falcon 9,九年中发射了70次。最后,才开发 Falcon 重型火箭。如果SpaceX 不采用迭代开发,它可能直到现在还无法上天。
何为增量开发?
软件的每个版本,都会新增一个用户可以感知的完整功能。也就是说,按照新增功能来划分迭代。
举例来说,房产公司开发一个10栋楼的小区。如果采用增量开发的模式,该公司第一个迭代就是交付一号楼,第二个迭代交付二号楼…每个迭代都是完成一栋完整的楼。而不是第一个迭代挖好10栋楼的地基,第二个迭代建好每栋楼的骨架,第三个迭代架设屋顶…
敏捷开发如何迭代?
虽然敏捷开发将软件开发分成多个迭代,但是也要求,每次迭代都是一个完整的软件开发周期,必须按照软件工程的方法论,进行正规的流程管理。
在这里插入图片描述
敏捷开发有什么好处?
早期交付

敏捷开发的第一个好处,就是早期交付,从而大大降低成本。 还是以上一节的房产公司为例,如果按照传统的”瀑布开发模式”,先挖10栋楼的地基、再盖骨架、然后架设屋顶,每个阶段都等到前一个阶段完成后开始,可能需要两年才能一次性交付10栋楼。也就是说,如果不考虑预售,该项目必须等到两年后才能回款。 敏捷开发是六个月后交付一号楼,后面每两个月交付一栋楼。因此,半年就能回款10%,后面每个月都会有现金流,资金压力就大大减轻了。
降低风险
敏捷开发的第二个好处是,及时了解市场需求,降低产品不适用的风险。 请想一想,哪一种情况损失比较小:10栋楼都造好以后,才发现卖不出去,还是造好第一栋楼,就发现卖不出去,从而改进或停建后面9栋楼?
什么是持续集成
持续集成( Continuous integration , 简称 CI )指的是,频繁地(一天多次)将代码集成到主干。
持续集成的目的,就是让产品可以快速迭代,同时还能保持高质量。它的核心措施是,代码集成到主干之前,必须通过自动化测试。只要有一个测试用例失败,就不能集成。
通过持续集成, 团队可以快速的从一个功能到另一个功能,简而言之,敏捷软件开发很大一部分都要归功于持续集成。
持续集成的流程
在这里插入图片描述

























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

  • 提交
  • 测试(第一轮)

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

  • 构建
  • 测试(第二轮)

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

  • 部署
  • 回滚
  • 一个自动构建过程, 从检出代码、 编译构建、 运行测试、 结果记录、 测试统计等都是自动完成 的, 无需人工干预。
  • 一个代码存储库,即需要版本控制软件来保障代码的可维护性,同时作为构建过程的素材库,一般 使用SVN或Git。
  • 一个持续集成服务器, Jenkins 就是一个配置简单和使用方便的持续集成服务器。
    在这里插入图片描述

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





2、Jenkins介绍

在这里插入图片描述

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

官网: 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等。

3、Jenkins安装和持续集成环境配置

3.1 Centos7安装gitlab

在这里插入图片描述

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

(1) 安装相关依赖

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

(2)启动ssh服务&设置为开机启动

systemctl enable sshd && sudo systemctl start sshd 

(3)设置postfix开机自启,并启动,postfix支持gitlab发信功能

systemctl enable postfix && systemctl start postfix 

(4) 开放ssh以及http服务,然后重新加载防火墙列表

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

如果关闭防火墙就不需要做以上配置
(5) 下载gitlab包,并且安装
在线下载安装包:

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

安装:【若有安装包可以直接执行以下命令安装】

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

(6) 修改gitlab配置

vim /etc/gitlab/gitlab.rb 

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

external_url 'http://192.168.66.100:82' nginx['listen_port'] = 82 

(7) 重载配置及启动gitlab

gitlab-ctl reconfigure gitlab-ctl restart 

(8)把端口添加到防火墙

firewall-cmd --zone=public --add-port=82/tcp --permanent firewall-cmd --reload 
访问:http://192.168.32.111:82 

在这里插入图片描述
登录后:
在这里插入图片描述

3.2 私仓gitlab使用

注意:regular:用于普通用户,只能访问属于他的组和项目 admin则是管理员级别,可以访问所有组和项目

在这里插入图片描述
点击用户
在这里插入图片描述
在这里插入图片描述
修改密码
在这里插入图片描述




  • Guest:可以创建issue、发表评论,不能读写版本库
  • Reporter:可以克隆代码,不能提交,QA、PM 可以赋予这个权限
  • Developer :可以克隆代码、开发、提交、push,普通开发可以赋予这个权限
  • Maintainer:可以创建项目、添加tag、保护分支、添加项目成员、编辑项目,核心开发可以赋予这个 权限
  • Owner :可以设置项目访问权限-Visibility Level、删除项目、迁移项目、管理组成员,开发组组 长可以赋予这个权限

Gitlab用户在组里面有5种不同权限:客人:可以创建问题,发表评论,不能读写版本库记者:可以克隆代码,不能提交,QA,下午可以赋予这个权限开发人员:可以克隆代码,开发,提交,推动,普通开发可以赋予这个权限维护者:可以创建项目,添加标签,保护分支,添加项目成员,编辑项目,核心开发可以赋予这个权限所有者:可以设置项目访问权限以水平,删除项目,迁移项目,管理组成员,开发组组长可以赋予这个权限

最后用新用户重新登录即可

3.3 Jenkins安装

A:实机安装

(1)到官网下载安装包

https://jenkins.io/zh/download/

3、配置环境变量的配置文件vim /etc/profile

JAVA_HOME=/opt/jdk1.8.0_122 PATH=$JAVA_HOME/bin:$PATH CLASSPATH=$JAVA_HOME/lib:. export JAVA_HOME PATH CLASSPATH 

https://mirrors.tuna.tsinghua.edu.cn/jenkins/redhat-stable/?C=M&O=D

rpm -ivh jenkins-2.346.3-1.1.noarch.rpm 

注意:需要考虑jdk的版本与jenkins兼容性,这次使用的版本是jdk8最后一个支持的版本

在这里插入图片描述
(4)修改Jenkins配置

vim /etc/sysconfig/jenkins 

修改内容如下:

systemctl start jenkins 

新版本启动或关闭需要进到以下目录

 cd /etc/init.d # 输入此命令启动 ./jenkins start # 关闭命令 ./jenkins stop # 重启命令 ./jenkins restart 

(6)打开浏览器访问【ip按实际jenkins部署机子为准】

http://192.168.32.xxx:8888

注意:本服务器把防火墙关闭了,如果开启防火墙,需要在防火墙添加端口

端口放开: firewall-cmd –zone=public –add-port=8888/tcp –permanent

在这里插入图片描述
密码则需要带安装jenkins的机子下的取:

cat /var/lib/jenkins/secrets/initialAdminPassword 
cd /var/lib/jenkins/updates 

2、备份原文件

 mv default.json default_bak.json 

3、下载国内配置文件并将下载文件名改为default.json

wget https://mirrors.tuna.tsinghua.edu.cn/jenkins/updates/dynamic-2.346/update-center.json mv update-center.json default.json 

4、重启一下jenkins

./jenkins restart 

5、页面修改镜像

https://mirrors.tuna.tsinghua.edu.cn/jenkins/updates/dynamic-2.346/update-center.json

在这里插入图片描述
6、下载汉化插件
Jenkins->Manage Jenkins->Manage Plugins,点击Available,搜索”Chinese”
在这里插入图片描述
在这里插入图片描述
等待下载完,重起一下即可
勾选该选项下载完就会自动重启
在这里插入图片描述
或直接修改url







 docker pull jenkins/jenkins:2.470 

(2)启动容器

docker run --name jenkins -p 8888:8080 -p 50000:50000 -v /var/jenkins_home:/var/jenkins_home -d jenkins/jenkins:2.470 

注意:jenkins默认是8080,所以我们需要指定一个本地端口对应docker的jenkins的8080端口

docker logs jenkins 

在这里插入图片描述
(4)修改镜像
到路径/var/jenkins_home下修改文件:
在这里插入图片描述


换成清华镜像:

https://mirrors.tuna.tsinghua.edu.cn/jenkins/updates/dynamic-2.346/update-center.json

在这里插入图片描述
在这里插入图片描述

3.4 jenkins权限控制

在这里插入图片描述
此时切换创建用户登录出现如下页面
在这里插入图片描述

3.5 jenkins凭据管理

yum install git -y git --version 

在这里插入图片描述
(3)配置全局凭证
Manager Jenkins–》Manage Credentials –》全局–》添加凭据
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述




  • Username with password:用户名和密码
  • SSH Username with private key: 使用SSH用户和密钥
  • Secret file:需要保密的文本文件,使用时Jenkins会将文件复制到一个临时目录中,再将文件路径设置到一个变量中,等构建结束后,所复制的Secret file就会被删除。
  • Secret text:需要保存的一个加密的文本串,如钉钉机器人或Github的api token
  • Certificate:通过上传证书文件的方式
    常用的凭证类型有:Username with password(用户密码)和SSH Username with private key(SSH密钥)

案例一:Username with password(用户密码)
在这里插入图片描述
描述自定义即可
(4)项目绑定凭据
创建项目
在这里插入图片描述
点击项目
在这里插入图片描述
在这里插入图片描述
下滑,选择git
在这里插入图片描述
gitlab获取地址
在这里插入图片描述
配置jenkins绑定Git与凭据












在这里插入图片描述
点击build now,编译项目
在这里插入图片描述
就会自动编译项目
在这里插入图片描述
点击编译日志–》控制台输出
在这里插入图片描述
进jenkins部署的机子,进到以下目录就可以看到对应项目
在这里插入图片描述
案例二:SSH Username with private key(SSH密钥)
(1)在gitlab部署的机子生产公钥和秘钥









ssh-keygen -t rsa 
yum remove git 

2、安装git仓库

rpm -ivh http://opensource.wandisco.com/centos/7/git/x86_64/wandisco-git-release-7-1.noarch.rpm 

3、安装最新版git

yum -y install git 

4、验证

git --version 

在这里插入图片描述

3.6 jenkins安装项目管理工具【Maven&Gradle】

tar -zxvf apache-maven-3.6.2-bin.tar.gz 

在这里插入图片描述
(3)修改maven配置文件setting

/apache-maven-3.6.2/conf/settings.xml

<localRepository>/opt/app/maven/localResource</localRepository> 
 <mirror> <id>aliMaven</id> <mirrorOf>central</mirrorOf> <name>aliyun maven</name> <url>http://maven.aliyun.com/nexus/content/groups/public/</url> </mirror> 

(4)新增环境变量【若java之前有配置就不用重复配置!】

vim /etc/profile 

配置:

MAVEN_HOME=/opt/app/maven/apache-maven-3.6.2 JAVA_HOME=/opt/app/java/jdk1.8.0_121 PATH=$PATH:$JAVA_HOME/bin:$MAVEN_HOME/bin:$GRADLE_HOME/bin CLASSPATH=$JAVA_HOME/lib:. export MAVEN_HOME JAVA_HOME PATH CLASSPATH 

(5) 刷新资源

source profile 

(6)检验

mvn -v 

在这里插入图片描述
(7)jenkins配置maven

#!/bin/sh -l mvn clean package 
wget https://services.gradle.org/distributions/gradle-5.6.2-bin.zip 

(2)解压下载的安装包

unzip gradle-5.6.2-bin.zip 

(3)配置环境变量

vim /etc/profile 

配置:

GRADLE_HOME=/opt/app/gradle/gradle-5.6.2 JAVA_HOME=/opt/app/java/jdk1.8.0_121 PATH=$PATH:$JAVA_HOME/bin:$MAVEN_HOME/bin:$GRADLE_HOME/bin CLASSPATH=$JAVA_HOME/lib:. export GRADLE_HOME JAVA_HOME PATH CLASSPATH 

(4)生效资源

source /etc/profile 

(5)测试

gradle -version 

在这里插入图片描述
(6)安装grable插件【按自己jenkins实际,若已安装就不需要】
在这里插入图片描述
(7)jenkins配置gradle配置
manage jenkins –》Global Tool Configuration
配置jdk和gradle【jdk请看上面maven配置(略)】
在这里插入图片描述
(8)配置gradle系统配置
manage jenkins –》 Cofigure System
在这里插入图片描述








在这里插入图片描述
(9)项目配置构建方式
在这里插入图片描述

#!/bin/sh -l gradle clean build 

在这里插入图片描述

3.7 jenkins安装服务器

wget https://downloads.apache.org/tomcat/tomcat-8/v8.5.99/src/apache-tomcat-8.5.99-src.tar.gz 

(2)解压

tar -zxvf apache-tomcat-8.5.99-src.tar.gz 

(3) 启动

cd /tomcat-8.5.99/bin ./startup.sh 
  • 端口是否占用
  • 是否firewalld是否没开放端口
cd /tomcat-8.5.99/conf vim server.xml 

(ii)开放端口,重启防火墙

firewall-cmd --zone=public --add-port=8787/tcp --permanent systemctl restart firewalld 
<tomcat-users> <role rolename="tomcat"/> <role rolename="manager-script"/> <role rolename="admin-gui"/> <role rolename="manager-gui"/> <role rolename="manager-script"/> <role rolename="manager-jmx"/> <role rolename="manager-status"/> <user username="tomcat" password="xxxx" roles="manager-gui,admin-gui,manager-script"/> </tomcat-users> 

在这里插入图片描述
(ii)为了能够刚才配置的用户登录到Tomcat,还需要修改以下配置

vim /opt/tomcat-8.5.99/webapps/manager/META-INF/context.xml 

注释掉以下配置

<!-- <Valve className="org.apache.catalina.valves.RemoteAddrValve" allow="127\.\d+\.\d+\.\d+|::1|0:0:0:0:0:0:0:1" /> --> 

(iii)重启tomcat

cd bin ./shutdown.sh ./startup.sh 

下载地址:https://repo1.maven.org/maven2/org/eclipse/jetty/jetty-distribution/9.4.22.v

wget https://repo1.maven.org/maven2/org/eclipse/jetty/jetty-distribution/9.4.22.v/jetty-distribution-9.4.22.v.zip 

(2)解压

unzip jetty-distribution-9.4.22.v.zip 

(3)修改端口【jetty10+是没有start.ini,若使用10+版本,请自行查找修改方式】

cd jetty-distribution-9.4.22/ vim start.ini 

添加以下配置【端口自定义即可】

jetty.http.port=8686 

(4)开放防火墙端口

firewall-cmd --zone=public --add-port=8686/tcp --permanent systemctl restart firewall 

(5)测试访问

3.8 jenkins+tomcat实现自动部署

A:自由式风格发布
(1)修改tomcat配置【略,若想了解请看上面tomcat安装】

Maven Integration 

在这里插入图片描述
(2)创建maven项目
在这里插入图片描述
(3)选择git
在这里插入图片描述
(4)设置构建方式
在这里插入图片描述
在这里插入图片描述
(5)测试
更新git代码,然后再build now,观察是否有修改的页面是否有变化
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
C、使用pipline配置流水
(1)概念
Pipeline,简单来说,就是一套运行在 Jenkins 上的工作流框架,将原来独立运行于单个或者多个节点的任务连接起来,实现单个任务难以完成的复杂流程编排和可视化的工作。















(4)演示

  • 安装插件
    在这里插入图片描述
  • 创建流水
    在这里插入图片描述
  • 编写流水脚本
    此处可以使用jenkins提供的代码生成器生成
    在这里插入图片描述
    在这里插入图片描述
    演示:
    配置拉取代码
    在这里插入图片描述
    在这里插入图片描述
    然后复制到新创建的流水配置里
    在这里插入图片描述
    生成构建项目shell
    在这里插入图片描述
    生产发布配置
    在这里插入图片描述












  • 测试
    修改代码,加了个测试01
    在这里插入图片描述
    提交合并一下代码
    在这里插入图片描述
    点击bulid now执行一下流水
    在这里插入图片描述
    结果:
    在这里插入图片描述
    (5)将配置文件放到项目中
    好处:
    主要是好管理配置,防止因jenkins宕机等原因导致配置丢失。










步骤:

  • 在项目二级目录创建一个名为jenkinsFile文件,将配置粘到文件里,然后将文件push到代码仓库
    在这里插入图片描述
  • 修改jenkins对应流水的配置
    在这里插入图片描述
    注意:脚本路径就是在项目中创建的文件名,若有修改,需要同时修改该目录的配置

  • 测试
    在这里插入图片描述
    扩展:若想看阶段视图,需要安装插件Pipeline Stage View
    阶段视图主要方便观测各阶段执行情况
    在这里插入图片描述
    在这里插入图片描述




3.9 jenkins内置触发器

Jenkins内置4种构建触发器:

  • 触发远程构建
  • 其他工程构建后触发(Build after other projects are build)
  • 定时构建(Build periodically)
  • 轮询SCM(Poll SCM)

在这里插入图片描述
(1) 触发远程构建
触发构建实际就是一种携带令牌请求jenkins触发构建流程的一种构建方式
eg:假设现在token为45545454545454545878【时间开发场景需要使用对应的加密串】在这里插入图片描述
然后访问:



在这里插入图片描述此时可以看到流程会被触发构建
在这里插入图片描述
(2)其他工程构建后触发(Build after other projects are build)
该种构建方式实际就是通过其他工程构建后拉动后置驱动某工程
eg:
(i)配置前置工程【因现在模拟就随意配置一个】
在这里插入图片描述
(ii)构建工程反绑定前置工程(主要)
在这里插入图片描述
当前置工程执行后就会驱动当前工程








在这里插入图片描述
(iv)轮询scn
该种触发器主要是会隔段时间就会扫描仓库代码是否变化,有变化就会调度
eg:
配置扫描时间
在这里插入图片描述
模拟修改文件
在这里插入图片描述
效果:
在这里插入图片描述








免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://haidsoft.com/113814.html

(0)
上一篇 2025-12-12 16:15
下一篇 2025-12-12 16:26

相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注微信