砍材农夫砍材农夫
  • 微信记账小程序
  • java
  • redis
  • mysql
  • 场景类
  • 框架类
  • vuepress搭建
  • hexo搭建
  • 云图
  • llm wiki

    • 基于karpathy
    • gradle
  • 常用工具

    • git
    • gradle
    • Zadig
    • it-tools
    • 开源推荐
    • curl
  • 大前端

    • 环境配置
    • 微信生态
    • 正则
    • 全栈技能
  • java圈

    • java基础
    • jdk体系
    • jvm
    • spring框架
    • 分库分表
    • zookeeper
  • python技能

    • python编程
    • python数据
  • 算法

    • 算法
  • 网关

    • spring_cloud_gateway
    • openresty
  • 高可用

    • 秒杀
    • 分布式
    • 缓存一致
  • MQ

    • MQ
    • rabbitMQ
    • rocketMQ
    • kafka
  • 其它

    • 设计模式
    • 领域驱动(ddd)
  • 关系型数据库

    • mysql5.0
    • mysql8.0
  • 非关系型数据库

    • redis
    • mongoDB
  • 分布式/其他

    • ShardingSphere
    • 区块链
  • 向量数据库

    • M3E
    • OPEN AI
  • Jmeter
  • fiddler
  • wireshark
  • AI入门
  • AI大模型
  • AI插件
  • AI集成框架
  • 相关算法
  • AI训练师
  • 量化交易
  • AIoT
  • gitee
  • github
  • infoq
  • osc
  • 砍材工具
  • 关于
  • 相关运营
  • devops
  • 元宇宙
  • 区块链
  • 物联网
  • webrtc
  • web3.0
  • gitee
  • github
  • infoq
  • osc
  • 砍材工具
  • 关于
  • 中考
  • 投资
  • 保险
  • 思
  • 微信记账小程序
  • java
  • redis
  • mysql
  • 场景类
  • 框架类
  • vuepress搭建
  • hexo搭建
  • 云图
  • llm wiki

    • 基于karpathy
    • gradle
  • 常用工具

    • git
    • gradle
    • Zadig
    • it-tools
    • 开源推荐
    • curl
  • 大前端

    • 环境配置
    • 微信生态
    • 正则
    • 全栈技能
  • java圈

    • java基础
    • jdk体系
    • jvm
    • spring框架
    • 分库分表
    • zookeeper
  • python技能

    • python编程
    • python数据
  • 算法

    • 算法
  • 网关

    • spring_cloud_gateway
    • openresty
  • 高可用

    • 秒杀
    • 分布式
    • 缓存一致
  • MQ

    • MQ
    • rabbitMQ
    • rocketMQ
    • kafka
  • 其它

    • 设计模式
    • 领域驱动(ddd)
  • 关系型数据库

    • mysql5.0
    • mysql8.0
  • 非关系型数据库

    • redis
    • mongoDB
  • 分布式/其他

    • ShardingSphere
    • 区块链
  • 向量数据库

    • M3E
    • OPEN AI
  • Jmeter
  • fiddler
  • wireshark
  • AI入门
  • AI大模型
  • AI插件
  • AI集成框架
  • 相关算法
  • AI训练师
  • 量化交易
  • AIoT
  • gitee
  • github
  • infoq
  • osc
  • 砍材工具
  • 关于
  • 相关运营
  • devops
  • 元宇宙
  • 区块链
  • 物联网
  • webrtc
  • web3.0
  • gitee
  • github
  • infoq
  • osc
  • 砍材工具
  • 关于
  • 中考
  • 投资
  • 保险
  • 思
  • nginx

    • nginx日常

      • 概念
      • 常用命令
      • nginx安装和部署
    • nginx实战

      • 基本配置拆解
      • 配置https证书
      • nginx负载配置
    • webUI

      • nginxWebUI
  • linuxs

    • 基础

      • 常用命令
      • grep
      • 防火墙
      • 基础常用命令
      • linux基础常用命令2
      • 配置应用自动启动
      • 自动同步北京时间
      • 防火墙操作
      • ifconfig无ip
      • Rocky-8无网络和局域网无法访问
    • 高级

      • 常用命令
      • vm虚拟机磁盘扩容
      • jdk安装
      • centos7 不显示IP
      • linux分析问题常用命令
      • linux任务管理
      • 权限控制
      • 记录用户操作日志
      • 日常分析问题命令介绍
      • 网络配置
      • cached过高问题
      • 找回删除文件
      • cpu负载突然升高
      • 磁盘爆满查找大文件
      • CentOS7系统配置国内yum源和epel源
    • vi

    • curl

  • docker

    • 基础
      • 安装和配置

        • window相关安装和配置
        • window基础简单操作
        • linux安装
        • 相关概念
      • 相关命令

        • 相关命令
        • docker镜像相关命令
      • 安装实例

        • 安装elasticsearch
        • docker其他常见快速部署
        • docker搭建mysql
        • docker备份mysql
        • docker更改mysql配置
        • docker搭建nexus
      • 其他

        • 镜像的迁移和备份
        • 网络
        • 常见错误集
        • docker部署hdfs
        • docker容器时间和本地时间不一致
        • docker批量操作
    • 日常运维

      • docker实例内文件下载
      • docker仓库搭建(Nexus)
      • docker仓库搭建(Hub)
    • docker-file

      • dockerfile入门
      • dockerfile(java应用)
    • docker-compose

      • docker-compose意义
  • k8s

    • 首页
      • window相关安装和配置
      • window基础简单操作
  • haproxy

    • haproxy部署实战

      • haproxy部署介绍
      • haproxy部署实战
      • haproxy案例分析
  • jenkins

    • 环境部署搭建
    • 自由风格构建应用发布
    • 获取远程git项目|分支选择
    • pipeline构建应用
    • pipeline结合docker构建应用
    • 权限管理
    • web项目构建
    • 集成maven获取远程项目
    • 视图细粒度权限管理
    • 其他日常操作案例
    • 版本升级或重装备份问题
    • 多模块关联关闭
  • prometheus

    • 首页
      • window相关安装和配置
      • window基础简单操作
  • gitlab

    • 首页
      • window相关安装和配置
      • window基础简单操作
  • maven

    • 首页
      • window相关安装和配置
      • window基础简单操作
  • elk

    • openobserve

      • docker部署openobserve
      • 采集器fluent
      • openobserve日常管理使用
  • 运维|devops|jenkins构建应用发布
    • 添加任务
    • 配置git拉取项目
    • 配置maven
    • 构建项目
    • 构建shell和进行远程发布
      • shell脚本
    • 执行shell脚本(两种方式)
      • 第一种jenkins直接配置执行
      • 第二种远程服务器部署sh命令调用
    • 远程发布验证结果

运维|devops|jenkins构建应用发布

基于 jenkins Version 2.541.3 实操案例

添加任务

imgimg

配置git拉取项目

img

配置maven

确保maven的settings.xml配置正确,这里直接通过宿主机部署,所以只需要将宿主机settings.xml替换为正确就可以 img

  • maven settings.xml,如果没有nexus(私服)得先部署
<?xml version="1.0" encoding="UTF-8"?>
<settings xmlns="http://maven.apache.org/SETTINGS/1.2.0"
          xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
          xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.2.0
          https://maven.apache.org/xsd/settings-1.2.0.xsd">
  <servers>
    <server>
      <id>nexus-repo</id>
      <username>nexus账号</username>
      <password>nexus密码</password>
    </server>
  </servers>
  <profiles>
    <profile>
      <id>nexus</id>
      <repositories>
        <repository>
          <id>nexus-repo</id>
          <url>http://你的nexus地址/repository/maven-public/</url>
          <releases><enabled>true</enabled></releases>
          <snapshots><enabled>true</enabled></snapshots>
        </repository>
      </repositories>
      <pluginRepositories>
        <pluginRepository>
          <id>nexus-repo</id>
          <url>http://你的nexus地址/repository/maven-public/</url>
          <releases><enabled>true</enabled></releases>
          <snapshots><enabled>true</enabled></snapshots>
        </pluginRepository>
      </pluginRepositories>
    </profile>
  </profiles>
  <activeProfiles>
    <activeProfile>nexus</activeProfile>
  </activeProfiles>
</settings>
  • maven 默认本地仓库位置(因settings.xml没有指定)

/data/jenkins/.m2/repository

  • maven 命令

clean package -Dmaven.test.skip=true

构建项目

首次构建比较慢,会下载pom所有依赖jar img

  • 编译和打包之后 img

  • 构建远程部署目录

Remote directory 需要注意/temp,远程服务器完整目录为(Publish over SSH)里面Remote Directory+/temp

img

构建shell和进行远程发布

shell脚本

#!/bin/bash
app_name="Core.Api"
app_pattern="${app_name}-*.jar"
port=8085
temp_path=/usr/local/temp
deploy_path=/usr/local
JAVA_HOME=/usr/local/jdk-21.0.11
log_path=/data/log
log_file=${log_path}/core-api.log
deploy_log=${log_path}/deploy-api-$(date +%Y%m%d_%H%M%S).log

exec > "${deploy_log}" 2>&1
mkdir -p "${log_path}"
echo "=====部署开始 ${app_name}====="

# 等待Jar包上传完成,最多10s
new_jar=""
for ((i=0;i<10;i++)); do
    new_jar=$(find "${temp_path}" -maxdepth 1 -name "${app_pattern}" | head -1)
    [ -f "${new_jar}" ] && break
    echo "等待Jar包上传 $i/10"
    sleep 1
done
[ ! -f "${new_jar}" ] && echo "错误:未找到Jar包" && exit 1

jar_name=$(basename "${new_jar}")
target_jar="${deploy_path}/${jar_name}"
echo "待部署包:${new_jar}"

# 停止旧进程并等待进程消亡
run_pid=$(ps -ef | grep "java -jar" | grep "${app_name}" | grep -v grep | awk '{print $2}')
if [ -n "${run_pid}" ]; then
    echo "终止旧进程 ${run_pid}"
    kill -15 "${run_pid}"
    # 等待进程退出,最多16s
    for ((i=0;i<8;i++)); do
        ! ps -p "${run_pid}" >/dev/null && break
        echo "等待旧进程退出..."
        sleep 2
    done
    if ps -p "${run_pid}" >/dev/null; then
        echo "超时,强制杀死 ${run_pid}"
        kill -9 "${run_pid}"
        sleep 2
    fi
fi

# 端口兜底释放
while lsof -t -i:"${port}" >/dev/null; do
    echo "端口${port}占用,等待释放"
    sleep 2
done

# 更新jar
rm -f "${deploy_path}/${app_pattern}"
mv "${new_jar}" "${target_jar}"

# 启动服务
echo "启动应用 port:${port}"
nohup ${JAVA_HOME}/bin/java -jar \
-Dserver.port=${port} \
-Xmx512m -Xms256m \
"${target_jar}" >> "${log_file}" 2>&1 &
new_pid=$!
echo "新进程PID: ${new_pid}"

sleep 3
if ! ps -p "${new_pid}" >/dev/null; then
    echo "警告:进程启动异常,请查看日志 ${log_file}"
fi

rm -rf "${temp_path:?}"/*
echo "=====部署完成====="
exit 0

执行shell脚本(两种方式)

img

第一种jenkins直接配置执行

直接将上面shell命令复制进去

第二种远程服务器部署sh命令调用

将上面shell命令,部署到远程服务器

vim /usr/local/deploy.sh
# 粘贴完整脚本内容,保存退出(权限一定核实开通)
chmod +x /usr/local/deploy.sh
  • 上面文本框填入
bash /usr/local/deploy.sh

远程发布验证结果

img

最近更新: 2026/7/23 17:20
Contributors: kcnf
Prev
环境部署搭建
Next
获取远程git项目|分支选择