【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.hqwc.cn/news/690694.html

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

相关文章

【北京迅为】《iTOP-3588从零搭建ubuntu环境手册》-第7章 安装VMwareTools

RK3588是一款低功耗、高性能的处理器,适用于基于arm的PC和Edge计算设备、个人移动互联网设备等数字多媒体应用,RK3588支持8K视频编解码,内置GPU可以完全兼容OpenGLES 1.1、2.0和3.2。RK3588引入了新一代完全基于硬件的最大4800万像素ISP&…

SeetaFace6人脸特征提取与对比C++代码实现Demo

SeetaFace6包含人脸识别的基本能力:人脸检测、关键点定位、人脸识别,同时增加了活体检测、质量评估、年龄性别估计,并且顺应实际应用需求,开放口罩检测以及口罩佩戴场景下的人脸识别模型。 官网地址:https://github.co…

基于yolov5+streamlit目标检测演示系统设计

YOLOv5与Streamlit:智能目标检测可视化展示介绍 随着人工智能技术的飞速发展,目标检测技术已成为推动智能化社会进步的关键技术之一。在众多目标检测算法中,YOLOv5以其卓越的性能和实时性,成为了业界的佼佼者。与此同时&#xff…

[算法][差分][延迟相差][leetcode]2960. 统计已测试设备

题目地址: https://leetcode.cn/problems/count-tested-devices-after-test-operations/description/ 解法一:暴力解法 class Solution {public int countTestedDevices(int[] batteryPercentages) {//特殊条件判断if(null batteryPercentages || ba…

Java后端初始化项目(项目模板)

介绍 emmmm,最近看了一些网络资料,也是心血来潮,想自己手工搭建一个java后端的初始化项目模板来简化一下开发,也就发一个模板的具体制作流程,(一步一步搭建,从易到难) ok&#xff…

Rust的协程机制:原理与简单示例

在现代编程中,协程(Coroutine)已经成为实现高效并发的重要工具。Rust,作为一种内存安全的系统编程语言,也采用了协程作为其并发模型的一部分。本文将深入探讨Rust协程机制的实现原理,并通过一个简单的示例来…

读天才与算法:人脑与AI的数学思维笔记25_涌现理论

1. 人工智能新闻 1.1. 人工智能新闻报道算法的核心是如何将未经处理的原始数据转换成新闻报道 1.2. 很少有记者为美联社决定使用机器来帮助报道这些新闻持反对意见 1.2.1. 像“Wordsmith”这样的算法,具有自动化的洞察力、科学的叙事能力,现在正被应用…

SpringSecurity安全过滤器工作原理

前面通过三篇文章,从底层代码的角度分析了SpringSecurity的初始化过程。 接下来我们就要具体看一下,Spring Security的安全过滤器初始化、装配好之后,到底是怎么工作的。 还是按图索骥 下面我们简单从底层源码分析一下,请求是怎…

leetcode——反转链表

206. 反转链表 - 力扣(LeetCode) 思路:创建三个指针n1,n2,n3,遍历原链表,通过三者之间的关系将链表反转。下面给出图示: 下面给出题解代码: typedef struct ListNode ListNode; struct List…

【C++】vector的底层原理讲解及其实现

目录 一、认识vector底层结构 二、初始化vector的函数 构造函数拷贝构造赋值构造initializer_list构造迭代器区间构造 三、迭代器 四、数据的访问 五、容量相关的函数 六、关于数据的增删查改操作 一、认识vector底层结构 STL库中实现vector其实是用三个指针来完成的&#x…

C# OpenCvSharp Demo - Mat格式化输出、Mat序列化和反序列化

C# OpenCvSharp Demo - Mat格式化输出、Mat序列化和反序列化 目录 效果 项目 代码 下载 效果 直接输出:Mat [ 3*2*CV_8UC3, IsContinuousTrue, IsSubmatrixFalse, Ptr0x1eb73ef9140, Data0x1eb73ef91c0 ]格式化输出:默认风格[ 91, 2, 79, 179, …

JAVA基础--IO

IO 什么是IO 任何事物提到分类都必须有一个分类的标准,例如人,按照肤色可分为:黄的,白的,黑的;按照性别可分为:男,女,人妖。IO流的常见分类标准是按照*流动方向*和*操作…