Jenkins流水线项目发布
一、两台主机配置
主机名称 | IP地址 | 需要的应用服务 | 工具包 | 系统 |
---|---|---|---|---|
Node1 | 192.168.100.100 | tomcat、jenkins | git、maven | RHEL8 |
node2 | 192.168.100.110 | tomcat | 无 | RHEL8 |
二、部署tomcat(两台)
(1)关闭防火墙selinux
powershell
[root@server ~]# systemctl status firewalld.service
○ firewalld.service - firewalld - dynamic firewall daemon
Loaded: loaded (/usr/lib/systemd/system/firewalld.service; disabled; preset: enable>
Active: inactive (dead)
Docs: man:firewalld(1)
[root@server ~]# getenforce
Disabled
(2)时钟同步
powershell
[root@server ~]# systemctl restart chronyd
[root@server ~]# systemctl enable chronyd
Created symlink /etc/systemd/system/multi-user.target.wants/chronyd.service → /usr/lib/systemd/system/chronyd.service.
[root@server ~]# hwclock -w
(3)部署安装源
powershell
[root@server ~]# cd /etc/yum.repos.d/
[root@server yum.repos.d]# ls
redhat.repo server.repo
[root@server yum.repos.d]# rm -rf *
[root@server yum.repos.d]# ls
[root@server yum.repos.d]# vim server.repo
[root@server yum.repos.d]# cat server.repo
[baseos]
name=baseos
baseurl=https://mirrors.aliyun.com/centos-stream/9-stream/BaseOS/x86_64/os/
enabled=1
gpgcheck=0
[appstream]
name=app
baseurl=https://mirrors.aliyun.com/centos-stream/9-stream/AppStream/x86_64/os/
enabled=1
gpgcheck=0
(4)确保没有旧版jdk
powershell
[root@server ~]# rpm -qa | grep java
[root@server ~]#
(5)下载jdk
powershell
[root@app ~]# yum -y install java-11-openjdk
[root@app ~]# java -version
openjdk version "11.0.20.1" 2023-08-24 LTS
OpenJDK Runtime Environment (Red_Hat-11.0.20.1.1-2) (build 11.0.20.1+1-LTS)
OpenJDK 64-Bit Server VM (Red_Hat-11.0.20.1.1-2) (build 11.0.20.1+1-LTS, mixed mode, sharing)
(6)下载lrzsz
powershell
[root@app ~]# yum -y install lrzsz
(7)下载tomcat9,并解压安装部署
powershell
[root@app ~]# rz -E
rz waiting to receive.
[root@app ~]# ls
anaconda-ks.cfg Documents Pictures Templates
apache-tomcat-9.0.67.tar.gz Downloads Public Videos
Desktop Music rhel-9.2-x86_64-dvd.iso
[root@app ~]# tar -xzf apache-tomcat-9.0.67.tar.gz -C /usr/local
[root@app ~]# cd /usr/local
[root@app local]# ls
apache-tomcat-9.0.67 bin etc games include lib lib64 libexec sbin share src
[root@app local]# ln -s apache-tomcat-9.0.67/ tomcat
[root@app local]# ls
apache-tomcat-9.0.67 etc include lib64 sbin src
bin games lib libexec share tomcat
[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.
[root@app tomcat]# ss -anlt
State Recv-Q Send-Q Local Address:Port Peer Address:Port Process
LISTEN 0 128 127.0.0.1:6010 0.0.0.0:*
LISTEN 0 4096 0.0.0.0:111 0.0.0.0:*
LISTEN 0 128 0.0.0.0:22 0.0.0.0:*
LISTEN 0 128 127.0.0.1:631 0.0.0.0:*
LISTEN 0 1 [::ffff:127.0.0.1]:8005 *:*
LISTEN 0 128 [::1]:631 [::]:*
LISTEN 0 100 *:8080 *:*
LISTEN 0 4096 [::]:111 [::]:*
LISTEN 0 511 *:80 *:*
LISTEN 0 128 [::1]:6010 [::]:*
LISTEN 0 128 [::]:22 [::]:*

二、server主机部署Jenkins
1、下载jenkins到/usr/local/tomcat/webapps/目录下
powershell
[root@server tomcat]# cd webapps/
[root@server webapps]# ls
docs examples host-manager manager ROOT
[root@server webapps]# rz -E
rz waiting to receive.
[root@server webapps]# ls
docs examples host-manager jenkins.war manager ROOT
[root@server webapps]# ls
docs examples host-manager jenkins jenkins.war manager ROOT
[root@server webapps]# cd ..
[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.
浏览器访问:192.168.100.10:8080/jenkins,在服务端查看密码
2、安装推荐的插件(安装过程较长)


3、创建任务


4、发布流水线的方法有两种,一种是脚本的方式,一种是使用文本参数的方式
首先都需要在jinkins所在服务器,也就是node1中安装git和maven
powershell
[root@server ~]# yum -y install git
[root@server ~]# yum search maven
Updating Subscription Management repositories.
Unable to read consumer identity
This system is not registered with an entitlement server. You can use subscription-manager to register.
Last metadata expiration check: 0:34:49 ago on Tue 21 Oct 2025 06:43:16 PM CST.
============================== Name Exactly Matched: maven ==============================
maven.noarch : Java project management and project comprehension tool
============================= Name & Summary Matched: 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
================================== Name Matched: maven ==================================
maven-wagon.noarch : Tools to manage artifacts and deployment
[root@server ~]# yum -y install maven-openjdk11.noarch
(1)使用脚本
powershell
pipeline {
agent any
stages {
stage('pull code') {
steps {
git 'https://github.com/devopsbyhari/JenkinsTomcatExample.git'
}
}
}
}


点击立即构建

看视图------将源换为国内的镜像源------下载视图插件
powershell
https://mirrors.huaweicloud.com/jenkins/updates/update-center.json


点击完成后重启------登录

添加第二部分脚本执行
powershell
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

第三次构建的时候,就是需要把这个文件使用scp的方式发送给node2的tomcat中
先做好免密钥操作
powershell
[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:5RBtUWany1RFUxW8dqJfm8BQsOePCjj2D3hKBSLZ7pE root@server.example.com
The key's randomart image is:
+---[RSA 3072]----+
| ...+= +=O|
| o .oo.= ..|
| o o .....+. .|
| o o .+ +o..o.|
| E S.. =o...|
| . . + .oo .|
| . * + o.oo|
| o = o . .o |
| . ..o |
+----[SHA256]-----+
[root@server ~]# ssh-copy-id -i ~/.ssh/id_rsa.pub root@192.168.100.110
/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.110 (192.168.100.110)' can't be established.
ED25519 key fingerprint is SHA256:dzFDYh3CzEyOrNsFO9Pw3TMH3PSgvTJf7/EdklBHmPA.
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.110's password:
Number of key(s) added: 1
Now try logging into the machine, with: "ssh 'root@192.168.100.110'"
and check to make sure that only the key(s) you wanted were added.
脚本
powershell
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.110:/usr/local/tomcat/webapps/
ssh root@192.168.100.110 '/usr/local/tomcat/bin/catalina.sh stop && /usr/local/tomcat/bin/catalina.sh start'
"""
}
}
}
}

查看node2主机
powershell
[root@app ~]# cd /usr/local/tomcat/webapps/
[root@app webapps]# ls
docs host-manager java-tomcat-maven-example.war ROOT
examples java-tomcat-maven-example manager
浏览器访问:192.168.100.110:8080/java-tomcat-maven-example
能够成功访问该页面,说明我们此次jenkins流水线项目部署成功

(2)通过文本参数来实现流水线项目发布
为了实验效果,我们首先把node2中刚刚接收到的站点给删除
powershell
[root@app webapps]# ls
docs host-manager java-tomcat-maven-example.war ROOT
examples java-tomcat-maven-example manager
[root@app webapps]# rm -rf java-tomcat-maven-example.war
[root@app webapps]# rm -rf java-tomcat-maven-example
[root@app webapps]# ls
docs examples host-manager manager ROOT
[root@app webapps]# cd ..
[root@app 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@app 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.
新建流水线项目test2

参数化构建(都是字符参数也可以构建成功)
1、添加字符参数git下载信息 hhttps://github.com/devopsbyhari/JenkinsTomcatExample.git

2、添加字符参数,打包

3、添加字符参数 定义tomcat路径

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

5、编写流水线脚本
powershell
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'
"""
}
}
}
}

点击构建

测试
node2中
powershell
[root@app tomcat]# cd webapps/
[root@app webapps]# ls
docs host-manager java-tomcat-maven-example.war ROOT
examples java-tomcat-maven-example manager
