jenkins流水线项目部署

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/

如果还是之前的界面则说明成功

相关推荐
用户0328472220703 小时前
如何搭建本地yum源(上)
运维
大树883 天前
金刚石散热越强,管路越先见顶
大数据·运维·服务器·人工智能·ai
摇滚侠3 天前
Linux CentOS7 rpm 安装 MySQL 5.7
linux·运维·mysql
霸道流氓气质3 天前
领域驱动设计(DDD)在 Spring Boot 微服务中的实践指南
运维·spring boot·微服务
Inhand陈工3 天前
基于台达PLC与映翰通IG502的智慧水产养殖精准投喂与远程运维解决方案
运维·人工智能·物联网·阿里云·信息与通信
酣大智3 天前
ARP代理--工作原理
运维·网络·arp·arp代理
shushangyun_3 天前
2026年快消品B2B系统推荐:支持终端门店订货、促销政策自动化的工具?
java·运维·网络·数据库·人工智能·spring·自动化
施努卡机器视觉3 天前
SNK施努卡侧滑门锁上滑轮总成自动化装配线,从零件到组件,全流程精密制造方案
运维·自动化·制造
AC赳赳老秦3 天前
用 OpenClaw 搭建服务器故障应急响应系统,自动处理 80% 常见运维故障
android·运维·服务器·python·rxjava·deepseek·openclaw
java_cj3 天前
深入kube-apiserver认证机制:从Bearer Token到mTLS的完整认证链解析
linux·运维·服务器·云原生·容器·kubernetes