禅与计算机 禅与计算机
首页
  • Java基础

    • 聊一聊java一些核心知识点
    • 聊聊java面向对象核心知识点
    • 聊聊Java中的异常
    • 聊聊Java中的常用类String
    • 万字长文带你细聊Java注解本质
    • 来聊聊Java的反射机制
    • 深入解析Java泛型的魅力与机制
    • Java集合框架深度解析与面试指南
    • Java常用集合类HashMap深度解析
    • LinkedHashMap源码到面试题的全解析
    • 深入解析CopyOnWriteArrayList的工作机制
    • Java基础IO总结
    • Java三大IO模型小结
    • Java BIO NIO AIO详解
    • Java进阶NIO之IO多路复用详解
    • Java8流式编程入门
    • 一文速通lambda与函数式编程
    • Java8函数式方法引用最佳实践
  • Java并发编程

    • Java并发编程基础小结
    • 深入理解Java中的final关键字
    • 浅谈Java并发安全发布技术
    • 浅谈Java并发编程中断的哲学
    • Java线程池知识点小结
    • 浅谈Java线程池中拒绝策略与流控的艺术
    • synchronized关键字使用指南
    • 深入源码解析synchronized关键字
    • 详解JUC包下的锁
    • 详解并发编程中的CAS原子类
    • LongAdder源码分析
    • AQS源码解析
    • 深入剖析Java并发编程中的死锁问题
    • Java并发容器总结
    • 详解Java并发编程volatile关键字
    • 并发编程ThreadLocal必知必会
    • CompletableFuture基础实践小结
    • CompletableFuture异步多任务最佳实践
    • 硬核详解FutureTask设计与实现
    • 线程池大小设置的底层逻辑与场景化方案
    • 来聊一个有趣的限流器RateLimiter
  • JVM相关

    • 从零开始掌握 JVM
    • JVM核心知识点小结
    • JVM指令集概览:基础与应用
    • JVM类加载器深度解析
    • JVM方法区深度解析
    • Java内存模型JMM详解
    • Java对象大小的精确计算方法
    • 逃逸分析在Java中的应用与优化
    • 从零开始理解JVM的JIT编译机制
    • G1垃圾回收器:原理详解与调优指南
    • JVM故障排查实战指南
    • JVM内存问题排错最佳实践
    • JVM内存溢出排查指南
    • 简明的Arthas使用教程
    • 简明的Arthas配置及基础运维教程
    • 基于Arthas Idea的JVM故障排查与指令生成
    • 基于arthas量化监控诊断java应用方法论与实践
    • 深入剖析arthas技术原理
  • 深入理解Spring框架

    • Spring 核心知识点全面解析
    • Spring核心功能IOC详解
    • Spring AOP 深度剖析与实践
    • Spring 三级缓存机制深度解析
    • 深入 Spring 源码,剖析设计模式的落地实践
    • 探索 Spring 事务的奥秘
    • 深入解析Spring Bean的生命周期管理
    • 解读 Spring Boot 核心知识点
    • Spring Boot 启动优化实战:1分钟到13秒的排查与优化之路
    • Spring Boot自动装配原理及实践
    • 一文快速上手Sharding-JDBC
    • sharding-jdbc如何实现分页查询
    • 基于DynamicDataSource整合分库分表框架Shardingsphere
  • 计算机组成原理

    • 计算机硬件知识小结
    • CPU核心知识点小结
    • 浅谈CPU流水线的艺术
    • 从Java程序员视角聊聊CPU缓存
    • CPU任务调度和伪共享问题小结
    • CPU MESI缓存一致性协议
    • CPU内存管理机制
    • 内存深度解析
    • 磁盘存储原理
    • 详解计算机启动步骤
    • CPU南北桥架构与发展史
    • CPU中断机制与硬件交互详解
  • 操作系统

    • 如何实现一个高性能服务器
    • Linux文件结构与文件权限
    • Linux常见压缩指令小结
    • Linux核心系统调用详解
    • Linux进程管理
    • Linux线程管理
    • 进程与线程深度解析
    • Linux进程间通信机制
    • 零拷贝技术原理与实践
    • CPU缓存一致性问题深度解析
    • IO任务与CPU调度艺术
  • 计算机网络

    • 网卡通信原理详解
    • 网卡数据包处理指南
    • 基于抓包详解TCP协议
  • 编码最佳实践

    • 浅谈现代软件工程TDD最佳实践
    • 浅谈TDD模式下并发程序设计与实现
    • 面向AI编程新范式Trae后端开发环境搭建与实践
    • 基于提示词工程的Redis签到功能开发实践
    • 基于Vibe Coding的Redis分页查询实现
    • 告别AI无效对话:资深工程师的提示词设计最佳实践
  • 实用技巧与配置

    • Mac常用快捷键与效率插件指南
    • Keynote技术科普短视频制作全攻略
  • 写作

    • 写好技术博客的5大核心原则:从认知科学到AI工具的全流程指南
  • 开发工具

    • IDEA配置详解与高效使用指南
  • Nodejs
  • 博客搭建
  • Redis

    • Redis核心知识小结
    • 解锁Redis发布订阅模式
    • 掌握Redis事务
    • Redis主从复制技术
    • Redis的哨兵模式详解
    • 深度剖析Redisson分布式锁
    • 详解redis单线程设计思路
    • 来聊聊Redis所实现的Reactor模型
    • Redis RDB持久化源码深度解析
    • 来聊聊redis的AOF写入
    • 来聊聊Redis持久化AOF管道通信的设计
    • 来聊聊redis集群数据迁移
    • Redis SDS动态字符串深度解析
    • 高效索引的秘密:redis跳表设计与实现
    • 聊聊redis中的字典设计与实现
  • MySQL

    • MySQL基础知识点小结
    • 解读MySQL 索引基础
    • MySQL 索引进阶指南
    • 解读MySQL Explain关键字
    • 探秘 MySQL 锁:原理与实践
    • 详解MySQL重做日志redolog
    • 详解undoLog在MySQL MVCC中的运用
    • MySQL二进制日志binlog核心知识点
    • MySQL高效插入数据的最佳实践
    • MySQL分页查询优化指南
    • MySQL流式查询的奥秘与应用解析
    • 来聊聊分库分表
    • 来聊聊大厂常用的分布式ID生成方案
  • ElasticSearch

    • 从Lucene到Elasticsearch:进化之路
    • ES 基础使用指南
    • ElasticSearch如何写入一篇文档
    • 深入剖析Elasticsearch文档读取原理
    • 聊聊ElasticSearch性能调优
    • Spring借助Easy-Es操作ES
  • Netty

    • 一文快速了解高性能网络通信框架Netty
    • Netty网络传输简记
    • 来聊聊Netty的ByteBuf
    • 来聊聊Netty消息发送的那些事
    • 解密Netty高性能之谜:NioEventLoop线程池阻塞分析
    • 详解Netty中的责任链Pipeline如何管理ChannelHandler
    • Netty Reactor模型常见知识点小结
    • Netty如何驾驭TCP流式传输?粘包拆包问题全解
    • Netty解码器源码解析
  • 消息队列

    • 一文快速入门消息队列
    • 消息队列RocketMQ入门指南
    • 基于RocketMQ实现分布式事务
    • RocketMQ容器化最佳实践
    • RocketMQ常见问题与深度解析
    • Kafka快速安装与使用指南
  • Nginx

    • Linux下的nginx安装
    • Nginx基础入门总结
    • Nginx核心指令小结
    • Nginx进程结构与核心模块初探
    • Nginx应用进阶HTTP核心模块配置
    • Nginx缓存及HTTPS配置小记
    • nginx高可用实践简记
    • Nginx性能优化
  • 微服务基础

    • 微服务基础知识小结
    • 分布式事务核心概念小结
    • OpenFeign核心知识小结
    • 微服务组件Gateway核心使用小结
    • 分布式事务Seata实践
    • 用 Docker Compose 完成 Seata 的整合部署
  • Nacos

    • Nacos服务注册原理全解析
    • Nacos服务订阅流程全解析
    • Nacos服务变更推送流程全解析
    • 深入解析SpringCloud负载均衡器Loadbalancer
    • Nacos源码环境搭建与调试指南
  • Seata

    • 深度剖析Seata源码
  • Docker部署

    • 一文快速掌握docker的理念和基本使用
    • 使用docker编排容器
    • 基于docker-compose部署微服务基本环境
    • 基于docker容器化部署微服务
    • Gateway全局异常处理及请求响应监控
    • Docker图形化界面工具Portainer最佳实践
  • Go基础

    • 一文带你速通Go语言基础语法
    • 一文快速掌握Go语言切片
    • 来聊聊go语言的hashMap
    • 一文速通go语言类型系统
    • 浅谈Go语言中的面向对象
    • go语言是如何实现协程的
    • 聊聊go语言中的GMP模型
    • 极简的go语言channel入门
    • 聊聊go语言基于epoll的网络并发实现
    • 写给Java开发的Go语言协程实践
  • mini-redis实战

    • 来聊聊我用go手写redis这件事
    • mini-redis如何解析处理客户端请求
    • 实现mini-redis字符串操作
    • 硬核复刻redis底层双向链表核心实现
    • 动手复刻redis之go语言下的字典的设计与落地
    • Go 语言下的 Redis 跳表设计与实现
    • Go 语言版 Redis 有序集合指令复刻探索
  • 项目编排

    • Spring脚手架创建简记
    • Spring脚手架集成分页插件
    • Spring脚手架集成校验框架
    • maven父子模块两种搭建方式简记
    • SpringBoot+Vue3前后端快速整合入门
    • 来聊聊Java项目分层规范
  • 场景设计

    • Java实现文件分片上传
    • 基于时间缓存优化浏览器轮询阻塞问题
    • 基于EasyExcel实现高效导出
    • 10亿数据高效插入MySQL最佳方案
    • 从开源框架中学习那些实用的位运算技巧
  • CI/CD

    • 基于NETAPP实现内网穿透
    • 基于Gitee实现Jenkins自动化部署SpringBoot项目
    • Jenkins离线安装部署教程简记
    • 基于Nexus搭建Maven私服基础入门
    • 基于内网的Jenkins整合gitlab综合方案简记
  • 监控方法论

    • SpringBoot集成Prometheus与Grafana监控
    • Java监控度量Micrometer全解析
    • 从 micrometer计量器角度快速上手promQL
    • 硬核安利一个监控告警开源项目Nightingale
  • Spring AI

    • Spring AI Alibaba深度实战:一文掌握智能体开发全流程
    • Spring AI Alibaba实战:JVM监控诊断Arthas Agent的工程化构建与最佳实践
  • 大模型评测

    • M2.7 真能打!我用两个真实场景测了测,结果有点意外
    • Qoder JetBrains插件评测:祖传代码重构与接口优化实战
关于
收藏
  • 分类
  • 标签
  • 归档
GitHub (opens new window)

sharkchili

计算机禅修者
首页
  • Java基础

    • 聊一聊java一些核心知识点
    • 聊聊java面向对象核心知识点
    • 聊聊Java中的异常
    • 聊聊Java中的常用类String
    • 万字长文带你细聊Java注解本质
    • 来聊聊Java的反射机制
    • 深入解析Java泛型的魅力与机制
    • Java集合框架深度解析与面试指南
    • Java常用集合类HashMap深度解析
    • LinkedHashMap源码到面试题的全解析
    • 深入解析CopyOnWriteArrayList的工作机制
    • Java基础IO总结
    • Java三大IO模型小结
    • Java BIO NIO AIO详解
    • Java进阶NIO之IO多路复用详解
    • Java8流式编程入门
    • 一文速通lambda与函数式编程
    • Java8函数式方法引用最佳实践
  • Java并发编程

    • Java并发编程基础小结
    • 深入理解Java中的final关键字
    • 浅谈Java并发安全发布技术
    • 浅谈Java并发编程中断的哲学
    • Java线程池知识点小结
    • 浅谈Java线程池中拒绝策略与流控的艺术
    • synchronized关键字使用指南
    • 深入源码解析synchronized关键字
    • 详解JUC包下的锁
    • 详解并发编程中的CAS原子类
    • LongAdder源码分析
    • AQS源码解析
    • 深入剖析Java并发编程中的死锁问题
    • Java并发容器总结
    • 详解Java并发编程volatile关键字
    • 并发编程ThreadLocal必知必会
    • CompletableFuture基础实践小结
    • CompletableFuture异步多任务最佳实践
    • 硬核详解FutureTask设计与实现
    • 线程池大小设置的底层逻辑与场景化方案
    • 来聊一个有趣的限流器RateLimiter
  • JVM相关

    • 从零开始掌握 JVM
    • JVM核心知识点小结
    • JVM指令集概览:基础与应用
    • JVM类加载器深度解析
    • JVM方法区深度解析
    • Java内存模型JMM详解
    • Java对象大小的精确计算方法
    • 逃逸分析在Java中的应用与优化
    • 从零开始理解JVM的JIT编译机制
    • G1垃圾回收器:原理详解与调优指南
    • JVM故障排查实战指南
    • JVM内存问题排错最佳实践
    • JVM内存溢出排查指南
    • 简明的Arthas使用教程
    • 简明的Arthas配置及基础运维教程
    • 基于Arthas Idea的JVM故障排查与指令生成
    • 基于arthas量化监控诊断java应用方法论与实践
    • 深入剖析arthas技术原理
  • 深入理解Spring框架

    • Spring 核心知识点全面解析
    • Spring核心功能IOC详解
    • Spring AOP 深度剖析与实践
    • Spring 三级缓存机制深度解析
    • 深入 Spring 源码,剖析设计模式的落地实践
    • 探索 Spring 事务的奥秘
    • 深入解析Spring Bean的生命周期管理
    • 解读 Spring Boot 核心知识点
    • Spring Boot 启动优化实战:1分钟到13秒的排查与优化之路
    • Spring Boot自动装配原理及实践
    • 一文快速上手Sharding-JDBC
    • sharding-jdbc如何实现分页查询
    • 基于DynamicDataSource整合分库分表框架Shardingsphere
  • 计算机组成原理

    • 计算机硬件知识小结
    • CPU核心知识点小结
    • 浅谈CPU流水线的艺术
    • 从Java程序员视角聊聊CPU缓存
    • CPU任务调度和伪共享问题小结
    • CPU MESI缓存一致性协议
    • CPU内存管理机制
    • 内存深度解析
    • 磁盘存储原理
    • 详解计算机启动步骤
    • CPU南北桥架构与发展史
    • CPU中断机制与硬件交互详解
  • 操作系统

    • 如何实现一个高性能服务器
    • Linux文件结构与文件权限
    • Linux常见压缩指令小结
    • Linux核心系统调用详解
    • Linux进程管理
    • Linux线程管理
    • 进程与线程深度解析
    • Linux进程间通信机制
    • 零拷贝技术原理与实践
    • CPU缓存一致性问题深度解析
    • IO任务与CPU调度艺术
  • 计算机网络

    • 网卡通信原理详解
    • 网卡数据包处理指南
    • 基于抓包详解TCP协议
  • 编码最佳实践

    • 浅谈现代软件工程TDD最佳实践
    • 浅谈TDD模式下并发程序设计与实现
    • 面向AI编程新范式Trae后端开发环境搭建与实践
    • 基于提示词工程的Redis签到功能开发实践
    • 基于Vibe Coding的Redis分页查询实现
    • 告别AI无效对话:资深工程师的提示词设计最佳实践
  • 实用技巧与配置

    • Mac常用快捷键与效率插件指南
    • Keynote技术科普短视频制作全攻略
  • 写作

    • 写好技术博客的5大核心原则:从认知科学到AI工具的全流程指南
  • 开发工具

    • IDEA配置详解与高效使用指南
  • Nodejs
  • 博客搭建
  • Redis

    • Redis核心知识小结
    • 解锁Redis发布订阅模式
    • 掌握Redis事务
    • Redis主从复制技术
    • Redis的哨兵模式详解
    • 深度剖析Redisson分布式锁
    • 详解redis单线程设计思路
    • 来聊聊Redis所实现的Reactor模型
    • Redis RDB持久化源码深度解析
    • 来聊聊redis的AOF写入
    • 来聊聊Redis持久化AOF管道通信的设计
    • 来聊聊redis集群数据迁移
    • Redis SDS动态字符串深度解析
    • 高效索引的秘密:redis跳表设计与实现
    • 聊聊redis中的字典设计与实现
  • MySQL

    • MySQL基础知识点小结
    • 解读MySQL 索引基础
    • MySQL 索引进阶指南
    • 解读MySQL Explain关键字
    • 探秘 MySQL 锁:原理与实践
    • 详解MySQL重做日志redolog
    • 详解undoLog在MySQL MVCC中的运用
    • MySQL二进制日志binlog核心知识点
    • MySQL高效插入数据的最佳实践
    • MySQL分页查询优化指南
    • MySQL流式查询的奥秘与应用解析
    • 来聊聊分库分表
    • 来聊聊大厂常用的分布式ID生成方案
  • ElasticSearch

    • 从Lucene到Elasticsearch:进化之路
    • ES 基础使用指南
    • ElasticSearch如何写入一篇文档
    • 深入剖析Elasticsearch文档读取原理
    • 聊聊ElasticSearch性能调优
    • Spring借助Easy-Es操作ES
  • Netty

    • 一文快速了解高性能网络通信框架Netty
    • Netty网络传输简记
    • 来聊聊Netty的ByteBuf
    • 来聊聊Netty消息发送的那些事
    • 解密Netty高性能之谜:NioEventLoop线程池阻塞分析
    • 详解Netty中的责任链Pipeline如何管理ChannelHandler
    • Netty Reactor模型常见知识点小结
    • Netty如何驾驭TCP流式传输?粘包拆包问题全解
    • Netty解码器源码解析
  • 消息队列

    • 一文快速入门消息队列
    • 消息队列RocketMQ入门指南
    • 基于RocketMQ实现分布式事务
    • RocketMQ容器化最佳实践
    • RocketMQ常见问题与深度解析
    • Kafka快速安装与使用指南
  • Nginx

    • Linux下的nginx安装
    • Nginx基础入门总结
    • Nginx核心指令小结
    • Nginx进程结构与核心模块初探
    • Nginx应用进阶HTTP核心模块配置
    • Nginx缓存及HTTPS配置小记
    • nginx高可用实践简记
    • Nginx性能优化
  • 微服务基础

    • 微服务基础知识小结
    • 分布式事务核心概念小结
    • OpenFeign核心知识小结
    • 微服务组件Gateway核心使用小结
    • 分布式事务Seata实践
    • 用 Docker Compose 完成 Seata 的整合部署
  • Nacos

    • Nacos服务注册原理全解析
    • Nacos服务订阅流程全解析
    • Nacos服务变更推送流程全解析
    • 深入解析SpringCloud负载均衡器Loadbalancer
    • Nacos源码环境搭建与调试指南
  • Seata

    • 深度剖析Seata源码
  • Docker部署

    • 一文快速掌握docker的理念和基本使用
    • 使用docker编排容器
    • 基于docker-compose部署微服务基本环境
    • 基于docker容器化部署微服务
    • Gateway全局异常处理及请求响应监控
    • Docker图形化界面工具Portainer最佳实践
  • Go基础

    • 一文带你速通Go语言基础语法
    • 一文快速掌握Go语言切片
    • 来聊聊go语言的hashMap
    • 一文速通go语言类型系统
    • 浅谈Go语言中的面向对象
    • go语言是如何实现协程的
    • 聊聊go语言中的GMP模型
    • 极简的go语言channel入门
    • 聊聊go语言基于epoll的网络并发实现
    • 写给Java开发的Go语言协程实践
  • mini-redis实战

    • 来聊聊我用go手写redis这件事
    • mini-redis如何解析处理客户端请求
    • 实现mini-redis字符串操作
    • 硬核复刻redis底层双向链表核心实现
    • 动手复刻redis之go语言下的字典的设计与落地
    • Go 语言下的 Redis 跳表设计与实现
    • Go 语言版 Redis 有序集合指令复刻探索
  • 项目编排

    • Spring脚手架创建简记
    • Spring脚手架集成分页插件
    • Spring脚手架集成校验框架
    • maven父子模块两种搭建方式简记
    • SpringBoot+Vue3前后端快速整合入门
    • 来聊聊Java项目分层规范
  • 场景设计

    • Java实现文件分片上传
    • 基于时间缓存优化浏览器轮询阻塞问题
    • 基于EasyExcel实现高效导出
    • 10亿数据高效插入MySQL最佳方案
    • 从开源框架中学习那些实用的位运算技巧
  • CI/CD

    • 基于NETAPP实现内网穿透
    • 基于Gitee实现Jenkins自动化部署SpringBoot项目
    • Jenkins离线安装部署教程简记
    • 基于Nexus搭建Maven私服基础入门
    • 基于内网的Jenkins整合gitlab综合方案简记
  • 监控方法论

    • SpringBoot集成Prometheus与Grafana监控
    • Java监控度量Micrometer全解析
    • 从 micrometer计量器角度快速上手promQL
    • 硬核安利一个监控告警开源项目Nightingale
  • Spring AI

    • Spring AI Alibaba深度实战:一文掌握智能体开发全流程
    • Spring AI Alibaba实战:JVM监控诊断Arthas Agent的工程化构建与最佳实践
  • 大模型评测

    • M2.7 真能打!我用两个真实场景测了测,结果有点意外
    • Qoder JetBrains插件评测:祖传代码重构与接口优化实战
关于
收藏
  • 分类
  • 标签
  • 归档
GitHub (opens new window)
  • 项目编排

  • 场景设计

  • CI-CD

    • 基于NETAPP实现内网穿透
    • 基于Gitee实现Jenkins自动化部署SpringBoot项目
      • 前言
      • 预期效果
      • Jenkins安装与配置
        • 准备jdk11
        • 下载Jenkins安装包
        • 启动Jenkins
        • 进行Jenkins初始化配置
        • 基本信息页面配置用户基本信息
        • 常规插件安装
        • Jenkins系统配置
        • 跨域配置解决
        • 插件配置
      • 项目配置
        • 准备一个spring-boot项目
        • Jenkins上创建一个item
        • 测试部署过程是否成功
      • 基于gitee的webhook实现自动化部署
        • 配置Jenkins中的gitee配置
        • 配置构建触发器
        • 配置netAPP(外网用户可忽略这一步)
        • 配置gitee webhook
        • 全流程测试
      • 其他
        • 浏览器进入Jenkins完成登录
        • 关闭Jenkins
        • 重启Jenkies
        • 重新加载配置信息
      • 参考文献
    • Jenkins离线安装部署教程简记
    • 基于Nexus搭建Maven私服基础入门
    • 基于自动化脚本批量上传依赖到nexus内网私服
    • 内网服务器部署maven私服简记
    • 基于内网的Jenkins整合gitlab综合方案简记
  • 架构设计

  • 监控方法论

  • 软件工程实践
  • CI-CD
sharkchili
2023-05-01
目录

基于Gitee实现Jenkins自动化部署SpringBoot项目

# 前言

近期项目组需要对老项目做一些持续集成和持续部署的要求,所以再次部署了一边Jenkins,将整个配置过程记录到博客中。 在部署的过程中笔者尝试通过阿里云的方式部署了一遍,而本文为了更直观的介绍整个过程会给予虚拟机再次进行部署。

注:本篇教程部署过程是基于外网部署的,关于内网的部署过程后续笔者会将文章整理出来。

# 预期效果

如下图我们本次配置的Jenkins可以做到下图所示的效果:

  1. 我们本地开发项目提交到gitee上。
  2. gitee根据我们的配置通知Jenkins更新。
  3. Jenkins收到更新通知完成最新分支拉取并更新服务器项目。

在这里插入图片描述

所以我们现在在gitee上准备了这样一个spring boot项目。

在这里插入图片描述

可以看到如果我们键入

curl 127.0.0.1:9500/hello

1
2

那么就会输出

Hello shark-chili!
1

这一点,我们也可以在服务器上得以印证。

在这里插入图片描述

现在我们不妨做个修改,将输出结果改为hello java

在这里插入图片描述

然后将项目提交

在这里插入图片描述

随后可以看到我们服务器上的Jenkins自动开始打包。

在这里插入图片描述

再次curl一遍,发现结果更新了。这就是我们的持续集成和持续部署的一次完整的流程,是不是比手动打包更方便呢?

在这里插入图片描述

了解了整体预期效果之后,我们就开始Jenkins的安装和配置过程。

# Jenkins安装与配置

# 准备jdk11

注意,最新版本的Jenkins基本都是使用jdk11,所以我们这里需要提前准备一下jdk11。这一步网上应该很多地方都可以找到资料,感兴趣的读者可以自行配置。笔者这里服务器已经提前准备好了,就不多赘述了。

在这里插入图片描述

# 下载Jenkins安装包

首先自然是到Jenkins官网下载,笔者为了简单,就直接采用war包的形式进行部署。对应war包地址下载如下:

http://mirrors.jenkins.io/war-stable/latest/jenkins.war (opens new window)

完成war包下载之后,我们将这个包推送到服务器上。

在这里插入图片描述

# 启动Jenkins

为了保证后续步骤的顺利,我们先使用前台命令启动一下Jenkins。

/root/jdk11/bin/java -jar jenkins.war --httpPort=8080
1

如下图所示,如果我们可以通过8080端口打开看到这个页面就说明Jenkins启动成功了。那么我们就可以开始进行Jenkins的初始化配置了。

在这里插入图片描述

# 进行Jenkins初始化配置

从上文图中我们知道初次访问Jenkins需要键入管理员密码,密码位置在上图也已经展示,我们按需找到对应文件复制粘贴即可。

我们键入命令

 cat /root/.jenkins/secrets/initialAdminPassword

1
2

然后会看到一段输出结果,我们将其复制粘贴到页面上即可。

在这里插入图片描述

然后直接点击下一步

在这里插入图片描述

下一个页面,我们按照默认选择推荐插件安装即可。

在这里插入图片描述

这一步可能比较久,大家需要耐心等待一会就好了。等到这一步完成之后我们进入用户基本信息配置了。

在这里插入图片描述

# 基本信息页面配置用户基本信息

如下图所示,我们只要配置后续用到的登录用户信息即可。

在这里插入图片描述

这里选择默认即可,点击下一步即可。

在这里插入图片描述

自此我们就完成了Jenkins最基础的配置了,后续我们就进入页面进行系统全局的配置了。

在这里插入图片描述

# 常规插件安装

笔者本次安装的版本为2.387.2,界面看起来还是蛮清爽的。这里我们需要点击下图所示的按钮进入管理界面,找到插件管理进行一些插件安装。

在这里插入图片描述

如下图,我们点击manage plugins

在这里插入图片描述

首先找到Publish over SSH,点击安装。

在这里插入图片描述

同理由于我们的项目为spring boot项目,所以我们要找到maven插件点击安装。

在这里插入图片描述

由于我们的项目存放在gitee上,所以最后就是gitee插件了的安装了。

在这里插入图片描述

上述步骤安装完成之后,我们重启一下Jenkins确保插件生效以及后台启动开始进入下一步配置步骤。

nohup /root/jdk11/bin/java  -jar /home/jenkins/jenkins.war --httpPort=8080 &
1

# Jenkins系统配置

我们点击系统配置进入Jenkins全局配置页面。

在这里插入图片描述

首先滑到最下方,找到 Publish over SSH进行远程服务器配置。

在这里插入图片描述

再往下滑一些输入远程服务器信息。

在这里插入图片描述

点击一下测试配置,确认连通性,如果没问题,点击保存即可。

在这里插入图片描述

# 跨域配置解决

笔者上一次搭建过程中,会遇到跨域的问题,所以这里提前设置的一下,解决跨域问题。首先我们点击全局安全设置。

在这里插入图片描述

找到跨域请求伪造保护,勾选启动代理兼容器,完成后点击保存即可。 在这里插入图片描述

这里还需要补充一部,笔者上一次部署Jenkins时gitee推送请求到Jenkins报了403 No valid crumb was included in the request,所以我们还需要点击脚本命令行输入一段指令解决另一个跨域问题。

在这里插入图片描述

如下图所示,在文本框中输入

hudson.security.csrf.GlobalCrumbIssuerConfiguration.DISABLE_CSRF_PROTECTION = true

1
2

然后点击运行

在这里插入图片描述

出现result为true,就说明这一步成功了。

在这里插入图片描述

回到我们的全局安全配置页面,可以看到跨站请求伪造保护变成这样的文本,由此确认所有的跨域问题都配置解决了。

在这里插入图片描述

# 插件配置

接下来就是jdk、maven、git相关插件的配置了。

在这里插入图片描述

首先是maven的配置,这里只需指定maven的setting文件路径即可。

在这里插入图片描述

然后就是jdk的配置

在这里插入图片描述

然后就是git的安装和配置了。

在这里插入图片描述

最后我们再配置一下maven的路径

在这里插入图片描述

# 项目配置

# 准备一个spring-boot项目

关于Jenkins的基本配置都差不多完成了,接下来我们就可以准备一个web项目实现持续集成和持续部署了。

这里笔者也提前准备好了一个spring boot项目并将其初始化提交到gitee仓库。

在这里插入图片描述

# Jenkins上创建一个item

点击新建任务

在这里插入图片描述

输入项目名称,选择构建一个maven项目并点击确定。

在这里插入图片描述

然后我们就到达了项目配置页面了。

在这里插入图片描述

我们不妨先添加一段描述

在这里插入图片描述

然后输入项目的远程仓库地址,可以看到这里抛出了未认证的问题,原因很简单,我们没有键入git的账号和密码,所以我们点击添加键配置一下。

在这里插入图片描述

点击添加,选择Jenkins凭据提供者。

在这里插入图片描述

输入gitee账号和密码,然后点击确定。

在这里插入图片描述

然后页面就会跳转回源码管理的页面,我们选择刚刚配置的账号即可。

在这里插入图片描述

可以看到现在不仅不会报错了,还输出了一段分支的情况,这里我们默认选择master即可。

在这里插入图片描述

我们继续往下滑找到build,输入构建的maven命令,以笔者为例,键入的maven命令为:

clean package -U -Dmaven.testskip=true
1

注意,上述测试命令无法避免编译测试,如果希望跳过所有测试的用户建议使用下面这个命令:

clean package -Dmaven.test.skip=true -D.test.skip=true
1

在这里插入图片描述

然后我们就继续配置后置构建完成后的操作了,因为笔者后续会将项目存到tmp目录,所以笔者这里会在tmp目录写一个名为stop.sh的脚本,内容如下:

#!/bin/bash
echo "Stop Procedure : jenkins-spring-boot.jar"
pid=`ps -ef |grep java|grep jenkins-spring-boot.jar|awk '{print $2}'`
echo 'old Procedure pid:'$pid
if [ -n "$pid" ]
then
kill -9 $pid
fi
exit 0
1
2
3
4
5
6
7
8
9

完成后将这个脚本权限设置为777

chmod 777 stop.sh
1

完成这个脚本配置之后,我们就可以配置post step了

在这里插入图片描述

从上图中可以看到笔者键入了一段脚本,如下所示,这段脚本做的步骤为:

  1. maven打包
  2. 将打包的jar包复制到tmp目录下,注意这个目录路径格式为Jenkins工作路径+创建的item名+target+jar包名称。
  3. 进入tmp目录。
  4. 执行停止脚本。
  5. 重点!!!改变BUILD_ID值,避免Jenkins脚本执行结束后将我们启动的maven项目关闭。
  6. 启动项目。
#!/bin/bash
# 复制文件
cp /root/.jenkins/workspace/first-project/target/jenkins-spring-boot.jar /tmp/
# 进入服务器目录
cd /tmp/
# 停止
sh stop.sh
# 修改BUILD_ID避免下面的启动命令启动的子进程被Jenkins杀掉
BUILD_ID=dontKillMe
nohup java -jar jenkins-spring-boot.jar &
1
2
3
4
5
6
7
8
9
10

# 测试部署过程是否成功

完成所有配置后,我们可以先看看配置是否准确,这里点击构建测试一下。

在这里插入图片描述

可以看到任务栏显示我们正在构建的任务,我们可以点击进度条查看进度。

在这里插入图片描述

点击控制台输出可以查看构建详情。

在这里插入图片描述

经过漫长的等待,可以看到我的部署成功了。

在这里插入图片描述

我们到服务器看看有没有启动的Java进程,如下所示,可以可以看到Jenkins成功的拉到我们的项目并将项目启动了。

[root@localhost tmp]# ps -ef |grep java
root       9237      1  0 02:54 ?        00:01:16 /root/jdk11/bin/java -jar jenk                                                                              ins.war --httpPort=8080
root      12928      1 22 05:38 ?        00:00:03 java -jar jenkins-spring-boot.                                                                              jar
root      12969   9681  0 05:38 pts/3    00:00:00 grep --color=auto java
1
2
3
4

测试连通性,可以看到输出了hello java,自此Jenkins的基本部署配置是完成了。

[root@localhost tmp]# curl 127.0.0.1:9500/hello
Hello java ![root@localhost tmp]#

1
2
3

# 基于gitee的webhook实现自动化部署

# 配置Jenkins中的gitee配置

我们上文演示的项目可以看到,我们只需提交一下代码,Jenkins就会自动完成打包部署,这一点就是通过在gitee配置Jenkins的更新触发地址实现的,所以确保上述部署过程是成功的之后,我们不妨完善一下gitee的配置实现自动化部署。

我们在系统管理中找到系统配置选择gitee配置。

在这里插入图片描述

如下图先输入完gitee链接名和url地址。

在这里插入图片描述

然后点击添加配置gitee令牌。

在这里插入图片描述

点击添加后会出现一个弹窗,如下图我们将类型设置为gitee api令牌,然后点击截图所示的地址到gitee去创建令牌。

在这里插入图片描述

如下图点开这个链接输入我们的账号密码就会到达这个界面,我们需要点击添加创建一个令牌。

在这里插入图片描述

如下图,我们编辑好描述直接点击提交。 在这里插入图片描述

然后我们就会得到一串令牌的值,点击复制。

在这里插入图片描述

回到Jenkins粘贴上去,然后点击添加。

在这里插入图片描述

此时页面就会跳转回gitee配置页面,我们选择刚刚配置的令牌。

在这里插入图片描述

点击一下测试链接,确保成功之后,我们继续下一步。

在这里插入图片描述

# 配置构建触发器

回到Jenkins主页,点击我们配置的item

在这里插入图片描述

点击配置,进入配置界面

在这里插入图片描述

找到构建触发器,勾选gitee webhook触发构建,将截图中的url地址记下来,后面配置gitee会用到。

在这里插入图片描述

往下走一点,找到webhook密码点击生成,生成后将其复制下来,配置gitee会用到。

在这里插入图片描述

完成配置并将url和生成密码记下来之后点击保存,进入gitee的配置。

在这里插入图片描述

# 配置netAPP(外网用户可忽略这一步)

不知道读者是否注意,笔者做实验的时候服务器是放在虚拟机的,这也就意味gitee无法调用到这个地址触发Jenkins构建的,所以这里我们需要做一下内网穿透配置,将http://192.168.0.103:8080/gitee-project/first-projec通过netapp的隧道实现内外网交互。

碍于篇幅原因,笔者这里就不多做演示了,需要了解内网穿透技术的读者可以看看笔者这篇文章,步骤不难,简单了解一下就能上手:

基于NETAPP实现内网穿透 (opens new window)

可以看到笔者这里配置完成之后,通过netapp就得到一个外网地址,外网用户即可通过这个地址访问笔者虚拟机的8080端口。

在这里插入图片描述

# 配置gitee webhook

上文我们得到的Jenkins触发地址和webhook密码,这里我们到gitee界面完成剩余配置。首先点击我们的gitee上对应项目的地址,选择管理。

在这里插入图片描述

点击添加web hook,将刚刚复制的url和密码粘贴上去,完成后点击更新。

在这里插入图片描述

我们回到页面,可以看到gitee自动触发了一次构建,可以看到请求结果为成功。

在这里插入图片描述

我们立刻到Jenkins上看看,可以看到Jenkins收到了gitee的一次构建请求,自此自动化部署就算完全打通了,我们不妨修改一下代码测试一下全流程。

在这里插入图片描述

# 全流程测试

如下图,我们将代码修改一下并提交,只要我们看到最终服务器上输出结果为hello shak-chili就说明Jenkins回自动化部署更新了。

在这里插入图片描述

代码提交后不久,我们看到看了Jenkins自动触发了一次更新。我们耐心等它构建完成。

在这里插入图片描述

完成后,我们请求一下这个地址。可以看到输出结果为hello shack-chili,由此可知整个自动化部署步骤算是完结了。

在这里插入图片描述

# 其他

有时候我们希望重启Jenkins让某些配置生效,亦或者让Jenkins关闭,这里笔者就介绍Jenkins中几个页面上重启和关闭的方式。

# 浏览器进入Jenkins完成登录

http://Jenkins的ip地址:Jenkins启动端口/
1

# 关闭Jenkins

http://Jenkins的ip地址:Jenkins启动端口/exit 
1

# 重启Jenkies

http://Jenkins的ip地址:Jenkins启动端口/restart 
1

# 重新加载配置信息

http://Jenkins的ip地址:Jenkins启动端口/reload 
1

# 参考文献

Jenkins自动化部署入门详细教程 (opens new window)

Jenkins 安装部署启动 Springboot 项目 (opens new window)

Jenkins自动化部署后端项目看这篇就够了 (opens new window)

jenkins 搭建gitee实现代码自动化部署 (opens new window)

Jenkins + Gitee 实现代码自动化构建 (超级详细) (opens new window)

码云 Gitee + Jenkins 配置教程 (opens new window)

jenkins出现故障,报错HTTP ERROR 403 No valid crumb was included in the request (opens new window)

Jenkins 远程触发 403 No valid crumb was included in the request (opens new window)

linux中Jenkins启动/重启/停止命令 (opens new window)

编辑 (opens new window)
上次更新: 2026/03/26, 01:05:31
基于NETAPP实现内网穿透
Jenkins离线安装部署教程简记

← 基于NETAPP实现内网穿透 Jenkins离线安装部署教程简记→

最近更新
01
基于EasyExcel实现高效导出
03-25
02
从开源框架中学习那些实用的位运算技巧
03-25
03
浅谈分布式架构设计思想和常见优化手段
03-25
更多文章>
Theme by Vdoing | Copyright © 2025-2026 Evan Xu | MIT License | 桂ICP备2024034950号 | 桂公网安备45142202000030
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式
×
×