自动化部署-02-jenkins部署微服务
文章目录
- 前言
- 一、配置SSH-KEY
- 1.1 操作jenkins所在服务器
- 1.2 操作github
- 1.3 验证
- 二、服务器安装git
- 三、jenkins页面安装maven
- 四、页面配置自动化任务
- 4.1 新建任务
- 4.2 选择
- 4.3 配置参数
- 4.4 配置脚本
- 五、执行任务
- 5.1 点击执行按钮
- 5.2 填写参数
- 5.3 查看日志
- 六、查看服务器文件
- 七、部署到远程服务器(附加)
- 7.1 配置免密
- 7.2 远程部署脚本
- 总结
前言
jenkins从github等代码平台拉取代码到本地,然后在本地进行maven编译打包,最后启动微服务jar包。
一、配置SSH-KEY
1.1 操作jenkins所在服务器
在jenkins所在环境里执行:
#我使用root用户登录的机器,但是Jenkins 以 jenkins 用户运行的
#所以要切换到 Jenkins 用户环境
sudo -u jenkins -s
#生成SSH公钥
ssh-keygen -t ed25519 -C "xxxxx@xxxxx.com"
#查看公钥
cat /var/lib/jenkins/.ssh/id_ed25519.pub

1.2 操作github
在设置里新增保存。


1.3 验证
sudo -u jenkins -s
ssh -T git@github.com
#成功会打印You've successfully authenticated

二、服务器安装git
dnf install git
三、jenkins页面安装maven

因为我安装好了,所以Available plugins中搜素看不到。

maven的默认settings文件路径:
/var/lib/jenkins/tools/hudson.tasks.Maven_MavenInstallation/maven/conf
默认仓库路径:
/var/lib/jenkins/.m2/repository
可以修改settings文件,将仓库下载地址改为阿里云等。
四、页面配置自动化任务
4.1 新建任务

4.2 选择

4.3 配置参数

4.4 配置脚本

pipeline {agent anyenvironment {//配置自己的仓库地址REPOSITORY = "git@github.com:xxxx/mySpringCloudStudy.git"}tools {maven 'maven' // 引用在 Jenkins 中配置的 Maven 工具名称}stages {stage('拉取代码') {steps {echo "开始拉取代码,仓库:${REPOSITORY},分支:${branch}"echo "删除工作空间目录开始"deleteDir()echo "删除工作空间目录结束"git branch: '${branch}', url: "${REPOSITORY}"echo "结束拉取代码"}}stage('编译依赖项目') {steps {echo "编译父工程mySpringCloudStudy开始 ................................"//-P prod 选择编译环境,没有则删掉sh "mvn -P prod -U clean install -DskipTests"echo "编译父工程mySpringCloudStudy结束 ................................"}}}
}
五、执行任务
5.1 点击执行按钮

5.2 填写参数
选择分支,默认master
点击build

5.3 查看日志


success表示成功

六、查看服务器文件
cd /var/lib/jenkins/workspace/test
可以看到拉取的代码

可以看到编译好的jar包

七、部署到远程服务器(附加)
7.1 配置免密
在jenkins服务器执行
sudo -u jenkins ssh-keygen -t rsa -b 2048 -f /var/lib/jenkins/.ssh/id_rsa
cat /var/lib/jenkins/.ssh/id_rsa.pub
在远程部署微服务的服务器执行
vim ~/.ssh/authorized_keys
#将jenkins中/var/lib/jenkins/.ssh/id_rsa.pub的内容复制进去保存
回到jenkins服务器执行
sudo -u jenkins ssh root@10.211.55.110
#如果能够免密登录到远程微服务服务器,则表示成功。
7.2 远程部署脚本
start.sh
pkill -f "bztc-study01-8001-1.0.1-SNAPSHOT.jar" || true
nohup /root/jdk-17.0.10+7/bin/java -jar /opt/bztc-study/bztc-study01-8001-1.0.1-SNAPSHOT.jar > /opt/bztc-study/bztc-study01.log 2>&1 &
jenkins脚本:
pipeline {agent anyenvironment {REPOSITORY = "git@github.com:smdai/mySpringCloudStudy.git"}tools {maven 'maven' // 引用在 Jenkins 中配置的 Maven 工具名称}stages {stage('拉取代码') {steps {echo "开始拉取代码,仓库:${REPOSITORY},分支:${branch}"echo "删除工作空间目录开始"deleteDir()echo "删除工作空间目录结束"git branch: '${branch}', url: "${REPOSITORY}"echo "结束拉取代码"}}stage('编译依赖项目') {steps {echo "编译父工程mySpringCloudStudy开始 ................................"sh "mvn -P prod -U clean install -DskipTests"echo "编译父工程mySpringCloudStudy结束 ................................"}}stage('部署到远程服务器') {steps {echo "开始将 bztc-study01 JAR 包传输到远程服务器,并重启服务"// 使用 scp 将 JAR 包传输到远程服务器sh '''# 检查并终止已存在的 bztc-study01-8001-1.0.1-SNAPSHOT.jar 进程#ssh -vvv root@10.211.55.110 'pkill -f "bztc-study01-8001-1.0.1-SNAPSHOT.jar" || true'# 备份旧的 JAR 包,带时间戳ssh root@10.211.55.110 'mv /opt/bztc-study/bztc-study01-8001-1.0.1-SNAPSHOT.jar /opt/bztc-study/back/bztc-study01-8001-1.0.1-SNAPSHOT.jar.$(date +%Y%m%d%H%M%S)'# 传输新的 JAR 包到远程服务器scp bztc-study01/target/bztc-study01-8001-1.0.1-SNAPSHOT.jar root@10.211.55.110:/opt/bztc-study/# 启动新的 JAR 包并放入后台#ssh root@10.211.55.110 'nohup /root/jdk-17.0.10+7/bin/java -jar /opt/bztc-study/bztc-study01-8001-1.0.1-SNAPSHOT.jar > /opt/bztc-study/bztc-study01.log 2>&1 &'ssh root@10.211.55.110 'sh /opt/bztc-study/start.sh''''// 检查日志文件是否包含“成功”字样script {def maxWaitTime = 30 // 最大等待时间(秒)def pollInterval = 5 // 检查间隔(秒)def elapsed = 0while (elapsed < maxWaitTime) {def result = sh(script: "ssh root@10.211.55.110 'grep -q \"成功\" /opt/bztc-study/bztc-study01.log' || echo 'not_found'",returnStdout: true).trim()if (result != 'not_found') {echo "远程部署完成,服务已成功启动"break}if (elapsed >= maxWaitTime - pollInterval) {error "服务重启失败:未检测到“成功”字样"}sleep pollIntervalelapsed += pollInterval}}}}}
}
总结
如果日志中出现异常,则需具体问题具体分析。
相关文章:
自动化部署-02-jenkins部署微服务
文章目录 前言一、配置SSH-KEY1.1 操作jenkins所在服务器1.2 操作github1.3 验证 二、服务器安装git三、jenkins页面安装maven四、页面配置自动化任务4.1 新建任务4.2 选择4.3 配置参数4.4 配置脚本 五、执行任务5.1 点击执行按钮5.2 填写参数5.3 查看日志 六、查看服务器文件七…...
HTB:Analytics[WriteUP]
目录 连接至HTB服务器并启动靶机 1.How many open TCP ports are listening on Analytics? 2.What subdomain is configured to provide a different application on the target web server? 3.What application is running on data.analytical.htb? 4.What version of…...
【每日题解】3211. 生成不含相邻零的二进制字符串
给你一个正整数 n。 如果一个二进制字符串 x 的所有长度为 2 的 子字符串 中包含 至少 一个 "1",则称 x 是一个 有效 字符串。 返回所有长度为 n 的 有效 字符串,可以以任意顺序排列。 示例 1: 输入: n 3 输出&a…...
Nginx、Tomcat等项目部署问题及解决方案详解
目录 前言1. Nginx部署后未按预期显示结果1.1 查看Nginx的启动情况1.2 解决启动失败的常见原因 2. 端口开启问题2.1 Windows环境下的端口开放2.2 Linux环境下的端口开放 3. 重视日志分析3.1 Nginx日志分析3.2 Tomcat日志分析 4. 开发环境与部署后运行结果不同4.1 开发环境与生产…...
【PythonWeb开发】Flask-RESTful参数解析
flask-restful中的reqparse.RequestParser是一个用于解析和验证参数的工具。它可以帮助开发者从请求中提取参数,并确保这些参数符合预期的格式和类型。参数解析的意思就是规范化传入的参数并获取到这些参数。 一、什么是 reqparse.RequestParser? reqpa…...
gcc与mingw64版本介绍
三类编译器 GCC,全称为GNU Compiler Collection,是一个强大的编译器集合,它不仅支持C和C语言,还支持Fortran、Ada、Java等多种编程语言的编译。在GCC工具链中,gcc和g是两个核心的编译器工具。gcc是专门用于编译C语言程…...
CSS3新增长度单位
CSS3新增长度单位 rem:根元素字体的倍数,只与根元素字体大小有关;vw:占视口宽度的百分比;vh:占视口高度的百分比;vmax:占视口中宽和高最大的百分比;vmin:占视…...
【Spring】创建Spring项目前的配置工作
🥊作者:一只爱打拳的程序猿,Java领域新星创作者,CSDN、阿里云社区优质创作者。 🤼文章收录于:Spring 目录 1.下载Spring Initializr 2.配置Spring国内源 3.添加Spring框架的支持(pom.xml) 4.刷新Maven仓…...
docker 安装部署 nginx
命令 docker run \ -p 15008:80 \ --name nginx1.21.6 \ -v /iepms/nginx/conf/nginx.conf:/etc/nginx/nginx.conf \ -v /iepms/nginx/conf/conf.d:/etc/nginx/conf.d \ -v /iepms/nginx/log:/var/log/nginx \ -v /iepms/nginx/html:/usr/share/nginx/html \ -d 192.168.1.103…...
黑马数据库学习笔记
课程地址 (基础篇)MySQL的启动 mysql 默认使用 3306 端口 在 centos下,启动 mysql 数据库:service mysqld start; 查看状态/启动/停止/重启:systemctl status/start/stop/restart mysqld; 登录到mysql数据库&…...
MYSQL-SQL-03-DQL(Data Query Language,数据查询语言)(单表查询)
DQL(数据查询语言) DQL英文全称是Data Query Language(数据查询语言),数据查询语言,用来查询数据库中表的记录。 查询关键字: SELECT 在一个正常的业务系统中,查询操作的频次是要远高于增删改的,当我们去访…...
【数据结构和算法】三、动态规划原理讲解与实战演练
目录 1、什么是动态规划? 2、动态规划实战演练 2.1 力扣题之爬楼梯问题 (1)解题思路1: (2)解题思路2: (3)动态规划(DP):解题思路 (4&#x…...
交叉编译 perl-5.40.0(riscv64)
交叉编译 perl-5.40.0(riscv64) https://arsv.github.io/perl-cross/usage.html https://github.com/arsv/perl-cross 借助 perl-cross 进行交叉编译 https://www.perl.org/get.html#unix_like 这里获取 perl-5.40.0 的源码 https://github.com/arsv/pe…...
Leetcode 搜索旋转排序数组
这段代码是用于解决LeetCode第33题“搜索旋转排序数组”的Java解法。以下是对该算法思想的中文解释: 算法思想 二分查找的基本思路: 由于数组是部分有序的(被旋转过),我们可以利用二分查找的思想,逐步缩小…...
Spring Task—定时任务
Spring Task 是 Spring 提供的一种轻量级定时任务调度功能,内置在 Spring 框架中。与 Quartz 等重量级调度框架相比,Spring Task 使用简便,无需额外依赖,适合在简单的调度任务场景中使用。通过注解配置方式,开发者可以…...
Spring Boot 应用开发概述
目录 Spring Boot 应用开发概述 Spring Boot 的核心特性 Spring Boot 的开发模式 Spring Boot 在企业应用开发中的优势 结论 Spring Boot 应用开发概述 Spring Boot 是由 Pivotal 团队开发的一个框架,基于 Spring 框架,旨在简化和加速基于 Spring …...
Chrome谷歌浏览器加载ActiveX控件之allWebDesktop控件介绍
背景 allWebDesktop控件是一款方便用户在线打开各类文档的OA办公控件。它设计比较轻巧,充分利用计算机程序资源打开文档,并将程序窗口嵌入到allWebDesktop控件区域内,从而实现浏览器内打开各类文档效果。 allWebPlugin中间件是一款为用户提供…...
GitHub Star 数量前 5 的开源应用程序生成器
欢迎来的 GitHub Star 数量排名系列文章的第 7 篇——最受欢迎的应用程序生成器。 之前我们已经详细探讨过:在 GitHub 上最受欢迎的——无代码工具、低代码项目、内部工具、CRUD项目、自部署项目和 Airtable 开源替代品。累计超过 50 个优质项目!&#…...
DBC文件当中新建CANFD等类型的报文
同学最近有添加CANFD报文的需求,需要用到CANFD类型报文的DBC文件,这下就难住我了,我之前用的DBC文件只有“CAN Standard”“CAN Extended”两种类型,压根没见过FD的。 后来他找到了项目之前的DBC,打开来看,…...
基于SpringBoot的房地产销售管理系统【附源码】
基于SpringBoot的房地产销售管理系统(源码L文说明文档) 目录 4 系统设计 4.1用户登录功能的详细实现 4.2管理员权限的功能实现 4.2.1客户信息管理功能的详细实现 4.2.2房产管理功能的详细实现 4.2.3预约看房功能的详细实现 4.2.4论…...
Spark 之 入门讲解详细版(1)
1、简介 1.1 Spark简介 Spark是加州大学伯克利分校AMP实验室(Algorithms, Machines, and People Lab)开发通用内存并行计算框架。Spark在2013年6月进入Apache成为孵化项目,8个月后成为Apache顶级项目,速度之快足见过人之处&…...
day52 ResNet18 CBAM
在深度学习的旅程中,我们不断探索如何提升模型的性能。今天,我将分享我在 ResNet18 模型中插入 CBAM(Convolutional Block Attention Module)模块,并采用分阶段微调策略的实践过程。通过这个过程,我不仅提升…...
Mybatis逆向工程,动态创建实体类、条件扩展类、Mapper接口、Mapper.xml映射文件
今天呢,博主的学习进度也是步入了Java Mybatis 框架,目前正在逐步杨帆旗航。 那么接下来就给大家出一期有关 Mybatis 逆向工程的教学,希望能对大家有所帮助,也特别欢迎大家指点不足之处,小生很乐意接受正确的建议&…...
深入浅出:JavaScript 中的 `window.crypto.getRandomValues()` 方法
深入浅出:JavaScript 中的 window.crypto.getRandomValues() 方法 在现代 Web 开发中,随机数的生成看似简单,却隐藏着许多玄机。无论是生成密码、加密密钥,还是创建安全令牌,随机数的质量直接关系到系统的安全性。Jav…...
三体问题详解
从物理学角度,三体问题之所以不稳定,是因为三个天体在万有引力作用下相互作用,形成一个非线性耦合系统。我们可以从牛顿经典力学出发,列出具体的运动方程,并说明为何这个系统本质上是混沌的,无法得到一般解…...
select、poll、epoll 与 Reactor 模式
在高并发网络编程领域,高效处理大量连接和 I/O 事件是系统性能的关键。select、poll、epoll 作为 I/O 多路复用技术的代表,以及基于它们实现的 Reactor 模式,为开发者提供了强大的工具。本文将深入探讨这些技术的底层原理、优缺点。 一、I…...
Spring Cloud Gateway 中自定义验证码接口返回 404 的排查与解决
Spring Cloud Gateway 中自定义验证码接口返回 404 的排查与解决 问题背景 在一个基于 Spring Cloud Gateway WebFlux 构建的微服务项目中,新增了一个本地验证码接口 /code,使用函数式路由(RouterFunction)和 Hutool 的 Circle…...
基于Java Swing的电子通讯录设计与实现:附系统托盘功能代码详解
JAVASQL电子通讯录带系统托盘 一、系统概述 本电子通讯录系统采用Java Swing开发桌面应用,结合SQLite数据库实现联系人管理功能,并集成系统托盘功能提升用户体验。系统支持联系人的增删改查、分组管理、搜索过滤等功能,同时可以最小化到系统…...
LCTF液晶可调谐滤波器在多光谱相机捕捉无人机目标检测中的作用
中达瑞和自2005年成立以来,一直在光谱成像领域深度钻研和发展,始终致力于研发高性能、高可靠性的光谱成像相机,为科研院校提供更优的产品和服务。在《低空背景下无人机目标的光谱特征研究及目标检测应用》这篇论文中提到中达瑞和 LCTF 作为多…...
论文阅读:Matting by Generation
今天介绍一篇关于 matting 抠图的文章,抠图也算是计算机视觉里面非常经典的一个任务了。从早期的经典算法到如今的深度学习算法,已经有很多的工作和这个任务相关。这两年 diffusion 模型很火,大家又开始用 diffusion 模型做各种 CV 任务了&am…...
