Jenkins流水线项目发布

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
相关推荐
YC运维3 小时前
Jenkins 安装,自动化全方位详解文档
运维·自动化·jenkins
塔能物联运维3 小时前
物联网运维中的自适应网络拓扑重构技术
运维·物联网·重构
weixin_307779134 小时前
AWS云上Quickwit部署指南与成本分析
服务器·自动化·云计算·运维开发·aws
路由侠内网穿透4 小时前
本地部署开源数据分析平台 Elastic Stack 并实现外部访问( Windows 版本)
运维·服务器·网络·windows·开源·jenkins
一只游鱼4 小时前
maven简介与安装
java·maven
王道长服务器 | 亚马逊云5 小时前
AWS CloudFormation —— 自动化部署的“云中脚本大师”
运维·服务器·网络·自动化·云计算·aws
Bruce_Liuxiaowei5 小时前
解决Kali虚拟机中VMnet1(仅主机模式)网卡无法获取IP地址的问题
运维·网络·网络协议·tcp/ip
key_Go5 小时前
12.docker swarm
运维·docker·容器·docker swarm
馨谙5 小时前
SSH密钥认证:从密码到密钥的安全升级指南
运维·安全·ssh