在运维工作中,我们可能经常需要在生产机器运行脚本,比如清理磁盘空间,杀死僵尸进程等等。这个时候你们会怎么做?
我们能不能直接登录机器跑脚本呢?
我相信绝大部分人都不会这么做,原因有:
- 账号秘密是严格管理的
- 跑未经验证的命令不安全,毕竟圣人也会出错,如果不小心删库了呢
- 微服务的世界通常有几十上百台机器,不可能人工逐个机器去跑
我工作的团队是一个崇尚Java的团队,做任何事情都会封装成一个Java的微服务再发布,跑脚本也一样。下面我简单介绍一下这个用java跑脚本的工具bashrunner
1. 下载源码https://github.com/bin9wei/bashrunner
2. 打开工程,可以看到/src/main/resources/scripts目录里有deploy.sh和rollback.sh两个文件。
deploy.sh用于发布的内容,示例代码是在$HOME目录下创建一个测试文件
rollback.sh用于回滚,示例代码是删除新建的测试文件
3. 执行mvn clean install确保工程可打包
4. 带上参数-Daction=deploy运行jar包,会执行deploy.sh的内容
PS D:\sandbox\code\bashrunner\target> java -jar -Daction=deploy bashrunner-1.0-SNAPSHOT.jar
17:36:16.430 [Thread-0] INFO org.example.bashrunner.Bash - Deploy completed!
可以看到testBash.txt确实被创建了
PS D:\sandbox\code\bashrunner> ls C:\Users\bin9w testBash.txt
目录: C:\Users\bin9w
Mode LastWriteTime Length Name
---- ------------- ------ ----
-a---- 2022/11/15 17:36 8 testBash.txt
5. 带上参数-Daction=rollback运行jar包,会执行rollback.sh的内容,可以看到testBash.txt被删除了,即回滚成功。
PS D:\sandbox\code\bashrunner\target> java -jar -Daction=rollback bashrunner-1.0-SNAPSHOT.jar
17:46:26.091 [Thread-0] INFO org.example.bashrunner.Bash - Rollback completed!
PS D:\sandbox\code\bashrunner\target> ls C:\Users\bin9w testBash.txt
PS D:\sandbox\code\bashrunner\target>