这也能用Jenkins?快速实现一个定期批量登录远程虚拟机并支持添加新的主机名称的Job
背景
实现定期批量登录远程虚拟机然后进行一些指定的操作,还支持用户添加新的 hostname。
需求分解
通过一个简单的 shell 脚本可实现定期进行 ssh 登录操作,但如何实现的更优雅一些就需要花点时间了,比如:
- 定期自动执行
- 输出比较直观的登录测试结果
- 支持用户添加新的 hostname 到待检查列表中
执行完成后,通知用户等等
希望在不引入其他 Web 页面的情况下通过现有的工具 Jenkins 使用 Shell 脚本如何实现呢?- 写一个脚本去循环一个 list 里所有的 hostname,经过考虑这个 list 最好是一个 file,这样方便后续处理。
- 这样当用户通过执行 Jenkins job 传入新的 hostname 时,使用新的 hostname 到 file 里进行 grep,查看是否已存在。
- 如果 grep 到,不添加;如果没有 grep 到,将这个 hostname 添加到 file 里。
- 将修改后的 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的原创作品,如需转载,请注明出处,否则将追究法律责任更多相关文章
- (视频) 基于HTML5的服务器远程访问工具
- PyCharm激活码,亲测有效(支持最新PyCharm2020.3 激活码)
- 6种Scrum工具来提高团队的生产力
- 操作系统-进程的初步实现
- 构建自动化发布系统之jenkins、gitlab 、sonar结合
- 最丝滑的k8s部署工具Sealos,你说香不香?
- LINUX入门学习方向 和工具
- ansible条件判断和循环
- 自动化测试用例失败继续执行