Jenkins流水线项目发布

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 

构建:


验证:

相关推荐
爱学习的爬虫5 小时前
Python实现Jenkins实现自动化执行Job
python·自动化·jenkins
小-黯6 小时前
Linux硬盘挂载脚本
linux·运维·服务器
PeaceKeeper76 小时前
简易的arm-linux库文件移植
linux·运维·arm开发
黄毛火烧雪下12 小时前
【Ruby 】脚本和自动化语言 常用的内容
运维·自动化·ruby
小白不想白a13 小时前
【shell】每日shell练习:安全日志入侵检测/系统配置文件合规检查
运维·服务器
洛克大航海14 小时前
Linux 中新建用户
linux·运维·服务器
dehuisun14 小时前
jenkins流水线部署springboot项目
运维·jenkins
蜜蜜不吃糖15 小时前
解决Vcenter告警datastore存储容量不足问题
linux·运维·服务器
东城绝神15 小时前
《Linux运维总结:基于ARM64+X86_64架构CPU使用docker-compose一键离线部署redis 7.4.5容器版分片集群》
linux·运维·redis·架构·分片集群