当前位置: 首页 > 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之后,点击构建;

在这里插入图片描述

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

六、成功实现文件更新

http://www.lryc.cn/news/341360.html

相关文章:

  • 5月4(信息差)
  • 【Spring】1.Spring中IOC与DI全解析
  • vue2迁移到vue3,v-model的调整
  • 【C语言】解决不同场景字符串问题:巧妙运用字符串函数
  • android 如何显示网络地址对应的图片
  • 【项目学习01_2024.05.02_Day04】
  • Android SQLite中的UNIQUE constraint failed错误
  • 嘴尚绝卤味:传承经典,缔造美食新风尚
  • Docker 入门与实践:从零开始构建容器化应用环境
  • C# 用户控件UserControl事件解绑资源释放
  • QT-QTCreator环境配置
  • 最大连续和
  • 分布式系统事务一致性解决方案(基于事务消息)
  • Unity Animation--动画剪辑
  • 如何将 redis 快速部署为 docker 容器?
  • iOS - Undefined symbols: 解决方法
  • 优化理论复习——(三)
  • RK3568笔记二十四:基于Flask的网页监控系统
  • [Django 0-1] Core.Serializers 模块
  • 鸿蒙内核源码分析(用栈方式篇) | 程序运行场地谁提供的
  • Linux 进程间通信之匿名管道
  • 数据结构与算法学习笔记六--数组和广义表(C语言)
  • 图搜索算法详解
  • 安卓中常见的UI控件
  • 基于Labelme的背部穴位关键点制作
  • go-mysql-transfer 同步数据到es
  • 外包干了3天,技术就明显退步了。。。。。
  • 将要上市的自动驾驶新书《自动驾驶系统开发》中摘录各章片段 1
  • String、StringBuilder、StringBuffer之间的区别是什么?
  • docker系列8:容器卷挂载(上)