让 Ansible 和 Rundeck 一起工作是个好主意,还是使用其中一个就足够了?

Is it a good idea to make Ansible and Rundeck work together, or using either one is enough?

最近在看Ansible,想在项目中使用。还有另一个工具 Rundeck 可用于执行各种操作工作。我对这两种工具都没有经验,这是我目前对它们的理解:

相似点数

不同点

似乎 Ansible 和 Rundeck 都可以用来做 configuration/management/deployment 工作,也许是以不同的方式。所以我的问题是:

非常感谢任何建议和经验分享。

这完全取决于您的要求。 我使用 rundeck 进行远程脚本执行和应用程序部署。我已将其与 Foreman 集成以涵盖供应和配置管理。

如果您的预算有限,别再犹豫了,Rundeck 很棒。不过,您可能会错过 Ansible 中的一些功能。此外,Google 小组在支持方面非常活跃。

如果您有预算投资 ansible tower,您可能不需要其他任何东西。

TL;DR - 考虑到你的 Jenkins 环境 CI/CD 我建议只使用 Ansible。

您已经发现 Ansible 和 Rundeck 之间存在相当大的交叉,因此最好专注于每个产品的重点、风格和用途。

专注

我相信 Rundeck 的重点是使系统管理员能够构建一个(基于 Web 的)自助服务门户,其他系统管理员和可能更少的 "technical"/sysadmin 人员都可以访问该门户。 Rundeck 的网站说:“将您的操作程序转变为自助服务工作。安全地为他人提供他们所需的控制和可见性。”。 Rundeck 也感觉它对世界有更多 'centralised' 的看法:你将工作加载到数据库中,这就是他们所在的地方。

对我来说,Ansible 适用于 devops - 因此以高度可重复的方式构建和自动化部署(自建)应用程序。我认为 Ansible 更侧重于构建自己产品的软件开发公司:Ansible 'playbooks' 是文本文件,因此通常存储在源代码管理中并且通常与剧本将部署的应用程序一起存储。

创造就业重点

使用 Rundeck,您通常可以通过网络创建工作 UI。

使用 Ansible,您可以通过文本编辑器在文件中创建 tasks/playbooks。

Operation/Task/Job风格

默认情况下,Rundeck 是命令式的 - 您编写的脚本将被执行(通过 SSH)。

Ansible 既是命令式的(即执行 bash 语句)也是声明式的,所以在某些情况下,比如说,启动 Apache 你可以使用 service 任务来确保它是 运行宁。这更接近于 Puppet 和 Chef 等其他配置管理工具。

复杂作业/脚本

Rundeck 可以通过在作业的工作流程中定义一个步骤来 运行 另一项作业,但从经验来看,这感觉像是附加功能,而不是重要的顶级功能。

Ansible 旨在创建复杂的操作; running/including/etc 是顶级功能。

如何 运行s

Rundeck 是一个服务器应用程序。如果你想从其他地方 运行 工作(比如 CI),你需要调用 cli 或进行 API 调用。

Straight Ansible 是命令行。

附带条件

由于 Rundeck Ansible 的交叉和整体灵活性,您可以在每个中实现上述所有目标。您可以通过将 Rundeck 作业导出到 YAML 或 XML 并将它们签入源代码管理来实现对 Rundeck 作业的版本控制。您可以使用 Tower 在 Ansible 中获得一个网络 UI。等等等等等等

您的问题:

辅助工具?

我可以设想 SaaS 商店同时使用这两种方法:可以使用 Ansible 执行所有部署操作,然后使用 Rundeck 执行一次性的临时作业。

但是,虽然我可以设想它,但我不建议将其作为起点。我,我会从 Ansible 开始,看看我能走多远。如果我发现我真的 真的 需要 运行 一次性,我只会在 Rundeck 中分层。

CI/CD

Ansible:您的环境听起来更像是一个软件屋,您可以在其中部署自己的应用程序。它可能应该是可重复的(尤其是当你要持续交付时)所以你会希望你的部署脚本在源代码控制中。你会想要简单,而 Ansible 是 "just text files"。我希望您也希望您的开发人员能够 运行 在他们的机器上进行操作(对吗?),Ansible 是去中心化的。

一起使用(for CI/CD)

从 Ansible 调用 Rundeck,没有。当然,这是可能的,但我正在努力想出充分的理由。至少,不是非常专业的特定于特定应用程序或框架的原因。

从 Rundeck 调用 Ansible,是的。我可以设想有人首先在 Ansible 中构建一些可重复的临时命令。然后我可以看到有一些需求能够在没有命令行的情况下调用它(比如:非技术用户)。但是,这又是针对您的环境的。

服务器标准变得可行。

Adhoc/operation 任务进入跑道。

这是我目前使用的

  1. 如果您打算将它们用作开发人员或 OPS 团队的自助服务门户 那么我会说 RBAC 在 Tower 中而不是在 Rundeck 中实现更简单,直观上更清晰。考虑设置 RBAC 需要付出多少努力和复杂性,因为它对于支持此产品的团队至关重要。

  2. REST API 在 Tower 中比在 Rundeck 中更简单、更容易解析。

  3. 在 Tower 中,您可以看到每个 playbook 任务的单独事件,而在 Rundeck 中,所有内容都在一个控制台输出中抛出。

  4. Tower 中的动态清单对于 public 云中的部署非常有用。

我的观点 - 运行deck 和 ansible(免费,没有塔)做不同类型的工作

  1. Ansible(无塔)- 配置管理(服务器/应用程序提供,批量配置更新)

  2. Rundeck - 具有访问控制、通知、作业输出等功能的集中式作业调度程序(存档旧日志、运行 一些脚本等)

在提出这个问题时,作者正确地指出 Ansible 只提供了一个 UI 收费。

UI现已开源:AWX