标签:git 虚拟机 hostname Job 添加 expect Jenkins com
背景
实现定期批量登录远程虚拟机然后进行一些指定的操作,还支持用户添加新的 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,以及一门擅长的编程语言之后再去学习那些工具,要不永远都是漂浮在空中。
标签:git,虚拟机,hostname,Job,添加,expect,Jenkins,com 来源: https://blog.51cto.com/15127514/2658383
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。