jenkins简介
Jenkins是一个开源软件项目,是基于Java开发的一种持续集成工具,用于监控持续重复的工作,旨在提供一个开放易用的软件平台,使软件项目可以进行持续集成
CI/CD是什么
CI(CI-Continuous integration,持续集成)
- 持续集成是指多名开发者在开发不同功能代码的过程当中,可以频繁的将代码行合并到一起并切相互不影响工作。
- 持续集成的目的,是让产品可以快速迭代,同时还能保持高质量。它的核心措施是,代码集成到主干之前,必须通过自动化测试。只要有一个测试用例失败,就不能集成。
- 简单来说,就是频繁的将代码集成到主干。将软件个人研发的部分向软件整体部分交付,频繁进行集成以便更快地发现其中的错误
- 它的好处有以下两种:
- 快速发现错误。每完成一点更新,就集成到主干,可以快速发现错误,定位错误也比较容易;
- 防止分支大幅偏离主干。如果不是经常集成,主干又在不断更新,会导致以后集成的难度变大,甚至难以集成。
CD (Continuous Delivery,持续交付)
- 持续交付是在持续部署的基础之上,将产品交付到线上环境,因此持续交付是产品价值的一种交付,是产品价值的一种盈利的实现。
- 持续交付指的是频繁地将软件的新版本,交付给质量团队或者用户,以供评审。如果评审通过,代码就进入生产阶段。
- 持续交付在持续集成的基础上,将集成后的代码部署到更贴近真实运行环境的「类生产环境」(production-like environments)中。持续交付优先于整个产品生命周期的软件部署,建立在高水平自动化持续集成之上。
- 注:持续交付可以看作持续集成的下一步
CD(CD-continuous deployment,持续部署)
- 是基于某种工具或平台实现代码自动化的构建、测试和部署到线上环境以实现交付高质量的产品,持续部署在某种程度上代表了一个开发团队的更新迭代速率。
- 持续部署(continuous deployment)是持续交付的下一步,指的是代码通过评审以后,自动部署到生产环境。
- 持续部署的目标是,代码在任何时刻都是可部署的,可以进入生产阶段。
- 注:持续部署的前提是能自动化完成测试、构建、部署等步骤。
工作原理
- 1.开发者检入代码到源代码仓库。
- 2.CI系统会为每一个项目创建了一个单独的工作区。当预设或请求一次新的构建时,它将把源代码仓库的源码存放到对应的工作区。
- 3.CI系统会在对应的工作区内执行构建过程。
- 4.(配置如果存在)构建完成后,CI系统会在一个新的构件中执行定义的一套测试。完成后触发通知(Email,RSS等等)给相关的当事人。
- 5.(配置如果存在)如果构建成功,这个构件会被打包并转移到一个部署目标(如应用服务器)或存储为软件仓库中的一个新版本。软件仓库可以是CI系统的一部分,也可以是一个外部的仓库,诸如一个文件服务器或者像 SourceForge、Java.net之类的网站。
- 6.CI系统通常会根据请求发起相应的操作,诸如即时构建、生成报告,或者检索一些构建好的构件。
特点
- (1)易安装:仅仅一个 Jenkins.war,从官网下载该文件后,直接运行,无需额外的安装,更无需安装数据库
- (2)易配置:提供友好的 GUI 配置界面
- (3)变更支持:Jenkins 能从代码仓库(SVN/Git)中获取并产生代码更新列表,并输出到编译输出信息中
- (4)支持永久链接:用户是通过 Web 来访问 Jenkins 的,而这些 Web 页面的链接地址都是永久链接地址,可以在各种文档中直接使用该链接;
- (5)集成 E-Mail/RSS/IM:当完成一次集成时,可通过这些工具实时收取集成结果(构建一次集成需要花费一定时间,有了这个功能,就可以在等待结果过程中,干别的事情);
- (6)JUnit/TestNG 测试报告:也就是用以图表等形式提供详细的测试报表功能;
- (7)支持分布式构建:Jenkins 可以把集成构建等工作分发到多台计算机中完成;
- (8)文件指纹信息:Jenkins 会保存构建集成所产生的 jars 文件、集成构建使用了哪个版本;
- (9)支持第三方插件:Jenkins 支持 第三方插件,这使得 Jenkins 功能变得越来越强大。
Maven介绍
- Maven 就是构建 java 里面的一个 war 包的;
- Maven 项目对象模型(POM)是可以通过一小段描述信息来管理项目的构建、报告和文档的软件项目管理工具;
- Maven 除了以程序构建能力为特色之外,还提供高级项目管理工具。由于Maven的缺省构建规则有较高的可重用性,所以常常用两三行Maven构建脚本就可以构建简单的项目;
- 由于Maven的面向项目的方法,许多Apache Jakarta 项目发文时使用Maven,而且公司项目采用Maven的比例在持续增长。
部署
环境说明:
主机 | 应用服务 | ip地址 | 系统版本 |
---|---|---|---|
jenkins | tomcat;jenkins ;manven | 192.168.48.137 | centos8 |
client | tomcat | 192.168.48.138 | centos8 |
//首先关闭selinux和防火墙
[root@jenkins ~]# setenforce 0
[root@jenkins ~]# sed -ri 's/^(SELINUX=).*/\1disabled/g' /etc/selinux/config
[root@jenkins ~]# systemctl disable --now firewalld.service
//安装java,还有git,和maven;为了免密登录可以下一个sshpass,或者生成秘钥传给客户机也可以
[root@jenkins ~]# dnf -y install java-17-openjdk git manven sshpass
//下载tomcat9.0.67版本
[root@jenkins ~]# wget https://dlcdn.apache.org/tomcat/tomcat-9/v9.0.67/bin/apache-tomcat-9.0.67.tar.gz
[root@jenkins ~]# tar xf apache-tomcat-9.0.67.tar.gz -C /usr/local/
[root@jenkins ~]# mv /usr/local/apache-tomcat-9.0.67/ /usr/local/tomcat
[root@jenkins ~]# cd /usr/local/tomcat/
//编写tomcat.service文件
[root@jenkins tomcat]# vim /usr/lib/systemd/system/tomcat.service
[Unit]
Description=tomcat server daemon
After=network.target sshd-keygen.target
[Service]
Type=forking
ExecStart=/usr/local/tomcat/bin/catalina.sh start
ExecStop=/usr/local/tomcat/bin/catalina.sh stop
ExecReload=/bin/kill -HUP \$MAINPID
[Install]
WantedBy=multi-user.target
[root@jenkins tomcat]# systemctl daemon-reload
[root@jenkins tomcat]# systemctl enable --now tomcat.service
[root@jenkins tomcat]# ss -anlt
State Recv-Q Send-Q Local Address:Port Peer Address:Port Process
LISTEN 0 128 0.0.0.0:22 0.0.0.0:*
LISTEN 0 1 [::ffff:127.0.0.1]:8005 *:*
LISTEN 0 100 *:8080 *:*
LISTEN 0 128 [::]:22 [::]:*
//下载jenkins
[root@jenkins tomcat]# cd webapps/
[root@jenkins webapps]# wget http://mirrors.jenkins.io/war-stable/2.346.3/jenkins.war
//它会自动解压
[root@jenkins webapps]# ls
docs examples host-manager jenkins jenkins.war manager ROOT
之后在网站界面进行操作
注:创建过程中需自己创建管理员用户