【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之后,点击构建;

在这里插入图片描述

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

六、成功实现文件更新

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/6860.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

MySQL——Windows平台下MySQL安装与配置(一)MySQL安装

Windows平台下安装和配置 基于Windows平台的MySQL安装文件有两个版本,一种是以.msi作为后缀名的二进制分发版,一种是以.zip作为后缀的压缩文件。其中.msi的安装文件提供了图形化的安装向导,按照向导提示进行操作即可安装完成,.zip…

力扣:64. 最小路径和

64. 最小路径和 给定一个包含非负整数的 m x n 网格 grid ,请找出一条从左上角到右下角的路径,使得路径上的数字总和为最小。 说明:每次只能向下或者向右移动一步。 示例 1: 输入:grid [[1,3,1],[1,5,1],[4,2,1]] 输…

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

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

哪个品牌的骨传导耳机好用?精选五大高性能热门骨传导耳机款式推荐!

我作为一名热衷于音乐的数码博主,在选购产品前也习惯于先浏览各种榜单。最近,我发现关于骨传导耳机的讨论热度极高,有人认为骨传导耳机是非常值得入手的新型蓝牙耳机,也有人认为骨传导耳机只是智商税的产品。经过深入调查后&#…

jetbra.zip教程 激活JetBrains全家桶Idea、pyCharm…亲测有效

本教程基于Windows系统 1、下载jetbra.zip 1.1、地址:https://3.jetbra.in/ 1.2、点击随便一个可用站点 1.3、找到左上角蓝色部分,点击下载 1.4、注意软件卡片上右上角支持的版本 1.5、不要关闭网页,留着,要等会用到 2、下载对应…

器件配置比特流或 PDI 设置-7 系列比特流设置

7 系列比特流设置 下表所示 7 系列器件的器件配置设置可搭配 set_property <Setting> <Value> [current_design] Vivado 工具 Tcl 命令一起使用。 注释 &#xff1a; BPI 的比特流设置对于 Spartan -7 器件无效。

自定义数据上的YOLOv9分割训练

原文地址&#xff1a;yolov9-segmentation-training-on-custom-data 2024 年 4 月 16 日 在飞速发展的计算机视觉领域&#xff0c;物体分割在从图像中提取有意义的信息方面起着举足轻重的作用。在众多分割算法中&#xff0c;YOLOv9 是一种稳健且适应性强的解决方案&#xff0…

c++ BSTree二叉搜索树(附原码)

目录 一、概念 二、基本操作 1、插入 2、中序遍历 3、删除 4、查找 5、总结删除 三、应用场景 四、原码 一、概念 左子树比根小&#xff0c;右子树比根大 意义&#xff1a;最多查找高度次数 不需要排序&#xff0c;就达到了二分查找的效率 同时还弥补了单纯数组的插入…

自适应调节Q和R的自适应UKF(AUKF_QR)的MATLAB程序

简述 基于三维模型的UKF&#xff0c;设计一段时间的输入状态误差较大&#xff0c;此时通过对比预测的状态值与观测值的残差&#xff0c;在相应的情况下自适应调节系统协方差Q和观测协方差R&#xff0c;构成自适应无迹卡尔曼滤波&#xff08;AUKF&#xff09;&#xff0c;与传统…

【分布式 | 第五篇】何为分布式?分布式锁?和微服务关系?

文章目录 5.何为分布式&#xff1f;分布式锁&#xff1f;和微服务关系&#xff1f;5.1何为分布式&#xff1f;5.1.1定义5.1.2例子5.1.3优缺点&#xff08;1&#xff09;优点&#xff08;2&#xff09;缺点 5.2何为分布式锁&#xff1f;5.2.1定义5.2.2必要性 5.3区分分布式和微服…

zookeeper启动 FAILED TO START

注意&#xff1a;启动zookeeper时&#xff0c;需要使用zkServer.sh start命令将所有主机启动后&#xff0c;再查看状态 如果&#xff0c;启动一台主机&#xff0c;查看当前主机状态&#xff0c;则会报错 如果出错&#xff0c;进入到$ZOOKEEPER_HOME/logs&#xff0c;查看日志 …

LabVIEW智能变电站监控系统设计与实现

LabVIEW智能变电站监控系统设计与实现 随着电力系统和智能化技术的快速发展&#xff0c;建立一个高效、可靠的变电站监控系统显得尤为重要。通过分析变电站监控系统的需求&#xff0c;设计了一个基于LabVIEW软件的监控平台。该平台利用虚拟仪器技术、传感器技术和无线传输技术…

Nginx rewrite项目练习

Nginx rewrite练习 1、访问ip/xcz&#xff0c;返回400状态码&#xff0c;要求用rewrite匹配/xcz a、访问/xcz返回400 b、访问/hello时正常访问xcz.html页面server {listen 192.168.99.137:80;server_name 192.168.99.137;charset utf-8;root /var/www/html;location / {root …

【论文阅读:Towards Efficient Data Valuation Based on the Shapley Value】

基于Shapley值的高校数据价值评估 主要贡献 提出了一系列用于近似计算Shapley值的高效算法。设计了一个算法&#xff0c;通过实现不同模型评估之间的适当信息共享来实现这一目标,该算法具有可证明的误差保证来近似N个数据点的SV&#xff0c;其模型评估数量为 O ( N l o g ( N…

EPICS DataBase详解

1、分布式EPICS设置 1&#xff09; 操作界面&#xff1a;包括shell命令行方式(caget, caput, camonitor等)和图形界面方式(medm, edm, css等)。 2&#xff09;输入输出控制器(IOC) 2、IOC 1) 数据库&#xff1a;数据流&#xff0c;基本上周期运行 2)sequencer&#xff1a;基…

插入法(直接/二分/希尔)

//稳定耗时&#xff1a; 双向冒泡&#xff0c;可指定最大最小值个数MaxMinNum<nsizeof(Arr)/sizeof(Arr[0]), void BiBubbleSort(int Arr[],int n&#xff0c;int MaxMinNum){int left0,rightn-1;int i;bool notDone true;int temp;int minPos;while(left<right&&am…

图像处理--空域滤波增强(原理)

一、均值滤波 线性滤波算法&#xff0c;采用的主要是邻域平均法。基本思想是使用几个像素灰度的某种平均值来代替一个原来像素的灰度值。可以新建一个MN的窗口以为中心&#xff0c;这个窗口S就是的邻域。假设新的新的像素灰度值为&#xff0c;则计算公式为 1.1 简单平均法 就是…

LeetCode 234.回文链表

题目描述 给你一个单链表的头节点 head &#xff0c;请你判断该链表是否为 回文链表 。如果是&#xff0c;返回 true &#xff1b;否则&#xff0c;返回 false 。 示例 1&#xff1a; 输入&#xff1a;head [1,2,2,1] 输出&#xff1a;true示例 2&#xff1a; 输入&#xff…

PWN入门之Stack Overflow

Stack Overflow是一种程序的运行时&#xff08;runtime&#xff09;错误&#xff0c;中文翻译过来叫做“栈溢出”。栈溢出原理是指程序向栈中的某个变量中写入的字节数超过了这个变量本身所申请的字节数&#xff0c;导致与其相邻的栈中的变量值被改变。 在本篇文章中&#xff…

常用语音识别开源四大工具:Kaldi,PaddleSpeech,WeNet,EspNet

无论是基于成本效益还是社区支持&#xff0c;我都坚决认为开源才是推动一切应用的动力源泉。下面推荐语音识别开源工具&#xff1a;Kaldi&#xff0c;Paddle&#xff0c;WeNet&#xff0c;EspNet。 1、最成熟的Kaldi 一个广受欢迎的开源语音识别工具&#xff0c;由Daniel Pove…