Rundeck:作业调度与运行平台

FreeGuideOnline 最新 2026-07-03

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 安全保存私钥。

  1. 生成密钥对(如已有一套可跳过):

    ssh-keygen -t rsa -b 4096 -f ~/.ssh/rundeck_id_rsa -N ""
    

    将公钥 rundeck_id_rsa.pub 内容追加到所有目标节点的 ~/.ssh/authorized_keys 中。

  2. 将私钥上传至 Key Storage: 在 Rundeck 右上角菜单选择 “Key Storage”“Add or Upload a Key”

    • Key Type:选择 Private Key
    • 粘贴或上传私钥文件内容
    • 为密钥自定义一个存储路径,如 keys/ssh/my_bastion_key
  3. 在项目中配置默认私钥路径: 进入项目 → “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”。页面会跳转到执行详情页,你可以实时看到命令输出。如果节点配置正确,将显示磁盘使用信息。

作业进阶:添加步骤、错误处理与通知

多步骤工作流

在一个作业中你可以添加多个步骤,并按顺序或条件执行。例如:

  1. 第一步sudo apt update(使用 “Script” 步骤,可写多行)
  2. 第二步sudo apt upgrade -y
  3. 第三步:发送通知,告知更新完成

可通过 “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。

  1. 编辑作业,在 “Schedule” 部分勾选 “Schedule to run repeatedly”
  2. Cron 表达式:如 0 2 * * ? 表示每天凌晨2点执行。
  3. 可设置时区和最大并发执行数。

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