目录
details: 定义Job Name 、Description和group
Notifications: 通知,对应不同的结束状态可以做不同的通知
自动化运维工具rundeck
GitHub - rundeck 是java开发的开源自动化服务,具有 Web 控制台、命令行工具和 WebAPI。它使您可以轻松地跨一组节点运行自动化任务,适合运维自动化管理、自动发布管理、运维数据分析等
- 网站:https://www.rundeck.com
- 最新文档:Rundeck | Process Automation Documentation
- 新手引导:Rundeck | tutorial
- 最佳实践:Rudeck | howto
系统环境
#环境要求:
https://docs.rundeck.com/docs/administration/install/system-requirements.html
测试环境:
openjdk version "11.0.22"
CentOS Linux release 7.4.1708 (Core)
rundeck-5.2.0.20240410-1
Database:mysql Server
系统菜单与个人资料菜单 的功能简介
系统菜单
系统菜单 一般都是全局配置 包含 密钥存储、ACL访问控制、服务配置信息、服务系统状态、日志存储、插件管理等
用户管理: web端用户管理需要企业版本,社区版本需要服务中修改文件realm.properties
个人资料菜单
用户信息与User API Tokens,社区版本用户自己不能修改密码
项目 -projects
项目之前彼此独立.项目内共用一套环境,有点类似于namespace,可以导入导出
支持CLI 与API 方式
创建项目
创建项目很简单,只有 Project Name 必须填写,
可以参考 Project Settings
属性 | 解释 |
Project Name | 唯一标识符 |
Project Display Name | 展示名称 |
Description | 项目描述 |
Execution History Clean | 启用执行历史记录清理 |
Execution Mode | 包含定时执行和周期计划执行 |
User Interface | 用户界面展示,显示Readme 和 MOTD |
Default Node Executor | 远程节点上执行命令和脚本配置 |
Default File Copier | 文件复制到远程节点配置 |
创建完项目就自动跳转到节点源配置了
节点源
节点是一种资源,可以是网络可访问主机的物理实例或虚拟实例等
节点源 是提供节点的第三方平台,可以是Kubernetes 、存储、ansible、目录/文件、脚本、url、stub等
节点源中的每个节点都有与其关联的属性,
例如主机名、IP 地址、用户名、密码、SSH 密钥和/或连接和管理节点所需的其他信息。
这些属性定义在节点上执行命令或脚本所需的连接详细信息和凭据。
第三方平台,就意味着不能通过页面的简单编辑来实现,必须借用第三方工具来管理节点源配置了
内置的开源节点有
必须匹配固定的语法和格:
RESOURCE-XML
RESOURCE-YAML
file
:使用文件系统上定义的配置文件。url
:通过 URL获取配置信息。directory
:查看目录中的所有定义的配置文件。script
:通过执行脚本获取配置信息。
支持将外部的节点源 以超连接或者iframe 的方式加载到项目内
节点执行器
对应节点源有对应的节点执行器,其中内置了几种“类型”:
exec - 简单的系统命令字符串。
script - 脚本脚本内容或服务器本地脚本。文件可以发送到指定的节点
jobref - 作业组的概念。
custom - 用户可以使用或创建自己的工作流程步骤插件。
另外还支持 window、ssh方式
项目存储
默认下 自 Rundeck 3.4 起,项目的配置文件信息已经存储在数据库中了,不产生配置文件,尽管页面会提示:
Warning
The file readme.md does not exist in project 2nd yet. Please save to create it.
但是仍然能保存。存入到数据中。
Success
Saved Project File readme .md
User Interface
配置Readme 和motd的显示状态,与job的折叠与展开功能。ps: 个人觉得 Description就够了
具体效果如下:
插件管理
默认情况下,每个项目都启用所有插件
非企业(job 编辑中 只能看到启用着的插件,)
scm 源码管理-Git 插件
从git中获取作业配置,不过只支持是 SSH认证,git-resource-mode
插件支持Git Password 需要添加插件
ps:这里是git是存配置的,不是git作为服务项目发布的
建议集成jenkins 或者git-webhook方式 Integrate with Jenkins
配置导入导出
适合配置备份,项目复制
导出的是一个jar文件1st-20240423-112014.rdproject.jar
,导出时可以直接选择Export To Another Instance
页面导入,每一项都可以选择是否导入,根据自己的时间情况选择
作业 -Job
作业作为比较核心的的功能,rundeck 提供了完善的功能。
- 自定义作业流程,支持过滤器
- 异常捕获处理,每一步都可以做错误处理
- 自定义访问控制策略,对用户读取、创建、编辑、运行和终止作业进行管理
- 运行提供了debug、重试执行、超时处理、延时执行、周期执行方式、
- 节点并发数、节点排序,动态过滤等
- 作业配置的导入导出
- 作业进度查看与日志记录
作业组:实现某种功能的作业集合
创建作业
支持CLI 与API 方式
details: 定义Job Name 、Description和group
对于组,显示成树状结构,可以提供筛选等。
workflow-工作流:
工作流程可以在 控制台中定义,也可以加载服务器的 XML 或 YAML 文档。
XML: 工作-xml
YAML: 工作-yaml
Options:简单来说就是 定义输入参数或者是环境变量,对于敏感信息也有处理,支持URL请求
step fails:错误处理,立即失败或者继续执行其他作业
Strategy: 定义执行策略,对于更复杂的工作流策略规则,请参阅Ruleset Workflow Strategy Plugin
-
- 节点优先:每个节点上执行完整的工作流程,再执行下一个节点
- 顺序:上一个步骤在所有节点上执行完成后,再执行下一个步骤
- 并行:同时执行
Global Log Filters: 可以保持默认日志过滤插件,可以选择多个,流程的每一步也能选择(可以在项目中配置全局)
日志的:键值、高亮、格式化渲染、敏感词屏蔽等
Workflow steps: 对应的是节点处理器处理方式,每一步都可以添加错误处理程序
和Log Filters
-
- 打印有关故障的附加信息
- 回滚更改
- 将工作流程从故障中恢复并正常继续
如果错误处理程序成功,则该步骤不被视为失败
作业上下文(全局范围):一些常用的变量在命令中可以直接使用。
Schedule: 定义周期执行
Notifications: 通知,对应不同的结束状态可以做不同的通知
Execution Plugins:插件
Other:日志级别、定义重复/超时
插件
Rundeck 所做的大部分工作都是通过其插件完成的
主要介绍Git Resource Model
关于插件类型与处理方式
提供了许多内置插件包含:
Node、Workflow 、Log Filter、Content、Webhook 等相关的
full-list: Rundeck Plugins List
- 工作流程步骤[Workflow Step]- 定义一个操作,可以是工作流程中的不同步骤,无论是针对单个节点还是一组节点
- 节点执行[Node Execution]- 定义连接到远程节点并执行命令的机制
- 文件复制器[File Copier]- 定义一种将文件复制到远程节点的机制
- 资源模型源[Resource Model Source]- 定义一种机制来检索资源模型数据(节点定义)以供 Rundeck 项目使用
- 资源格式[Resource Format]- 定义资源模型的数据格式
- 通知[Notification]- 定义一种通知机制,可以在作业开始或完成时触发
- 流式日志记录[Streaming Logging]- 定义读取和写入日志事件的机制
- 执行文件存储[Execution File Storage]- 定义日志文件存储机制
- 存储设施[Storage Facility]- 定义存储后端和内容转换
- Orchestrator - 定义执行分派命令时编排节点的机制
- 日志过滤器[Log Filters]- 可以从工作流程的日志输出中捕获数据或修改日志输出
搜索插件
系统菜单 -> 插件 -> 搜索插件 ->跳转到GitHub中下对应的资源包和安装文档
安装插件
卸载就把文件移除即可
cp git-resource-model-1.0.2.jar /var/lib/rundeck/libext
cd /var/lib/rundeck/libext
chown rundeck.rundeck git-resource-model-1.0.2.jar
配置插件
需要根据对应的插件类型有不同的处理方式
git-resource-mode很明显是 资源模型源 [Resource Model Source]
节点
通过节点源定义的节点资源,读取与解析配置,再通过web展示出解析获取到的节点
健康检查(需要企业版本)
node-enhancers :属性匹配、图标和健康检查(需要企业版本),
可以理解为在项目内 为节点批量添加属性的操作,成功后可以在node界面显示,如下如
SSH节点执行
ssh执行节点: SSH Node Execution
命令:默认使用SSH在远程节点上执行命令,
脚本:SCP脚本复制到远程节点,执行命令和脚本。
密钥存储
测试只内置了SSH密钥存储,受到 ACL 策略的限制。
启用/禁用公钥 GUI 下载选项: rundeck.gui.keystorage.downloadenabled=false
API 访问:rundeck.feature.projectKeyStorage.enabled=false
SSH配置
还支持 ssh私钥认证、sudo、ssh代理等功能
username: root
ssh-config-KEY: publickey
ssh-key-storage-path: keys/project/1st/root-id_rsa #路径在 密钥存储页面
用户名
则按以下顺序查找:
节点级别:username="user1"
,支持变量:${job.username} 执行用户,${option.someUsername},作业选项
项目级别:project.properties
项目文件中的属性project.ssh.user
。 任何项目节点
Rundeck级别:framework.properties
文件中的属性framework.ssh.user
。适用于所有项目
SSH认证模式
PreferredAuthentications: publickey,password,keyboard-interactive
MaxAuthTries: 1
则按以下顺序查找:
节点级别:ssh-config-KEY
节点上的属性。仅适用于目标节点。
项目级别:project.properties
项目文件中的属性project.ssh-config-KEY
。 任何项目节点
Rundeck级别:framework.properties
文件中的属性framework.ssh-config-KEY
。适用于所有项目
SSH 超时
节点级别:节点上的属性。仅适用于目标节点。
ssh-connection-timeout
连接超时
ssh-command-timeout
命令超时
项目级别:默认应用于任何项目节点。在项目配置 (project.properties
) 中设置属性。
project.ssh-connection-timeout
连接超时
project.ssh-command-timeout
命令超时
Rundeck 级别:默认适用于所有项目。在 中设置属性framework.properties
。
framework.ssh-connection-timeout
连接超时
framework.ssh-command-timeout
命令超时
SSH 私钥
两种方式
SSH Private Keys On Disk
SSH Private Key Storage
存储在磁盘 查找顺序 :
节点级别:ssh-keypath
节点上的属性。仅适用于目标节点。
项目级别:project.properties
项目文件中的属性project.ssh-keypath
。 任何项目节点
Rundeck级别:framework.properties
文件中的属性framework.ssh-keypath
。适用于所有项目
存储在DB 查找顺序:
节点级别:ssh-key-storage-path
节点上的属性。仅适用于目标节点。
项目级别:project.properties
项目文件中的属性project.ssh-key-storage-path
。 任何项目节点
Rundeck级别:framework.properties
文件中的属性framework.ssh-key-storage-path
。适用于所有项目
命令 - commands
如图
webhook
标准的webhook 的不做多的介绍,不过rudeck中的webhook 与ACL权限挂钩。
webhook默认只提供两种功能 日志事件log events
和运行作业run job
创建一个webhook (user 定义了就不能改了),Post URL在创建之后自动生成,Roles默认与用户权限关联
备份与恢复
服务器操作:备份db、/var/lib/rundeck/ /etc/rundeck
文本操作:GUI 支持项目的导入和导出