【自动部署】服务器自动化操作 RunDeck
RunDeck 是用 Java/Grails 写的开源工具,帮助用户在数据中心或者云环境中自动化各种操作和流程。通过命令行或者web界面,用户可以对任意数量的服务器进行操作,大大降低了对服务器自动化的门槛。
RunDeck的作用:
在浏览器中执行服务器上任何非交互命令,比如ps, /etc/init.d/xxx restart,注意ssh之类的要在执行中输入密码的肯定不支持
对接服务器上的一键运维脚本,变成一个Job, 执行时只要点击按钮Run
自动记录命令操作记录和输出。
预览一下官网的几张图片:
Share Standard Operating Procedures
Job Scheduler
Automated Deployment After a Build
Self-Service Test Environments
Data Processing Jobs in the Cloud
注意: 上面的几张部署图中的rundeck方块,如果替换成“命令行运维脚本”,照样能完成各自的目的,但是命令行相比RunDeck,缺少了两样Rundeck特有的特性:
- 在浏览器上按钮操作
- 记录命令的执行记录和输出结果
再看看Rundeck执行Job时的屏幕截图:
Rundeck与自动化工具Fabric的对比
Fabric 是一个 Python (2.5 或更高) 库和命令行工具,用于连接到 SSH 服务器并执行命令。
Rundeck服务运行的结点称为Server,Rundeck还可以添加其他结点叫node,只要设置自动登录所需的ssh帐号和密码,Rundeck就能涵盖Fabric的功能,但是不推荐这样使用,一旦Rundeck服务器无效,就连在命令行完成这些运维也不可能了。
建议的使用方式是:所有运维脚本都存放在Rundeck服务器上,提供命令行调用和RunDeck调用两种方式,为命令行调用提供交互输入帐号和密码的功能,为Rundeck调用提供参数输入帐号和密码的功能。
Rundeck的安全问题
在浏览器中打开Rundeck服务器,并登录后,执行命令的帐号和权限,就是启动Rundeck服务的帐号和权限。
所以如果以root启动Rundeck服务,那么在Rundeck中输入任何命令,都是以root执行,包括rm -rf /,init 0等危险操作都可执行。
建议专门建立rundeck帐号启动Rundeck服务,并控制rundeck帐号的权限。
RunDeck Web界面的登录帐号管理,默认管理员帐号是admin,密码admin,帐号和密码信息,只保存在配置文件中,可用的group是admin和user,可以设置user的权限,比如定义job,执行job等。更高级的权限得使用付费版的RunDeck Pro。
RunDeck服务器的资源消耗
RunDeck服务是一个standalone jar包,占用内存约500M。
RunDeck服务器上已定义Job的执行方式
Web界面上点击Run人工执行
通过RunDeck的命令行工具run执行
RunDeck中设置为周期执行,就像cron一样。
通过Rest API,由其他http client执行,比如curl命令。
上面第2种方式,用命令行工具run执行RunDeck job,好像有点多此一举,但正是此方式特别适用于手工或自动的服务器状态巡查。巡查必须要留下记录,不然只是巡查者的一面之辞。
RunDeck服务器上Job的执行如何判断成功或失败
很简单,执行后,如果rc是0,就是成功,否则就是失败。
rc(Return Code),可以这样查看rc:
shen@debian:~$ ls / 2>1 >/dev/null; echo $? 0 shen@debian:~$ ls /asdfsdf 2>1 >/dev/null; echo $? 2
RunDeck安装与使用实例
RunDeck,是我到现在为止,用过的Web服务器中,安装和使用最简单的。
第1步:在准备安装Rundeck服务的Linux机器上安装jre,推荐OpenJDK
Redhat/CentOS
sudo yum install openjdk-7-jre
Debian/Ubuntu
sudo apt-get install openjdk-7-jre
下面是安装后的版本信息:
shen@debian:~$ java -version
java version "1.7.0_79" OpenJDK Runtime Environment (IcedTea 2.5.5) (7u79-2.5.5-1~deb7u1)
OpenJDK 64-Bit Server VM (build 24.79-b02, mixed mode)
第2步:下载rundeck jar包,并启动服务器
http://rundeck.org/downloads.html
下载 rundeck-launcher-2.5.1.jar,官方说明如下:
Put it in a directory named ~/rundeck
Execute:
java -jar rundeck-launcher-2.5.1.jar
下载有点慢(晚上下载速度5KB/s,早上7点893KB/s),我已下载并放在百度云盘上: http://pan.baidu.com/s/1i3EMcNb。
我放在目录/home/shen/rundeck下运行:
cd /home/shen/rundeck
java -jar rundeck-launcher-2.5.1.jar
最行一行输出的:Started表示已启动完成,:4440表示服务的端口为4440
浏览器中输入网址: http://localhost:4440
输入帐号admin,密码admin,登录:
第3步:创建一个Project,比如adhoc,先体验一下在Web输入和执行命令。
因为只在Rundeck服务器上运行本地命令,所以Resource Model Source删除yml文件,Default Node Executor选择Stub,Default Node File Copier也选择Stub。
进入顶上Tab: Commands
执行本地命令 pwd,应该输出:/home/shen/rundeck
点击Run on 1 Node:
pwd命令的输出:/home/shen/rundeck正是rundeck服务启动位置。
执行 whoami,应该输出:shen
上面两条命令返回状态都是绿色Successed,表示执行成功(rc=0),
接下去尝试一个返回失败的命令ls /asdfsdf
第3条命令返回状态都是红色Failed,表示执行失败(rc!=0),上图中输出的第1行是运行stderr输出,第2,3,4行是Rundeck额外输出,提示出错原因:**Return code was 2**
接下去看看已经执行的3条命令的执行记录和输出,这里体现了Rundeck的最重要的特性。直接在Terminal下执行命令,是不可能事后找回命令输出的。
点击网页第一行右上角的Activity:
上图展示了3条已执行命令的执行编号,命令输入、执行时间、执行者,成功或失败状态。
点击#3,进去查看第3条命令的执行详情:
点击标签页(Summary | Report | Log Output | Definition)中的Log Output,可以看到执行的输出,包括stdout和stderr:
点击View Options,可以设置某些选项:
下面点击网页右上角的Run Again:
更改命令为ls /asdfsdf /,并点击Run on 1 Node:
上图中只显示了输出结果的最后20行,点击#4进去看执行详情:
上图中列出了执行的所有stdout与stderr输出。
第4步:创建另一个Project,比如jobs(乔布斯, ),体验job的定义和一键执行。
点击“Create a new job”,或者点击右上角的Create Job > +New Job…
按下图输入Job Name和Description
在Add a Step中点击Execute an inline script
如上图,Enter the entire script to execute中输入ls /abcd1234 /
点击Save,保存Step定义,一个Job中可以有多个Step,我们的第一个Job是最简单的定义,只有一个步骤,该步骤中直接包含1个命令。
点击Create完成Job定义:
点击Run Job Now:
查看Log Output:
点击网页左上角的RUNDECK,回到首页:
点击Project jobs的链接“1 Execution In the last day”:
可以看到此Project的最近Job或Command的执行历史。
点击网页第一行的Jobs可以看到该Project的Job列表:
下面在添加一个Job: how,探索一下Rundeck是怎么执行Job的。
Step定义为如下脚本:
echo '`pwd` ->' pwd echo '$0 ->' echo $0 echo '`ps` ->' ps
Job执行结果:
Job执行时,创建了一个/tmp/下的临时脚本文件:
/tmp/1-6-debian-dispatch-script.tmp.sh
ps列出的是ps进程及它的祖先进程,其他java就是rundeck服务。
参考资料:
http://www.oschina.net/p/rundeck/similar_projects?sort=view&lang=25
【自动部署】服务器自动化操作 RunDeck的更多相关文章
- [转]服务器自动化操作 RunDeck
From : http://www.oschina.net/p/rundeck/similar_projects?sort=view&lang=25 RunDeck 是用 Java/Grail ...
- Saltstack自动化操作记录(1)-环境部署【转】
早期运维工作中用过稍微复杂的Puppet,下面介绍下更为简单实用的Saltstack自动化运维的使用. Saltstack知多少Saltstack是一种全新的基础设施管理方式,是一个服务器基础架构集中 ...
- 持续集成之Jenkins自动部署war包到远程服务器
一.无war包链接的情况 无war包链接时,需先下载war包到本地,然后执行: ---------------------------------------------以下部分为转载-------- ...
- Saltstack自动化操作记录(1)-环境部署
早期运维工作中用过稍微复杂的Puppet,下面介绍下更为简单实用的Saltstack自动化运维的使用. Saltstack知多少Saltstack是一种全新的基础设施管理方式,是一个服务器基础架构集中 ...
- .Net Core自动化部署系列(三):使用GitLab CI/CD 自动部署Api到Docker
之前写过使用Jenkins实现自动化部署,最近正好没事研究了下GitLab的自动化部署,顺便记录一下. 使用GitLab部署我们需要准备两件事,第一个起码你得有个GitLab,自己搭建或者使用官方的都 ...
- jenkins自动部署代码到多台服务器
下面讲一下如何通过一台jenkins服务器构建后将代码分发到其他的远程服务器,即jenkins自动部署代码到多台服务器. 1.下载 pulish over ssh 插件 2.系统管理 -> 系统 ...
- 使用 JS 开发 Github Actions 实现自动部署前后台项目到自己服务器
不想看前面这么多废话的可以直接跳到具体实现 Github Actions 是什么? 说到 Github Actions 不得不提一下. 持续集成(continuous integration):高质量 ...
- Jenkins自动化部署服务器及git 提交及git tag标签版本更新流程,超详细!
工作中部署的项目和服务器较多时就用上了Jenkins进行自动部署 优点 不用在连接单独的服务器进行更新项目,再启动项目服务的操作了 更新部署都是自动的,比较方便.适合大批量的部署 一.git流程部分 ...
- 在linux服务器上装svn版本管理,自动部署代码到项目
在linux服务器上装svn版本管理,自动部署代码到项目 http://bbs.aliyun.com/read/9715.html?spm=5176.7114037.1996646101.1.W3zw ...
随机推荐
- 转载:超级强大的vim配置(vimplus)--续集
超级强大的vim配置(vimplus)--续集 原文地址:https://www.cnblogs.com/highway-9/p/5984285.html An automatic configura ...
- C++类学习
一.C++类的定义 C++中使用关键字 class 来定义类, 其基本形式如下:class 类名{ public: //行为或属性 protected: //行为或属性 private: / ...
- UVALIVE 3562 Remember the A La Mode!
费用流 建图很简单直接上代码 #include <map> #include <set> #include <list> #include <cmath> ...
- Shell中的while循环【转】
转自:http://blog.chinaunix.net/uid-25880122-id-2901409.html while循环的格式 while expression do command c ...
- Mac自带的SSH客户端
https://segmentfault.com/q/1010000002806469 还能设置连接成持久连接,方便使用: ttps://www.zhihu.com/question/20541129 ...
- linux sun/awt/X11GraphicsEnvironment 找不到错误
转载自:http://blog.csdn.net/bolg_hero/article/details/46594915 在Linux下,我们在用Java的图片包来处理图片时,经常遇到java.lang ...
- 解决:org.apache.tomcat.jni.Error: 70023: This function has not been implemented on this platform
centos7.3 启动tomcat 出现错误: 八月 08, 2017 4:58:47 下午 org.apache.catalina.core.StandardEngine startInterna ...
- SSH Secure Shell 无法登录:server responded "algorithm negotiation failed”
SSH Secure Shell Client 连接 ubuntu系统报错 修改ssh的配置文件 /etc/ssh/sshd_config在配置文件中添加: Ciphers aes128-cbc,ae ...
- Spring源码 之环境搭建
1.安装gitHub 在官网https://desktop.github.com/下载githubsetup.exe,在线安装总是出错,试了几次后不成功就放弃了.不知道是不是网络的原因. 后来在网上找 ...
- [BZOJ2653]middle 主席树+二分
2653: middle Time Limit: 20 Sec Memory Limit: 512 MBSubmit: 2042 Solved: 1123[Submit][Status][Disc ...