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/

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

相关推荐
Fcy64839 分钟前
Linux下 进程(一)(冯诺依曼体系、操作系统、进程基本概念与基本操作)
linux·运维·服务器·进程
袁袁袁袁满40 分钟前
Linux怎么查看最新下载的文件
linux·运维·服务器
代码游侠1 小时前
学习笔记——设备树基础
linux·运维·开发语言·单片机·算法
Harvey9031 小时前
通过 Helm 部署 Nginx 应用的完整标准化步骤
linux·运维·nginx·k8s
珠海西格电力科技2 小时前
微电网能量平衡理论的实现条件在不同场景下有哪些差异?
运维·服务器·网络·人工智能·云计算·智慧城市
释怀不想释怀3 小时前
Linux环境变量
linux·运维·服务器
zzzsde3 小时前
【Linux】进程(4):进程优先级&&调度队列
linux·运维·服务器
聆风吟º4 小时前
CANN开源项目实战指南:使用oam-tools构建自动化故障诊断与运维可观测性体系
运维·开源·自动化·cann
NPE~4 小时前
自动化工具Drissonpage 保姆级教程(含xpath语法)
运维·后端·爬虫·自动化·网络爬虫·xpath·浏览器自动化
神梦流5 小时前
GE 引擎的内存优化终局:静态生命周期分析指导下的内存分配与复用策略
linux·运维·服务器