背景
实现定期批量登录远程虚拟机然后进行一些指定的操作,还支持用户添加新的 hostname。

需求分解
通过一个简单的 shell 脚本可实现定期进行 ssh 登录操作,但如何实现的更优雅一些就需要花点时间了,比如:

  1. 定期自动执行
  2. 输出比较直观的登录测试结果
  3. 支持用户添加新的 hostname 到待检查列表中
  4. 执行完成后,通知用户等等
    希望在不引入其他 Web 页面的情况下通过现有的工具 Jenkins 使用 Shell 脚本如何实现呢?

  5. 写一个脚本去循环一个 list 里所有的 hostname,经过考虑这个 list 最好是一个 file,这样方便后续处理。
  6. 这样当用户通过执行 Jenkins job 传入新的 hostname 时,使用新的 hostname 到 file 里进行 grep,查看是否已存在。
  7. 如果 grep 到,不添加;如果没有 grep 到,将这个 hostname 添加到 file 里。
  8. 将修改后的 file 添加到 git 仓库里,这样下次 Jenkins 的定时任务就会执行最近添加的 hostname 了。
    实现重点
    1.使用 expect。在使用 ssh 连接远程虚拟机的时候需要实现与远程连接时实现交互,例如:可以期待屏幕上的输出,然后进而进行相应的输入。在使用 expect 之前需要先安装,以 Redhat 的安装命令为例:sudo yum install expect 来进行安装。

有关 expect 使用的可以参看这个连接:http://xstarcd.github.io/wiki/shell/expect.html

2.使用了 Shell 数组。使用 Shell 读取文件数据,进行登录操作,将操作失败的记录到一个数组里,然后打印出来。

3.在通过 Jenkins 提交新的 hostname 到 Git 仓库时,origin 的 URL 需要是 https://${USERNAME}:${PASSWORD}@git.company.com/scm/vmm.git 或 git@company.com:scm/vmm.git(需要提前在执行机器上生成 id_rsa.pub 并配置)

代码已经上传 GitHub 请参看 https://github.com/shenxianpeng/vmm.git

最终效果
开始执行,提供输入新的 hostname

执行完成,将执行结果归档以便查看

打开归档结果如下

############################################################## VM login check via SSH results ##################################################################                                                   ## Compelted (success) 14/16 (total) login vm check. ##                                                   ## Below 2 host(s) login faied, need to check.       ##                                                   #      abc.company.com      xyz.company.com#                                                   ######################################################

最后
现在技术的更新非常快,尤其作为 DevOps 工程师,各种工具层出不穷,想要每一样工具都掌握几乎是不可能的。

只学习工具不了解其背后的原理,等到新工具出现替换掉旧的工具,那么这些年是没有进步的。

只有认真的把在工作中遇到的每个问题背后来龙去脉去搞懂,才能把地基打的稳,以后不论工具怎么变,学习起来都会很快。

掌握操作系统,Shell,以及一门擅长的编程语言之后再去学习那些工具,要不永远都是漂浮在空中。

©著作权归作者所有:来自51CTO博客作者mob604756e7db9c的原创作品,如需转载,请注明出处,否则将追究法律责任

更多相关文章

  1. (视频) 基于HTML5的服务器远程访问工具
  2. PyCharm激活码,亲测有效(支持最新PyCharm2020.3 激活码)
  3. 6种Scrum工具来提高团队的生产力
  4. 操作系统-进程的初步实现
  5. 构建自动化发布系统之jenkins、gitlab 、sonar结合
  6. 最丝滑的k8s部署工具Sealos,你说香不香?
  7. LINUX入门学习方向 和工具
  8. ansible条件判断和循环
  9. 自动化测试用例失败继续执行

随机推荐

  1. JS 模仿块级作用域
  2. Javascript 面向对象编程(一):封装
  3. 轮播图---可以动态添加图片,(封装成一个函
  4. 如何淡入和淡出并改进我当前的JavaScript
  5. 切换页面时出现白屏闪烁
  6. 在导航图标css下包装文本。
  7. Day.js :一个轻量的处理时间和日期的 Java
  8. 用Node.js编写格式化的JSON
  9. JavaScript学习小结(2)
  10. 固定大小的div不应该将数字分成两半