Jenkins流水线项目发布
在 Jenkins 中通过流水线(Pipeline)发布项目,是持续集成 / 持续部署(CI/CD)的核心流程。以下是基于 Jenkins Pipeline 发布项目的完整步骤,以Maven 构建的 Java Web 项目(部署到 Tomcat) 为例,涵盖从代码拉取、构建、测试到部署的全流程:
主机名称 ip地址 需要的应用服务 工具包 系统
server 192.168.100.5 tomcat、jenkins git maven RHEL9
app 192.168.100.6 tomcat 无 RHEL9
app主机是克隆出来的,需要删除uuid,并重启网卡配置:
[root@app webapps]# vim /etc/NetworkManager/system-connections/ens160.nmconnection
[connection]
id=ens160
type=ethernet
autoconnect-priority=-999
interface-name=ens160
timestamp=1761043886
[ethernet]
[ipv4]
address1=192.168.100.6/24,192.168.100.254
dns=114.114.114.114;
method=manual
[ipv6]
addr-gen-mode=eui64
method=auto
[proxy]
~
[root@app webapps]# systemctl restart NetworkManager
[root@app webapps]# nmcli connection up ens160
连接已成功激活(D-Bus 活动路径:/org/freedesktop/NetworkManager/ActiveConnection/2)
具体示例:
已关闭防火墙与selinux
使用tomcat容器安装jenkins
安装jdk:(server)
[root@server ~]# yum -y install java-11-openjdk
安装jdk:(app)
[root@app ~]# yum -y install java-11-openjdk
安装依赖包:(server、app)
[root@server ~]# yum -y install lrzsz
[root@app ~]# yum -y install lrzsz
上传Tomcat压缩包解压,并部署安装:(server、app)
[root@server ~]# rz -E
rz waiting to receive.
[root@server ~]# ls
公共 模板 视频 图片 文档 下载 音乐 桌面 anaconda-ks.cfg apache-tomcat-9.0.67.tar.gz
[root@server ~]# tar -xzf 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@app ~]# rz -E
rz waiting to receive.
[root@app ~]# ls
公共 模板 视频 图片 文档 下载 音乐 桌面 anaconda-ks.cfg apache-tomcat-9.0.67.tar.gz
[root@app ~]# tar -xzf apache-tomcat-9.0.67.tar.gz -C /usr/local
[root@app ~]# cd /usr/local/
[root@app local]# ln -s apache-tomcat-9.0.67/ tomcat
启动Tomcat,测试能否访问Tomcat首页:(server、app)
[root@server local]# cd tomcat/
[root@server tomcat]# bin/startup.sh
Using CATALINA_BASE: /usr/local/tomcat
Using CATALINA_HOME: /usr/local/tomcat
Using CATALINA_TMPDIR: /usr/local/tomcat/temp
Using JRE_HOME: /usr
Using CLASSPATH: /usr/local/tomcat/bin/bootstrap.jar:/usr/local/tomcat/bin/tomcat-juli.jar
Using CATALINA_OPTS:
Tomcat started.
[root@app local]# cd tomcat/
[root@app tomcat]# bin/startup.sh
Using CATALINA_BASE: /usr/local/tomcat
Using CATALINA_HOME: /usr/local/tomcat
Using CATALINA_TMPDIR: /usr/local/tomcat/temp
Using JRE_HOME: /usr
Using CLASSPATH: /usr/local/tomcat/bin/bootstrap.jar:/usr/local/tomcat/bin/tomcat-juli.jar
Using CATALINA_OPTS:
Tomcat started.
server:

app:

部署Jenkins:
下载jenkins到/usr/local/tomcat/webapps/目录下:(注:这里是上传)
[root@server ~]# cd /usr/local/tomcat/webapps/
[root@server webapps]# rz -E
rz waiting to receive.
上传后会自动解压:
[root@server webapps]# ls
docs examples host-manager jenkins jenkins.war manager ROOT
启动服务:
[root@server tomcat]# bin/catalina.sh stop
Using CATALINA_BASE: /usr/local/tomcat
Using CATALINA_HOME: /usr/local/tomcat
Using CATALINA_TMPDIR: /usr/local/tomcat/temp
Using JRE_HOME: /usr
Using CLASSPATH: /usr/local/tomcat/bin/bootstrap.jar:/usr/local/tomcat/bin/tomcat-juli.jar
Using CATALINA_OPTS:
NOTE: Picked up JDK_JAVA_OPTIONS: --add-opens=java.base/java.lang=ALL-UNNAMED --add-opens=java.base/java.io=ALL-UNNAMED --add-opens=java.base/java.util=ALL-UNNAMED --add-opens=java.base/java.util.concurrent=ALL-UNNAMED --add-opens=java.rmi/sun.rmi.transport=ALL-UNNAMED
[root@server tomcat]# bin/catalina.sh start
Using CATALINA_BASE: /usr/local/tomcat
Using CATALINA_HOME: /usr/local/tomcat
Using CATALINA_TMPDIR: /usr/local/tomcat/temp
Using JRE_HOME: /usr
Using CLASSPATH: /usr/local/tomcat/bin/bootstrap.jar:/usr/local/tomcat/bin/tomcat-juli.jar
Using CATALINA_OPTS:
Tomcat started.
浏览器访问Jenkins:

查看上图框出来的文件,该文件中记录这密码,复制密码并登录:
[root@server tomcat]# cat /root/.jenkins/secrets/initialAdminPassword
0b1c13f26e70450a811a2605573f2272

登录web界面时选择安装推荐的插件,部署好后,设置国内源:




在server中配置Jenkins:
创建任务:

创建流水线任务:

发布流水线的方法我在这里给大家介绍两种,一种是脚本的方式,一种是使用文本参数的方式
首选都需要在jinkins所在服务器,也就是server中安装git和maven:
[root@server ~]# yum -y install git
[root@server ~]# yum search maven
正在更新 Subscription Management 软件仓库。
无法读取客户身份
本系统尚未在权利服务器中注册。可使用 subscription-manager 进行注册。
上次元数据过期检查:0:34:33 前,执行于 2025年10月22日 星期三 16时06分54秒。
=================================================== 名称 精准匹配: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
找到java11匹配的那个maven进行安装
[root@server ~]# yum -y install maven-openjdk11.noarch
第一种方法:使用脚本
pipeline {
agent any
stages {
stage('pull code') {
steps {
git 'https://github.com/devopsbyhari/JenkinsTomcatExample.git'
}
}
}
}


在构建历史中可以看到构建情况

蓝色为正在构建

绿色为构建成功

也可以看构建日志

构建日志中记录这pull到哪里了

安装一个view插件:

安装成功后,重启Jenkins:


添加第二部分脚本执行:
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/test/target/目录下,通过日志文件可以看到该目录下就有个压缩文件为:java-tomcat-maven-example.war
[root@server ~]# cd /root/.jenkins/workspace/
[root@server workspace]# ls
test test@tmp
[root@server workspace]# cd test
[root@server test]# ls
Jenkinsfile pom.xml Procfile projectinformation.txt README.md Sample1_Jenkinsfile Sample_Jenkinsfile src target
[root@server test]# cd target/
[root@server target]# ls
dependency java-tomcat-maven-example java-tomcat-maven-example.war maven-archiver
[root@server target]# ls dependency/
webapp-runner.jar
第三次构建的时候,就是需要把这个文件使用scp的方式发送给node2的tomcat中:
[root@server ~]# ssh-keygen
Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /root/.ssh/id_rsa
Your public key has been saved in /root/.ssh/id_rsa.pub
The key fingerprint is:
SHA256:DOg1H4scOJa8SODs/4zaFXIJIbgO4wrjrqctpREomoM root@server.example.com
The key's randomart image is:
+---[RSA 3072]----+
|o. . |
|+....+ |
|.+..B = . |
|O. +.=.B o |
|B=..o+o S |
|Eoo o . |
|+* . . |
|+oo = |
|=*oo o |
+----[SHA256]-----+
[root@server ~]# ssh-copy-id -i ~/.ssh/id_rsa.pub root@192.168.100.6
/usr/bin/ssh-copy-id: INFO: Source of key(s) to be installed: "/root/.ssh/id_rsa.pub"
The authenticity of host '192.168.100.6 (192.168.100.6)' can't be established.
ED25519 key fingerprint is SHA256:++6+ZTLXeK0cFM1HXgzbnUn4SR68m2042iuavk65+Js.
This key is not known by any other names
Are you sure you want to continue connecting (yes/no/[fingerprint])? yes
/usr/bin/ssh-copy-id: INFO: attempting to log in with the new key(s), to filter out any that are already installed
/usr/bin/ssh-copy-id: INFO: 1 key(s) remain to be installed -- if you are prompted now it is to install the new keys
root@192.168.100.6's password:
Number of key(s) added: 1
Now try logging into the machine, with: "ssh 'root@192.168.100.6'"
and check to make sure that only the key(s) you wanted were added.
[root@server ~]# ssh root@192.168.100.6
Activate the web console with: systemctl enable --now cockpit.socket
Register this system with Red Hat Insights: insights-client --register
Create an account or view all your systems at https://red.ht/insights-dashboard
Last login: Wed Oct 22 16:05:28 2025 from 192.168.100.5
[root@app ~]# exit
注销
Connection to 192.168.100.6 closed.

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.6:/usr/local/tomcat/webapps/
ssh root@192.168.100.6 '/usr/local/tomcat/bin/catalina.sh stop && /usr/local/tomcat/bin/catalina.sh start'
"""
}
}
}
}


通过日志文件,我们可以看到将站点发送到app的tomcat中了

此时我们去app中的去验证:
[root@app tomcat]# cd webapps/
[root@app webapps]# ls
docs examples host-manager java-tomcat-maven-example java-tomcat-maven-example.war manager ROOT
访问app的tomcat:

能够成功访问该页面,说明我们此次jenkins流水线项目部署成功
第二种方法呢,就是通过文本参数来实现流水线项目发布
新建流水线项目sy

添加文本参数

添加git下载信息 https://github.com/devopsbyhari/JenkinsTomcatExample.git

添加字符参数,打包:

添加字符参数 定义tomcat路径:

添加文本参数 定义客户端ip:

编写流水线脚本:
pipeline {
agent any
stages {
stage('pull code') {
steps {
git "${git_url}"
}
}
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'
"""
}
}
}
}

[root@app tomcat]# cd webapps/
[root@app webapps]# ls
docs examples host-manager java-tomcat-maven-example java-tomcat-maven-example.war manager ROOT
[root@app webapps]# rm -rf java-tomcat-maven-example java-tomcat-maven-example.war
构建:


验证:
