当前位置: 首页 > news >正文

自动化部署-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"&#xff0c;则称 x 是一个 有效 字符串。 返回所有长度为 n 的 有效 字符串&#xff0c;可以以任意顺序排列。 示例 1&#xff1a; 输入&#xff1a; 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是一个用于解析和验证参数的工具。它可以帮助开发者从请求中提取参数&#xff0c;并确保这些参数符合预期的格式和类型。参数解析的意思就是规范化传入的参数并获取到这些参数。 一、什么是 reqparse.RequestParser&#xff1f; reqpa…...

gcc与mingw64版本介绍

三类编译器 GCC&#xff0c;全称为GNU Compiler Collection&#xff0c;是一个强大的编译器集合&#xff0c;它不仅支持C和C语言&#xff0c;还支持Fortran、Ada、Java等多种编程语言的编译。在GCC工具链中&#xff0c;gcc和g是两个核心的编译器工具。gcc是专门用于编译C语言程…...

CSS3新增长度单位

CSS3新增长度单位 rem&#xff1a;根元素字体的倍数&#xff0c;只与根元素字体大小有关&#xff1b;vw&#xff1a;占视口宽度的百分比&#xff1b;vh&#xff1a;占视口高度的百分比&#xff1b;vmax&#xff1a;占视口中宽和高最大的百分比&#xff1b;vmin&#xff1a;占视…...

【Spring】创建Spring项目前的配置工作

&#x1f94a;作者&#xff1a;一只爱打拳的程序猿&#xff0c;Java领域新星创作者&#xff0c;CSDN、阿里云社区优质创作者。 &#x1f93c;文章收录于&#xff1a;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…...

黑马数据库学习笔记

课程地址 &#xff08;基础篇&#xff09;MySQL的启动 mysql 默认使用 3306 端口 在 centos下&#xff0c;启动 mysql 数据库&#xff1a;service mysqld start; 查看状态/启动/停止/重启&#xff1a;systemctl status/start/stop/restart mysqld; 登录到mysql数据库&…...

MYSQL-SQL-03-DQL(Data Query Language,数据查询语言)(单表查询)

DQL&#xff08;数据查询语言&#xff09; DQL英文全称是Data Query Language(数据查询语言)&#xff0c;数据查询语言&#xff0c;用来查询数据库中表的记录。 查询关键字: SELECT 在一个正常的业务系统中&#xff0c;查询操作的频次是要远高于增删改的&#xff0c;当我们去访…...

【数据结构和算法】三、动态规划原理讲解与实战演练

目录 1、什么是动态规划&#xff1f; 2、动态规划实战演练 2.1 力扣题之爬楼梯问题 &#xff08;1&#xff09;解题思路1: &#xff08;2&#xff09;解题思路2: &#xff08;3&#xff09;动态规划&#xff08;DP&#xff09;&#xff1a;解题思路 &#xff08;4&#x…...

交叉编译 perl-5.40.0(riscv64)

交叉编译 perl-5.40.0&#xff08;riscv64&#xff09; 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解法。以下是对该算法思想的中文解释&#xff1a; 算法思想 二分查找的基本思路&#xff1a; 由于数组是部分有序的&#xff08;被旋转过&#xff09;&#xff0c;我们可以利用二分查找的思想&#xff0c;逐步缩小…...

Spring Task—定时任务

Spring Task 是 Spring 提供的一种轻量级定时任务调度功能&#xff0c;内置在 Spring 框架中。与 Quartz 等重量级调度框架相比&#xff0c;Spring Task 使用简便&#xff0c;无需额外依赖&#xff0c;适合在简单的调度任务场景中使用。通过注解配置方式&#xff0c;开发者可以…...

Spring Boot 应用开发概述

目录 Spring Boot 应用开发概述 Spring Boot 的核心特性 Spring Boot 的开发模式 Spring Boot 在企业应用开发中的优势 结论 Spring Boot 应用开发概述 Spring Boot 是由 Pivotal 团队开发的一个框架&#xff0c;基于 Spring 框架&#xff0c;旨在简化和加速基于 Spring …...

Chrome谷歌浏览器加载ActiveX控件之allWebDesktop控件介绍

背景 allWebDesktop控件是一款方便用户在线打开各类文档的OA办公控件。它设计比较轻巧&#xff0c;充分利用计算机程序资源打开文档&#xff0c;并将程序窗口嵌入到allWebDesktop控件区域内&#xff0c;从而实现浏览器内打开各类文档效果。 allWebPlugin中间件是一款为用户提供…...

GitHub Star 数量前 5 的开源应用程序生成器

欢迎来的 GitHub Star 数量排名系列文章的第 7 篇——最受欢迎的应用程序生成器。 之前我们已经详细探讨过&#xff1a;在 GitHub 上最受欢迎的——无代码工具、低代码项目、内部工具、CRUD项目、自部署项目和 Airtable 开源替代品。累计超过 50 个优质项目&#xff01;&#…...

DBC文件当中新建CANFD等类型的报文

同学最近有添加CANFD报文的需求&#xff0c;需要用到CANFD类型报文的DBC文件&#xff0c;这下就难住我了&#xff0c;我之前用的DBC文件只有“CAN Standard”“CAN Extended”两种类型&#xff0c;压根没见过FD的。 后来他找到了项目之前的DBC&#xff0c;打开来看&#xff0c…...

基于SpringBoot的房地产销售管理系统【附源码】

基于SpringBoot的房地产销售管理系统&#xff08;源码L文说明文档&#xff09; 目录 4 系统设计 4.1用户登录功能的详细实现 4.2管理员权限的功能实现 4.2.1客户信息管理功能的详细实现 4.2.2房产管理功能的详细实现 4.2.3预约看房功能的详细实现 4.2.4论…...

Vim 调用外部命令学习笔记

Vim 外部命令集成完全指南 文章目录 Vim 外部命令集成完全指南核心概念理解命令语法解析语法对比 常用外部命令详解文本排序与去重文本筛选与搜索高级 grep 搜索技巧文本替换与编辑字符处理高级文本处理编程语言处理其他实用命令 范围操作示例指定行范围处理复合命令示例 实用技…...

Python爬虫实战:研究MechanicalSoup库相关技术

一、MechanicalSoup 库概述 1.1 库简介 MechanicalSoup 是一个 Python 库,专为自动化交互网站而设计。它结合了 requests 的 HTTP 请求能力和 BeautifulSoup 的 HTML 解析能力,提供了直观的 API,让我们可以像人类用户一样浏览网页、填写表单和提交请求。 1.2 主要功能特点…...

【杂谈】-递归进化:人工智能的自我改进与监管挑战

递归进化&#xff1a;人工智能的自我改进与监管挑战 文章目录 递归进化&#xff1a;人工智能的自我改进与监管挑战1、自我改进型人工智能的崛起2、人工智能如何挑战人类监管&#xff1f;3、确保人工智能受控的策略4、人类在人工智能发展中的角色5、平衡自主性与控制力6、总结与…...

React hook之useRef

React useRef 详解 useRef 是 React 提供的一个 Hook&#xff0c;用于在函数组件中创建可变的引用对象。它在 React 开发中有多种重要用途&#xff0c;下面我将全面详细地介绍它的特性和用法。 基本概念 1. 创建 ref const refContainer useRef(initialValue);initialValu…...

SciencePlots——绘制论文中的图片

文章目录 安装一、风格二、1 资源 安装 # 安装最新版 pip install githttps://github.com/garrettj403/SciencePlots.git# 安装稳定版 pip install SciencePlots一、风格 简单好用的深度学习论文绘图专用工具包–Science Plot 二、 1 资源 论文绘图神器来了&#xff1a;一行…...

根据万维钢·精英日课6的内容,使用AI(2025)可以参考以下方法:

根据万维钢精英日课6的内容&#xff0c;使用AI&#xff08;2025&#xff09;可以参考以下方法&#xff1a; 四个洞见 模型已经比人聪明&#xff1a;以ChatGPT o3为代表的AI非常强大&#xff0c;能运用高级理论解释道理、引用最新学术论文&#xff0c;生成对顶尖科学家都有用的…...

Rapidio门铃消息FIFO溢出机制

关于RapidIO门铃消息FIFO的溢出机制及其与中断抖动的关系&#xff0c;以下是深入解析&#xff1a; 门铃FIFO溢出的本质 在RapidIO系统中&#xff0c;门铃消息FIFO是硬件控制器内部的缓冲区&#xff0c;用于临时存储接收到的门铃消息&#xff08;Doorbell Message&#xff09;。…...

.Net Framework 4/C# 关键字(非常用,持续更新...)

一、is 关键字 is 关键字用于检查对象是否于给定类型兼容,如果兼容将返回 true,如果不兼容则返回 false,在进行类型转换前,可以先使用 is 关键字判断对象是否与指定类型兼容,如果兼容才进行转换,这样的转换是安全的。 例如有:首先创建一个字符串对象,然后将字符串对象隐…...

均衡后的SNRSINR

本文主要摘自参考文献中的前两篇&#xff0c;相关文献中经常会出现MIMO检测后的SINR不过一直没有找到相关数学推到过程&#xff0c;其中文献[1]中给出了相关原理在此仅做记录。 1. 系统模型 复信道模型 n t n_t nt​ 根发送天线&#xff0c; n r n_r nr​ 根接收天线的 MIMO 系…...

MFC 抛体运动模拟:常见问题解决与界面美化

在 MFC 中开发抛体运动模拟程序时,我们常遇到 轨迹残留、无效刷新、视觉单调、物理逻辑瑕疵 等问题。本文将针对这些痛点,详细解析原因并提供解决方案,同时兼顾界面美化,让模拟效果更专业、更高效。 问题一:历史轨迹与小球残影残留 现象 小球运动后,历史位置的 “残影”…...