jenkins
什么是 Jenkins?
Jenkins 是一个开源的、用 Java 编写的持续集成 和持续交付工具。你可以把它想象成一个高度可定制的"软件工厂自动化机器人"。
它的核心功能是自动化那些繁琐且重复的软件开发流程,例如:
1.编译代码
2.运行自动化测试
3.打包成可部署的软件
4.部署到测试或生产环境
主要特点和优势
开源免费:拥有庞大的社区和丰富的资源。
插件生态极其丰富:这是 Jenkins 最强大的地方。有超过 1500 个插件,可以无缝集成几乎所有主流开发工具,如 Git、Docker、Maven、Kubernetes、JIRA、Slack 等。
高度可配置:可以通过 Web 界面轻松配置,也支持使用代码(Jenkinsfile)来定义复杂的构建流程,这种方式称为 "Pipeline as Code"。
跨平台:由于基于 Java,它可以在所有主流操作系统上运行。
分布式构建:可以在多台机器上分布构建任务,加快构建速度。
Maven介绍
Maven 就是构建 java 里面的一个 war 包的;
Maven 项目对象模型(POM)是可以通过一小段描述信息来管理项目的构建、报告和文档的软件项目管理工具;
Maven 除了以程序构建能力为特色之外,还提供高级项目管理工具。由于Maven的缺省构建规则有较高的可重用性,所以常常用两三行Maven构建脚本就可以构建简单的项目;
由于Maven的面向项目的方法,许多Apache Jakarta 项目发文时使用Maven,而且公司项目采用Maven的比例在持续增长
SVN介绍
SVN是subversion的缩写,是一个开放源代码的版本控制系统,通过采用分支管理系统的高效管理,简而言之就是用于多个人共同开发同一个项目,实现共享资源,实现最终集中式的管理。
jenkins工作原理
将源代码从SVN/Git版本控制系统中拷贝一份到本地,然后根据设置的脚本进行build(构建);整个系统的关键就是build脚本,build脚本告诉Jenkins在一次集成中需要执行的任务。
CI/CD是什么
CI 持续集成(全称:Continuous integration),中文意思是持续集成是一种软件开发时间;持续集成强调开发人员提交了新代码之后,立刻进行构建、(单元)测试;根据测试结果,我们可以确定新代码和原有代码能否正确地集成在一起。
CD持续交付
CD 持续交付(全称:Continuous Delivery), 中文意思是:持续交付 是在 CI持续集成 的基础上,将集成后的代码部署到更贴近真实运行环境(类生产环境)中;比如,我们完成单元测试后,可以把代码部署到连接数据库的Staging环境中更多的测试,如果代码没有问题,可以继续手动部署到生产环境
CD持续部署
CD 持续部署(全称:Continuous Deployment),是 CI持续集成 ,CD持续交付的延伸。自动将交付的应用部署到生产环境。能及时收到用户反馈,降低部署的风险;
持续部署是持续交付的下一步,在持续交付的基础上,由开发人员或运维人员自助式的定期向生产环境部署稳定的构建版本,持续部署的目标是代码在任何时刻都是可部署的,并可自动进入到生产环境
总结:持续交付是手动部署到生产环境,持续部署是自动部署到生产环境
实验:
需要两台设备
rhel9:192.168.100.100 | 部署tomcat,jenkins |
---|---|
centos7:192.168.100.30 | 部署tomcat用作测试 |
两台设备都要关闭防火墙,selinux,做本地时钟同步
rhel9
配置rhel9的yum仓库
[root@server ~]# vim /etc/yum.repos.d/server.repo
[aa]
name=aa1
baseurl=https://mirrors.aliyun.com/centos-stream/9-stream/BaseOS/x86_64/os/
enabled=1
gpgcheck=0
[bb]
name=bb1
baseurl=https://mirrors.aliyun.com/centos-stream/9-stream/AppStream/x86_64/os/
enabled=1
gpgcheck=0
安装Javajdk环境
[root@server ~]# yum -y install java-11-openjdk
安装lrzsz用于xshell传输软件包
[root@server ~]# yum install lrzsz
部署tomcat
[root@server ~]# ls
公共 图片 音乐 apache-tomcat-9.0.67.tar.gz
模板 文档 桌面 rhel-9.2-x86_64-dvd.iso
视频 下载 anaconda-ks.cfg
[root@server ~]# tar -xzvf apache-tomcat-9.0.67.tar.gz -C /usr/local/
[root@server ~]# cd /usr/local/
[root@server local]# ln -s apache-tomcat-9.0.67/ tomcat
[root@server local]# cd tomcat/
[root@server tomcat]# bin/catalina.sh start
查看8080端口

tomcat部署完成
部署jenkins
首先停止tomcat
[root@server tomcat]# bin/catalina.sh stop
下载jenkins 2.462.1版本到/usr/local/tomcat/webapps/目录下
[root@server webapps]# ls
docs examples host-manager jenkins.war manager ROOT
启动tomcat
[root@server tomcat]# bin/catalina.sh start
查看8080/jenkins页面,设置用户和密码


安装完成后设置国内源

选择manage jenkins

选择plugins

将url替换成https://mirrors.huaweicloud.com/jenkins/updates/update-center.json
在jenkins主机上生成密钥传给client主机
[root@server ~]# ssh-keygen #全部回车
[root@server ~]# ssh-copy-id -i ~/.ssh/id_rsa.pub root@192.168.100.30
[root@server ~]# ssh root@192.168.100.30
Last login: Tue Oct 21 18:28:29 2025 from 192.168.100.1
[root@client ~]# exit
logout
Connection to 192.168.100.30 closed.
[root@server ~]#
centos7
首先需要卸载自带的jdk环境
[root@client ~]# rpm -qa | grep java
[root@client ~]# rpm -e java-1.8.0-openjdk-1.8.0.181-7.b13.el7.x86_64 --nodeps
[root@client ~]# rpm -e java-1.8.0-openjdk-headless-1.8.0.181-7.b13.el7.x86_64 --nodeps
配置yum仓库
[root@client ~]# cd /etc/yum.repos.d/
[root@client yum.repos.d]# rm -rf *
[root@client yum.repos.d]# wget -O /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-7.repo
[root@client yum.repos.d]# yum install epel-release -y
安装jdk环境
[root@client yum.repos.d]# yum -y install java-11-openjdk
部署tomcat
[root@client yum.repos.d]# cd /usr/local/
[root@client local]# ls
apache-tomcat-9.0.67 bin etc games include lib lib64 libexec sbin share src
[root@client local]# ln -s apache-tomcat-9.0.67/ tomcat
[root@client local]# cd tomcat/
[root@client tomcat]# bin/catalina.sh start
查看8080页面

在jenkins中创建流水线任务
在jenkins主机中安装git和maven,maven需要与jdk对应
[root@server ~]# yum -y install git
[root@server ~]# yum search maven
正在更新 Subscription Management 软件仓库。
无法读取客户身份
本系统尚未在权利服务器中注册。可使用 subscription-manager 进行注册。
上次元数据过期检查:1:07:20 前,执行于 2025年10月21日 星期二 18时19分30秒。
====================== 名称 精准匹配:maven =======================
maven.noarch : Java project management and project comprehension
: tool
==================== 名称 和 概况 匹配:maven =====================
maven-lib.noarch : Core part of Maven
maven-openjdk11.noarch : OpenJDK 11 binding for Maven
maven-openjdk17.noarch : OpenJDK 17 binding for Maven
maven-openjdk21.noarch : OpenJDK 21 binding for Maven
maven-openjdk8.noarch : OpenJDK 8 binding for Maven
maven-resolver.noarch : Apache Maven Artifact Resolver library
maven-shared-utils.noarch : Maven shared utility classes
======================== 名称 匹配:maven =========================
maven-wagon.noarch : Tools to manage artifacts and deployment
安装jkd11
[root@server ~]# yum install maven-openjdk11.noarch -y
方法1:使用脚本

新建ltem

选择流水线pipeline

选择脚本,符号使用英语符号,然后保存
pipeline {
agent any
stages {
stage('pull code') {
steps {
git 'https://github.com/devopsbyhari/JenkinsTomcatExample.git'
}
}
}
}
在流水线语法这里选择git

生成流水线脚本

加载新的插件

选择流水线视图然后安装,安装完成后重启jenkins
重启完成后回到首页,点击之前创建的流水线,buildnow立即创建

可以看到创建流程以及日志

在构建历史里查看,构建日志记录在
/root/.jenkins/workspace/test1
添加第二部分脚本并执行
pipeline {
agent any
stages {
stage('pull code') {
steps {
git 'https://github.com/devopsbyhari/JenkinsTomcatExample.git'
}
}
stage('package') {
steps {
sh """
mvn clean
mvn package
"""
}
}
}
}
第二次构建时间会比较长,是为了安装软件包,生成站点,站点在/root/.jenkins/workspace/test1/target/目录下,通过日志文件可以看到

第三次构建的时候,就是需要把这个文件使用scp的方式发送给client的tomcat中
[root@server ~]# cd /root/.jenkins/workspace/test1/target/
[root@server target]# ls
dependency java-tomcat-maven-example.war
java-tomcat-maven-example maven-archiver
需要把java-tomcat-maven-example.war发送给client
pipeline {
agent any
stages {
stage('pull code') {
steps {
git 'https://github.com/devopsbyhari/JenkinsTomcatExample.git'
}
}
stage('package') {
steps {
sh """
mvn clean
mvn package
"""
}
}
stage('deploy') {
steps {
sh """
scp target/java-tomcat-maven-example.war root@192.168.100.30:/usr/local/tomcat/webapps/
ssh root@192.168.100.30 '/usr/local/tomcat/bin/catalina.sh stop && /usr/local/tomcat/bin/catalina.sh start'
"""
}
}
}
}


去client中查看
[root@client webapps]# ls
docs examples host-manager java-tomcat-maven-example java-tomcat-maven-example.war manager ROOT

能够访问该页面说明流水线项目部署成功
方法二:
再建一个test2的站点

添加3个字符串当作变量使用,在Pipeline脚本中,但是变量名中通常不能包含特殊字符,比如减号-,因此图片中所有-换成_下划线



脚本
pipeline {
agent any
stages {
stage('pull code') {
steps {
git "${giturl}"
}
}
stage('package') {
steps {
sh """
mvn clean
mvn package
"""
}
}
stage('deploy') {
steps {
sh """
scp target/${maven_package}.war root@${client_ip}:${tomcat_path}/webapps/
ssh root@${client_ip} '${tomcat_path}/bin/catalina.sh stop && ${tomcat_path}/bin/catalina.sh start'
"""
}
}
}
}


再次访问192.168.100.30:8080/java-tomcat-maven-example/
如果还是之前的界面则说明成功