Rundeck:作业调度与运行平台
bash
导入 Rundeck GPG 公钥
curl -fsSL https://packages.rundeck.com/pagerduty/rundeck/gpgkey | sudo gpg --dearmor -o /usr/share/keyrings/rundeck-keyring.gpg
添加 apt 仓库
echo "deb [signed-by=/usr/share/keyrings/rundeck-keyring.gpg] https://packages.rundeck.com/pagerduty/rundeck/any/ any main" | sudo tee /etc/apt/sources.list.d/rundeck.list
更新并安装
sudo apt update sudo apt install rundeck
### 使用 Docker 快速体验
```bash
docker run -d -p 4440:4440 --name rundeck -v rundeck_data:/home/rundeck/server/data rundeck/rundeck:5.2.0
初始配置
安装完成后,启动服务:
sudo systemctl start rundeckd
sudo systemctl enable rundeckd
Rundeck 默认监听 http://<你的IP>:4440。首次启动需等待一两分钟,后台服务就绪后,使用浏览器访问。
初始登录凭据:
- 用户名:
admin - 密码:
admin(强烈建议首次登录后修改)
若使用 Docker,密码可能随机生成,可通过 docker logs rundeck 查看。
创建你的第一个项目
登录后,点击右上角的 “New Project”。
- Project Name:填写一个有意义的名字,如
OpsAutomation。 - Description:可选的描述信息。
创建完成后,Rundeck 会引导你配置节点数据源。初学者可选择 “Add a new Node Source” → “File” 模式,然后直接点击 “Save” 使用默认配置(此时没有实际节点,后续可添加)。
管理节点:让 Rundeck 知道管理哪些机器
节点是作业执行的目标。我们通过修改项目目录下的 resources.xml 文件来添加节点。
在项目页面左侧点击 “Project Settings” → “Edit Nodes”(或直接编辑文件 $RDECK_BASE/projects/OpsAutomation/etc/resources.xml)。
示例节点定义:
<?xml version="1.0" encoding="UTF-8"?>
<project>
<node name="web01"
description="Primary web server"
hostname="192.168.1.100"
osFamily="unix"
username="deploy"
tags="web,production"/>
<node name="db01"
description="MySQL database"
hostname="192.168.1.101"
osFamily="unix"
username="dbadmin"/>
</project>
重要属性说明:
hostname:节点的可访问 IP 或域名username:SSH 连接时使用的系统用户(需提前配置 SSH 密钥)tags:用于筛选节点的标签,作业可指定只在带有特定标签的节点上运行
保存文件后,Rundeck 会自动重新加载节点列表。你可以在 “Nodes” 页面查看所有已配置节点,并点击 “Commands” 按钮对它们执行即席命令来验证连通性。
配置 SSH 认证
Rundeck 需要通过 SSH 连接到远程节点执行命令。建议使用密钥认证,并利用 Key Storage 安全保存私钥。
-
生成密钥对(如已有一套可跳过):
ssh-keygen -t rsa -b 4096 -f ~/.ssh/rundeck_id_rsa -N ""将公钥
rundeck_id_rsa.pub内容追加到所有目标节点的~/.ssh/authorized_keys中。 -
将私钥上传至 Key Storage: 在 Rundeck 右上角菜单选择 “Key Storage” → “Add or Upload a Key”。
- Key Type:选择
Private Key - 粘贴或上传私钥文件内容
- 为密钥自定义一个存储路径,如
keys/ssh/my_bastion_key
- Key Type:选择
-
在项目中配置默认私钥路径: 进入项目 → “Project Settings” → “Edit Configuration” → “Default Node Executor” 区域。 将
SSH Key Storage Path设置为keys/ssh/my_bastion_key。
保存后,Rundeck 使用此私钥连接所有节点(除非节点自身覆盖了认证设置)。
编写第一个作业:批量查看磁盘使用情况
创建作业
进入项目,点击左侧 “Jobs” → “New Job”。
Job Name:磁盘空间检查
Workflow 区域(作业步骤):
- 点击 “Add a step” → “Command”(或 Script)
- 在命令输入框中填写:
df -h - 节点选择:勾选
Dispatch to Nodes,然后在 “Node Filter” 输入tags: web(仅运行在带有web标签的节点上)
保存作业。
运行作业
回到作业列表,点击刚创建的作业名称,然后点击 “Run Job Now”。页面会跳转到执行详情页,你可以实时看到命令输出。如果节点配置正确,将显示磁盘使用信息。
作业进阶:添加步骤、错误处理与通知
多步骤工作流
在一个作业中你可以添加多个步骤,并按顺序或条件执行。例如:
- 第一步:
sudo apt update(使用 “Script” 步骤,可写多行) - 第二步:
sudo apt upgrade -y - 第三步:发送通知,告知更新完成
可通过 “Add a step” → “Job Reference” 调用另一个已有作业,实现模块化复用。
错误处理
每个步骤可设置 “If a step fails” 策略:
Stop at the failed step.(默认,停止执行)Continue with the next steps.Run remaining steps before failing.
对于非关键步骤,可将策略设为 Continue 以避免整个流程中断。
通知机制
在作业编辑页面的 “Notifications” 区域,可配置作业成功或失败时的通知。
- 支持 Email、Webhook(可对接 Slack、企业微信)、自定义脚本等。
- 例如,添加一个 Webhook 通知,在作业失败时向你的聊天群发消息。
定时调度:让作业按计划自动运行
对于周期性任务,无需依赖外部 cron。
- 编辑作业,在 “Schedule” 部分勾选 “Schedule to run repeatedly”。
- Cron 表达式:如
0 2 * * ?表示每天凌晨2点执行。 - 可设置时区和最大并发执行数。
Rundeck 的调度基于 Quartz,支持秒级精度和强大的 cron 语法。
安全与权限:控制谁能做什么
Rundeck 有一套灵活的 ACL 策略系统。默认存在一个 admin 角色拥有全部权限。
配置方式:编辑 /etc/rundeck/ 目录下的 .aclpolicy 文件(或通过 Web GUI 的 ACL 管理界面)。
示例:创建一个只读权限的角色
description: "只允许查看和运行指定项目作业的角色"
context:
project: 'OpsAutomation'
for:
job:
- allow: [read, run] # 允许查看和运行作业
node:
- allow: [read] # 允许查看节点
by:
group: ops_viewers