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

news2024/11/15 6:50:21

在这里插入图片描述

👨‍🎓博主简介

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


文章目录

  • 前提:
  • 一、新建一个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 ];then
	mv $dest_jar_path $dest_jar_path-$(date +"%Y-%m-%d")
	cp -ar $src_jar_path $dest_jar_path
else
	echo "目标路径没有这个文件"
	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 ];then
		ssh root@$server "mv $dest_jar_path $dest_jar_path-$(date +"%Y-%m-%d")"
		scp $src_jar_path root@$server:$dest_jar_path
	else
		echo "目标路径没有这个文件"
		scp $src_jar_path root@$server:$dest_jar_path
	fi
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 ];then
			ansible $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"
    else
    		echo "没有这个文件,没有必要备份";
			ansible $server -m copy -a "src=$src_jar_path dest=$dest_jar_path"
	fi
done

# 复制完之后,自己加一下启动命令即可;

写完shell之后,点击构建;

在这里插入图片描述

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

六、成功实现文件更新

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

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

相关文章

基于 LlaMA 3 + LangGraph 在windows本地部署大模型 (四)

基于 LlaMA 3 LangGraph 在windows本地部署大模型 (四) 大家继续看 https://lilianweng.github.io/posts/2023-06-23-agent/的文档内容 第三部分:工具使用 工具的使用是人类的一个显着而显着的特征。我们创造、修改和利用外部物体来完成超…

gocator导出图片

想用3D扫描后的图片,但是系统自带的导出方法很麻烦,所以考虑通过sdk导出 首先需要设置点云亮度 这里是导出图片的关键代码 case GoDataMessageType.SurfaceIntensity: { Debug.WriteLine("SurfaceIntensity "); GoSu…

C++ 中的 lambda 表达式

1.概念 lambda表达式实际上是一个匿名类的成员函数,该类由编译器为lambda创建,该函数被隐式地定义为内联。因此,调用lambda表达式相当于直接调用匿名类的operator()函数,这个函数可以被编译器内联优化(建议&#xff0…

BGP第二篇(bgp邻居状态及影响邻居建立的因素)

1、bgp邻居状态 BGP对等体的交互过程中存在6种状态机: 空闲(Idle) 连接(Connect) 活跃 (Active) Open报文已发送(OpenSent) Open报文已确认(OpenConfirm&…

Redis 源码安装和入门介绍

Linux下的redis源码安装 redis介绍 Redis 是一个开源(BSD许可)的,内存中的数据结构存储系统,它可以用作数据库、缓存和消息中间件。它支持多种类型的数据结构,如 字符串(strings),…

医疗图像处理2023年CVPR:Label-Free Liver Tumor Segmentation-无标签肝肿瘤分割

目录 一、摘要 二、介绍 三、相关工作 四、网络框架 1.位置选择 2.纹理处理 3.形状生成 4.后处理 5.参数设计 五、实验 1.数据集: 2.评价指标: 3.实现: 4.结果: 六、结论 一、摘要 通过在CT扫描中使用合成肿瘤&am…

秋招算法刷题10(栈和队列)

0509 232.用栈实现队列 class MyQueue {Deque<Integer> inStack;Deque<Integer> outStack;public MyQueue() {inStack new ArrayDeque<Integer>();outStack new ArrayDeque<Integer>();}public void push(int x) {inStack.push(x);}public int pop…

【计算机网络】计算机网络概述、计算机网络性能指标 习题1

0 1. 计算机网络可被理解为( )。 A.执行计算机数据处理的软件模块 B. 由自治的计算机互连起来的集合体 C.多个处理器通过共享内存实现的紧耦合系统 D. 用于共同完成一项任务的分布式系统 0 2.计算机网络最基本的功能是( )。 A.数据通信 B. 资源共享 C. 分布式处理 D. 信息综合…

关于一致性,你该知道的事儿(上)

关于一致性&#xff0c;你该知道的事儿&#xff08;上&#xff09; 前言一、缓存一致性二、内存模型一致性三、事务一致性四、分布式事务一致性4.1 分布式系统的一些挑战4.2 关于副本的一些概念4.3 分布式事务之共识问题4. 3.1 PC(two-phase commit, 2PC)4.3.2 Raft 三、后记参…

[240512] x-cmd 发布 v0.3.6: (se,wkp,ddgo...)x( kimi,gemini,gpt...)

目录 x-cmd 发布 v0.3.6新增了 jina 模块新增了 ddgo 模块新增了 se 模块wkp 模块新增了 writer 模块cosmo 模块 x-cmd 发布 v0.3.6 本次版本的最新引入的功能都是目的为了进一步探索 LLM 的使用。 本版本的改进分为两类&#xff1a;资讯类模块&#xff08;Wikipedia&#xf…

现代制造之Solidworks三维建模篇

现代制造 有现代技术支撑的制造业&#xff0c;即无论是制造还是服务行业&#xff0c;添了现代两个字不过是因为有了现代科学技术的支撑&#xff0c;如发达的通信方式&#xff0c;不断发展的互联网&#xff0c;信息化程度加强了&#xff0c;因此可以为这两个行业增加了不少优势…

【matlab基础知识代码】(十八)无约束最优化问题

min下面的x称为优化向量或者是决策变量 匿名函数法 >> f(x)(x(1)^2-2*x(1))*exp(-x(1)^2-x(2)^2-x(1)*x(2)); x0[0; 0]; [x,b,c,d]fminsearch(f,x0), x 0.6111 -0.3056 b -0.6414 c 1 d 包含以下字段的 struct: iterations: 72 funcCount: 137 algor…

【JavaEE 初阶(五)】文件操作和IO

❣博主主页: 33的博客❣ ▶️文章专栏分类:JavaEE◀️ &#x1f69a;我的代码仓库: 33的代码仓库&#x1f69a; &#x1faf5;&#x1faf5;&#x1faf5;关注我带你了解更多文件操作 目录 1.前言2.认识文件3.文件操作3.1File 属性3.2构造方法3.3File类方法 4.文件内容操作4.1R…

python内置类memoryview()详解

memoryview() Python 的一个内置class&#xff0c;可直接使用。它返回给定参数的“内存视图”对象。内存视图对象是一个对支持缓冲区协议&#xff08;如 bytes 或 bytearray&#xff09;的数据的“窗口”或“视图”&#xff0c;它允许你在不复制数据的情况下操作内存中的数据。…

【机器学习】 技术栈和开发环境搭建

各位大佬好 &#xff0c;这里是阿川的博客 &#xff0c; 祝您变得更强 个人主页&#xff1a;在线OJ的阿川 大佬的支持和鼓励&#xff0c;将是我成长路上最大的动力 阿川水平有限&#xff0c;如有错误&#xff0c;欢迎大佬指正 博客目录 技术栈编程语言库框架编辑器项目IDE …

数据分析需要注意哪些法律法规

数据分析 前言一、数据处理过程二、数据收集阶段的法律规则数据收集应具备合法、正当、透明原则数据收集应坚持最小必要原则数据收集应遵守知情-同意规则数据收集应遵守目的明确性要求 三、数据储存的法律规则四、数据使用与处理的阶段的法律规则数据安全保护义务按照数据分级分…

Linux:文件IO

Linux&#xff1a;文件IO C语言 文件IOfopen Linux 文件IOopen接口close接口write接口read接口 内存文件管理struct filestruct files_struct文件描述符 fd 缓冲区 C语言 文件IO 在正式讲解Linux中是如何对文件进行IO前&#xff0c;我们先简单回顾以下C语言中&#xff0c;是如…

【牛客】SQL206 获取每个部门中当前员工薪水最高的相关信息

1、描述 有一个员工表dept_emp简况如下&#xff1a; 有一个薪水表salaries简况如下&#xff1a; 获取每个部门中当前员工薪水最高的相关信息&#xff0c;给出dept_no, emp_no以及其对应的salary&#xff0c;按照部门编号dept_no升序排列&#xff0c;以上例子输出如下: 2、题目…

项目1:STM32+DHT11+FreeRTOS+emwin+LCD

第一部分&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;************ 【屏幕显示DHT11数据】 面向对象的思想编写硬件驱动程序&#xff0c;DHT11采集环境中的温湿度数据。使用FreeRTOS提供的任务间通信、同步、互斥&#xff0c;将DHT…

【Linux】AlmaLinux 9.4版本发布

AlmaLinux 9.4 正式版发布&#xff0c;该版本基于 Redhat Enterprise 9.4&#xff0c;内核版本号&#xff1a; 5.14.0-427.13.1.el9_4.x86_64 相对于Rocky Linux&#xff0c; AlmaLinux更加的稳定&#xff0c;生产环境建议使用AlmaLinux来替代CentOS 7.x AlmaLinux 9.4版本系统…