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

【Linux】基于 Jenkins+shell 实现更新服务所需文件 -->两种方式:ssh/Ansible

在这里插入图片描述

👨‍🎓博主简介

  🏅云计算领域优质创作者
  🏅华为云开发者社区专家博主
  🏅阿里云开发者社区专家博主
💊交流社区:运维交流社区 欢迎大家的加入!
🐋 希望大家多多支持,我们一起进步!😄
🎉如果文章对你有帮助的话,欢迎 点赞 👍🏻 评论 💬 收藏 ⭐️ 加关注+💗


文章目录

  • 前提:
  • 一、新建一个Item
  • 二、增加一个构建步骤并填写构建内容
  • 三、构建一个简易的项目
  • 四、使用 Jenkins 更新本地的一个jar包
  • 五、使用 Jenkins 更新多台服务器jar包
    • 5.1 使用密钥方式对服务器之间进行免密登录设置
      • 5.1.1 首先,创建私有 SSH-Keygen密钥
      • 5.1.2 上传 SSH 密钥
      • 5.1.3 测试几台服务器传文件是否需要密码
      • 5.1.4 设置Jenkins 中的shell脚本,实现多台服务器更新操作
    • 5.2 使用 Ansible 服务实现对服务器之间进行操作
      • 5.2.1 首先,需要安装 Ansible服务
      • 5.2.2 配置 Ansible的hosts
      • 5.2.3 测试服务器之间是否互通
      • 5.3.4 设置Jenkins 中的shell脚本,实现多台服务器更新操作
  • 六、成功实现文件更新

前提:

  • 需要安装好Jenkins

【Linux】部署Jenkins(简介及详细教程【war包部署】)

【Linux】Docker 搭建 Jenkins

Jenkins专栏:Jenkins专栏

一、新建一个Item

新建 Item --> 选择Freestyle project --> 自己起一个名字 -->确定

在这里插入图片描述

二、增加一个构建步骤并填写构建内容

翻到最下面,找到 Build Steps --> Execute shell

在这里插入图片描述

在这里写shell脚本就行,需要执行什么和linux上执行一样的;

在这里插入图片描述

先使用一条命令来测试一下,自己随便输入那条命令都可以;这里我写一个ls /root/命令;

写完之后点击保存

在这里插入图片描述

三、构建一个简易的项目

保存完毕之后,点击左边的Build Now构建项目;

在这里插入图片描述

这样就构建完了,我们可以查看构建日志;
直接点击构建成功的那个位置,或者后面有个小三角,在点击控制台输出

在这里插入图片描述

这块就输出了刚刚执行的脚本日志了;

在这里插入图片描述

这样,自定义构建项目就完成了;

如果需要更改配置,可以点击上面的项目名称 --> 然后左边的配置 --> 接着给shell即可;

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

这样完整的一个使用shell脚本自定义构建项目就完成了;这只是一个简单的列子,接下来,我们讲解:使用Jenkins更新服务jar包

四、使用 Jenkins 更新本地的一个jar包

还是和前两部一样,先新建一个Item,在增加一个构建步骤并填写构建内容;最主要是shell脚本里的内容;

这里给大家写一个示例:

#!/bin/bash# 本机jar包路径(路径可以自己定义)
src_jar_path="/root/a.jar"# 远程JAR包路径(路径可以自己定义)
dest_jar_path="/home/lcy/cs/a.jar"# 创建目标路径(没有则创建,有则跳过)
mkdir -p /home/lcy/cs/# 备份jar包,替换jar包;先判断有没有这个文件,如果有则备份文件并复制新的文件过去;如果没有直接复制新的文件过去,并提示;
if [ -e $dest_jar_path ];thenmv $dest_jar_path $dest_jar_path-$(date +"%Y-%m-%d")cp -ar $src_jar_path $dest_jar_path
elseecho "目标路径没有这个文件"cp -ar $src_jar_path $dest_jar_path
fi# 复制完之后,自己加一下启动命令即可;

写完之后,点击保存,并构建;

在这里插入图片描述

完成之后可以查看一下服务器上有没有这个jar包了;可以看到没问题;

在这里插入图片描述

那么在执行一下,就会备份这个,然后在拿一个新的jar包过来;

在这里插入图片描述

可以看到将之前的备份了,然后有拉来一个新的jar包;

在这里插入图片描述

这样就实现更新操作了,不过这只是本机更新,要想其他服务器也更新我们就需要去配置;

五、使用 Jenkins 更新多台服务器jar包

还是和前两部一样,先新建一个Item,在增加一个构建步骤并填写构建内容;最主要是shell脚本里的内容;

更新多台服务器和更新一台不一样,需要去链接其他的服务器,进行更新;
这里有两种方法:

  • 一种是使用密钥实现要更新的服务器之间免密,在进行更新;
  • 还有一种就是使用 ansible 技术实现远程登陆更新;

5.1 使用密钥方式对服务器之间进行免密登录设置

5.1.1 首先,创建私有 SSH-Keygen密钥

ssh-keygen -t rsa

一直回车即可;

在这里插入图片描述

5.1.2 上传 SSH 密钥

从服务器 172.16.10.232 使用 SSH,并在服务器 172.16.10.224 的 root 的 .ssh 目录下上传新生成的公钥(id_rsa.pub),文件名为authorized_keys

给本地和其他电脑都上传上公钥;

ssh-copy-id root@172.16.10.232
ssh-copy-id root@172.16.10.224

需要输入服务器密码,都输入一下即可;

5.1.3 测试几台服务器传文件是否需要密码

scp jdk-18.0.2.1.zip root@172.16.10.232:/home/lcy/cs/

在这里插入图片描述

可以看到是不需要的;所以免密就成功了;

5.1.4 设置Jenkins 中的shell脚本,实现多台服务器更新操作

还是和前两部一样,先新建一个Item,在增加一个构建步骤并填写构建内容;最主要是shell脚本里的内容;

这里我给大家写一下我的执行的内容(示例);

#!/bin/bash# 服务器列表(这里写的是ip地址)
servers=("server1" "server2" "server3")# 本机jar包路径(路径可以自己定义)
src_jar_path="/root/a.jar"# 远程JAR包路径(路径可以自己定义)
dest_jar_path="/home/lcy/cs/a.jar"# 创建目标路径(没有则创建,有则跳过)
mkdir -p /home/lcy/cs/# 循环远程执行命令
for server in "${servers[@]}"; do
# 备份jar包,替换jar包;先判断有没有这个文件,如果有则备份文件并复制新的文件过去;如果没有直接复制新的文件过去,并提示;if [ -e $dest_jar_path ];thenssh root@$server "mv $dest_jar_path $dest_jar_path-$(date +"%Y-%m-%d")"scp $src_jar_path root@$server:$dest_jar_pathelseecho "目标路径没有这个文件"scp $src_jar_path root@$server:$dest_jar_pathfi
done# 复制完之后,自己加一下启动命令即可;

写完shell之后,点击构建;

在这里插入图片描述

构建完成,查看其他服务器是否上传成功,如果成功了,那么就没问题了,我这里是测试了两台,都上传了,成功了。

5.2 使用 Ansible 服务实现对服务器之间进行操作

更多Ansible服务的信息请参考:Ansible自动化运维(二)ad-hoc 模式详解

5.2.1 首先,需要安装 Ansible服务

yum -y install ansible

5.2.2 配置 Ansible的hosts

[root@localhost cs]# cat /etc/ansible/hosts
# 在最后追加服务器信息如下:[server1]
172.16.10.*** ansible_ssh_port=22 ansible_ssh_user=root ansible_ssh_pass='******'[server2]
172.16.10.*** ansible_ssh_port=22 ansible_ssh_user=root ansible_ssh_pass='******'

更多Ansible服务的信息请参考:Ansible自动化运维(二)ad-hoc 模式详解

这样Ansible的配置就完成了,这里我们使用ad-hoc模式就行;

5.2.3 测试服务器之间是否互通

ansible server1 -m shell -a "ls /root/"

在这里插入图片描述

可以查到,没问题。

5.3.4 设置Jenkins 中的shell脚本,实现多台服务器更新操作

还是和前两部一样,先新建一个Item,在增加一个构建步骤并填写构建内容;最主要是shell脚本里的内容;

这里我给大家写一下我的执行的内容(示例);

#!/bin/bash# 服务器列表(这里写的是ansible中配置的主机组名)
servers=("server1" "server2")# 本机jar路径(路径可以自己定义)
src_jar_path="/root/a.jar"# 远程JAR包路径(路径可以自己定义)
dest_jar_path="/home/lcy/cs/a.jar"# 创建目标路径(没有则创建,有则跳过)
mkdir -p /home/lcy/cs/# 循环远程执行命令
for server in "${servers[@]}";do
# 备份jar包,替换jar包;先判断有没有这个文件,如果有则备份文件并复制新的文件过去;如果没有直接复制新的文件过去,并提示;if [ -e $dest_jar_path ];thenansible $server -m shell -a "mv $dest_jar_path $dest_jar_path-$(date +"%Y-%m-%d");"ansible $server -m copy -a "src=$src_jar_path dest=$dest_jar_path"elseecho "没有这个文件,没有必要备份";ansible $server -m copy -a "src=$src_jar_path dest=$dest_jar_path"fi
done# 复制完之后,自己加一下启动命令即可;

写完shell之后,点击构建;

在这里插入图片描述

构建完成,查看其他服务器是否上传成功,如果成功了,那么就没问题了,我这里是测试了两台,都上传了,成功了。

六、成功实现文件更新

相关文章:

【Linux】基于 Jenkins+shell 实现更新服务所需文件 -->两种方式:ssh/Ansible

👨‍🎓博主简介 🏅云计算领域优质创作者   🏅华为云开发者社区专家博主   🏅阿里云开发者社区专家博主 💊交流社区:运维交流社区 欢迎大家的加入! 🐋 希望大家多多支…...

5月4(信息差)

🎄 HDMI ARC国产双精度浮点dsp杜比数码7.1声道解码AC3/dts/AAC环绕声光纤、同轴、USB输入解码板KC33C 🌍 国铁集团回应高铁票价将上涨 https://finance.eastmoney.com/a/202405043066422773.html ✨ 源代码管理平台GitLab发布人工智能编程助手DuoCha…...

【Spring】1.Spring中IOC与DI全解析

本节将详细介绍Spring框架的两个核心概念:控制反转(IOC)和依赖注入(DI)。首先,我们会探讨IOC和DI的定义,实现原理,优点和缺点。然后,我们将介绍如何在Spring中使用IOC和D…...

vue2迁移到vue3,v-model的调整

项目从vue2迁移到vue3,v-model不能再使用了,需要如何调整? 下面只提示变化最小的迁移,不赘述vue2和vue3中的常规写法。 vue2迁移到vue3,往往不想去调整之前的代码,以下就使用改动较小的方案进行调整。 I…...

【C语言】解决不同场景字符串问题:巧妙运用字符串函数

🌈个人主页:是店小二呀 🌈C语言笔记专栏:C语言笔记 🌈C笔记专栏: C笔记 🌈喜欢的诗句:无人扶我青云志 我自踏雪至山巅 文章目录 一、字符函数1.1 字符分类函数1.1.1 islower1.1.2 isupper 1.…...

android 如何显示网络地址对应的图片

1.android 如何显示网络地址对应的图片 在Android中显示网络地址对应的图片,通常有多种方法可以实现。以下是几种常见的方法: 1. 使用ImageView和Picasso库 Picasso是一个强大的图片加载库,它可以方便地加载网络图片并显示到ImageView中。 …...

【项目学习01_2024.05.02_Day04】

学习笔记 4 课程分类查询4.1需求分析4.2 接口定义4.3 接口开发4.3.1 树型表查询4.3.2 开发Mapper 4 课程分类查询 4.1需求分析 有课程分类的需求 course_category课程分类表的结构 这张表是一个树型结构,通过父结点id将各元素组成一个树。 利用mybatis-plus-gen…...

Android SQLite中的UNIQUE constraint failed错误

报错信息: UNIQUE constraint failed SQLite中的UNIQUE constraint failed错误,表明尝试插入或更新数据库时出现了违反唯一性约束的情况。唯一性约束确保在特定列或列集合中的值在表中是唯一的,即不能有重复的值。当你尝试插入或更新已存在于…...

嘴尚绝卤味:传承经典,缔造美食新风尚

卤味,作为中国传统美食的代表之一,历经千年的传承与发展,早已成为无数食客餐桌上的宠儿。而在这个美食盛行的时代,嘴尚绝卤味凭借其独特的口感和精湛的工艺,成为卤味市场中的佼佼者,引领着卤味文化的新潮流…...

Docker 入门与实践:从零开始构建容器化应用环境

Docker 一、docker常用命令docker ps 格式化输出Linux设置命令别名 二、数据卷相关命令挂载到默认目录(/var/lib/docker)挂载到本地目录 三、自定义镜像Dockerfile构建镜像的命令 四、网络自定义网络 五、DockerCompose相关命令 一、docker常用命令 dock…...

C# 用户控件UserControl事件解绑资源释放

用户控件继承子 UserControl 。 现在有个业务需求在UserControl 所在的窗体关闭时解除事件HMouseDown绑定。 因没有相关的Close事件。后来本人想了一个办法在 ROICtlDesigner类的 Dispose 方法中执行相关的释放代码 比如解除事件绑定 释放资源 public partial class ROICt…...

QT-QTCreator环境配置

准备工作: 下载QT: 链接:https://pan.baidu.com/s/1prJcsC4DGqhKiXvLuPQFVA?pwd60b3 提取码:60b3下载WindowsKits: 链接:https://pan.baidu.com/s/1QNiS3HpbH5M5kXx5AhkqnQ?pwde2h8 提取码:e2h8安装的…...

最大连续和

【问题描述】 对于一个具有n个元素的整型数组 a,求具有最大连续和的子数组(最少具有一个元素)。 【输入形式】 输入的第一行为一个整数 n,接下来的一行为 n 个整数,表示数组的元素。 【输出形式】 输出具有最大连续和的…...

分布式系统事务一致性解决方案(基于事务消息)

参考:https://rocketmq.apache.org/zh/docs/featureBehavior/04transactionmessage/ 文章目录 概要错误的方案方案一:业务方自己实现方案二:RocketMQ 事务消息什么是事务消息事务消息处理流程事务消息生命周期使用限制使用示例使用建议 概要 …...

Unity Animation--动画剪辑

Unity Animation--动画剪辑 动画剪辑 动画剪辑是Unity动画系统的核心元素之一。Unity支持从外部来源导入动画,并提供创建动画剪辑的能力使用“动画”窗口在编辑器中从头开始。 外部来源的动画 从外部来源导入的动画剪辑可能包括: 人形动画 运动捕捉…...

如何将 redis 快速部署为 docker 容器?

部署 Redis 作为 Docker 容器是一种快速、灵活且可重复使用的方式,特别适合开发、测试和部署环境。本文将详细介绍如何将 Redis 部署为 Docker 容器,包括 Docker 安装、Redis 容器配置、数据持久化、网络设置等方面。 步骤 1:安装 Docker 首…...

iOS - Undefined symbols: 解决方法

Undefined symbols: 是让人苦恼的报错,如何知道是 哪个 symbols 不对呢? 今天探索到下面的方法: 1、点击导航上方 最右侧的按钮,查看历史报错 2、选中报错信息,右键选择 Expand All Transcripts 在出现的详细信息面…...

优化理论复习——(三)

本篇介绍无约束优化的问题,通过四种算法来进行求解的过程和思路,也是最优化方法中的最重要的一类问题。 无约束优化问题主要是通过迭代搜索算法来切结,比线性规划的计算量都小一点。 目录 无约束优化问题最优性条件最速下降法牛顿法共轭梯度…...

RK3568笔记二十四:基于Flask的网页监控系统

若该文为原创文章,转载请注明原文出处。 此实验参考 《鲁班猫监控检测》,原代码有点BUG,已经下载不了。2. 鲁班猫监控检测 — [野火]嵌入式AI应用开发实战指南—基于LubanCat-RK系列板卡 文档 (embedfire.com) 一、简介 记录简单的摄像头监…...

[Django 0-1] Core.Serializers 模块

Core.Serializers 模块 Django 序列化模块 模块结构 . ├── __init__.py ├── base.py ├── json.py ├── jsonl.py ├── python.py ├── pyyaml.py └── xml_serializer.py1 directory, 7 files自定义序列化器 通过继承django.core.serializers.base.Serial…...

鸿蒙内核源码分析(用栈方式篇) | 程序运行场地谁提供的

精读内核源码就绕不过汇编语言,鸿蒙内核有6个汇编文件,读不懂它们就真的很难理解以下问题. 1.系统调用是如何实现的? 2.CPU是如何切换任务和进程上下文的? 3.硬件中断是如何处理的? 4.main函数到底是怎么来的? 5.开机最开始发生了什么? 6.关机…...

Linux 进程间通信之匿名管道

💓博主CSDN主页:麻辣韭菜💓   ⏩专栏分类:Linux知识分享⏪   🚚代码仓库:Linux代码练习🚚   🌹关注我🫵带你学习更多Linux知识   🔝 目录 前言 一. 进程间通信介绍 1.进程间通…...

数据结构与算法学习笔记六--数组和广义表(C语言)

目录 前言 1.数组 1.定义 2.初始化 3.销毁 4.取值 5.设置值 6.完整代码 前言 这篇博客主要介绍数据结构中的数组和广义表的用法。 1.数组 在数据结构中,数组是一种线性数据结构,它由一组连续的相同类型的元素组成,每个元素都有一个唯…...

图搜索算法详解

图搜索算法详解 摘要: 图搜索算法是解决路径规划和网络分析问题的关键技术。本文将详细介绍图搜索算法的基本概念、分类以及常见的算法,如广度优先搜索(BFS)、深度优先搜索(DFS)、A*搜索等。同时&#xff…...

安卓中常见的UI控件

TextView(文本视图)EditText(编辑文本)Button(按钮)ImageView(图像视图)ImageButton(图像按钮)CheckBox(复选框)RadioButton&#xff…...

基于Labelme的背部穴位关键点制作

一、穴位定位方法 穴位定位,自春秋时期以来,通过各代医学实践的继承与发展,形成了一套较为科学的定位体系。这套体系基于经络理论,采用“寸”作为测量单位,按照人体比例来进行精确的穴位定位,主要有依据体…...

go-mysql-transfer 同步数据到es

同步数据需要注意的事项 前提条件 1 要同步的mysql 表必须包含主键 2 mysql binlog 必须是row 模式 3 不支持程序运行过程中修改表结构 4 要赋予连接mysql 账号的权限 reload, replication super 权限 如果是root 权限则不需要 安装 go-mysql-transfer ​ git clone…...

外包干了3天,技术就明显退步了。。。。。

先说一下自己的情况,本科生,19年通过校招进入广州某软件公司,干了接近4年的功能测试,今年年初,感觉自己不能够在这样下去了,长时间呆在一个舒适的环境会让一个人堕落!而我已经在一个企业干了四年的功能测试…...

将要上市的自动驾驶新书《自动驾驶系统开发》中摘录各章片段 1

以下摘录一些章节片段: 1. 概论 自动驾驶系统的认知中有一些模糊的地方,比如自动驾驶系统如何定义的问题,自动驾驶的研发为什么会有那么多的子模块,怎么才算自动驾驶落地等等。本章想先给读者一个概括介绍,了解自动驾…...

String、StringBuilder、StringBuffer之间的区别是什么?

在Java中,String、StringBuilder 和 StringBuffer 是处理字符串的三个类,其中 String 是不可变对象,而 StringBuilder 和 StringBuffer 是可变对象。这些类在字符串操作方面具有不同的特性和用途。 String String 类表示不可变的字符序列&a…...

做网站工资年新多少在广东/游戏推广员怎么做

你的账号访问太频繁,请一分钟之后再试! 从大一开始 就用脚本在刷课 在专业课踢的只剩下一门C#的情况下 活活刷到一周的课 大二开始教务系统多了一个非常**的操作 退课池 and 访问频繁缓冲 难道,我大三下还要去学政治课咩? 虽然学政…...

实验仪器销信应做何网站/seo属于什么

当前位置:我的异常网 数据库 Oracle异常汇总Oracle异常汇总www.myexceptions.net 网友分享于:2013-01-26 浏览:168次Oracle错误汇总:1.ERROR: HHH000319: Could not get database metadatajava.sql.SQLException: Listener refused the co…...

西安网站seo厂家/软文广告500字

“k-d树是一种分割k维数据空间的数据结构。主要应用于多维空间关键数据的范围搜索和最近邻搜索……”’ 英文题&#xff0c;述大意&#xff1a; 给出平面内n个点(n<100000,0<x,y<109),我们的任务是按读入顺序输出距离每个点最近的点离它的欧几里得距离的平方。 分…...

程序员做游戏还是做网站好/seo中文

秋招马上要来了&#xff0c;之前我在春招的结尾意外地收获了阿里的Offer&#xff0c;之所以写下这篇文章是为了帮助更多Java程序员朋友们&#xff0c;希望能帮助到你们。 其实我并不是什么很厉害的大神&#xff0c;我也不渴望成为别人眼中的大神&#xff0c;我只是踏实地一步一…...

上海公安门户网站警民互动/网站推广软件下载

1.安装 a.安装依赖 1 yum install -y ncurses-devel libaio-devel b.安装cmake 1 yum install -y cmake c.创建用户 1 useradd -s /sbin/nologin -M mysql d.经典三步曲 mysql-5.6.36.tar.gz下载源码包 1 #编译安装2 cmake . -DCMAKE_INSTALL_PREFIX/application/mysql-5.6.36…...

淘客网站建设收费吗/重庆seo排名电话

本教程分享了如何为Ubuntu服务器安装和配置Grafana7.0实例。Grafana是一个开源的度量分析与可视化套件。经常被用作基础设施的时间序列数据和应用程序分析的可视化&#xff0c;它在其他领域也被广泛的使用包括工业传感器、家庭自动化、天气和过程控制等。最近&#xff0c;Grafa…...