TL;DR - 考虑到您的 Jenkins 环境用于 CI/CD,我建议只使用 Ansible。
您已经发现 Ansible 和 Rundeck 之间存在相当大的交叉,因此最好专注于每个产品的重点、风格和用途。
重点
我相信 Rundeck 的重点是让系统管理员能够构建一个(基于 Web 的)自助服务门户,其他系统管理员以及可能较少“技术”/系统管理员的人都可以访问该门户。Rundeck 的网站说“将您的操作程序转变为自助服务工作。安全地为他人提供所需的控制和可见性。 ”。Rundeck 还觉得它对世界有更“集中”的看法:您将作业加载到数据库中,这就是它们所在的位置。
对我来说,Ansible 是为 devops 设计的——因此以一种高度可重复的方式构建和自动化(自建)应用程序的部署。我认为 Ansible 更侧重于构建自己的产品的软件开发公司:Ansible 的“剧本”是文本文件,因此通常存储在源代码控制中,并且通常与剧本将部署的应用程序一起存储。
就业创造重点
使用 Rundeck,您通常可以通过 Web UI 创建作业。
使用 Ansible,您可以通过文本编辑器在文件中创建任务/剧本。
操作/任务/工作风格
Rundeck 默认是命令式的——您编写执行的脚本(通过 SSH)。
Ansible 既是命令式的(即执行 bash 语句)也是声明式的,因此在某些情况下,例如,启动 Apache,您可以使用该service任务来确保它正在运行。这更接近于其他配置管理工具,如 Puppet 和 Chef。
复杂的作业/脚本
Rundeck 可以通过在 Job 的工作流程中定义一个步骤来运行另一个 Job,但从经验来看,这感觉像是一个附加的附加功能,而不是一个严肃的顶级功能。
Ansible 旨在创建复杂的操作;running/includes/etc 是顶级功能。
它是如何运行的
Rundeck 是一个服务器应用程序。如果您想从其他地方(如 CI)运行作业,您需要调用 cli 或进行 API 调用。
直接 Ansible 是命令行。
附带条件
由于 Rundeck和Ansible的交叉和整体灵活性,您可以在每个中实现上述所有。您可以通过将 Rundeck 作业导出到 YAML 或 XML 并将它们签入源代码控制来实现对它们的版本控制。您可以使用 Tower 在 Ansible 中获取 Web UI。等等等等等等
你的问题:
辅助工具?
我可以设想一个 SaaS 商店同时使用这两种方法:一个可能使用 Ansible 执行所有部署操作,然后使用 Rundeck 执行一次性的临时作业。
但是,虽然我可以设想它,但我不建议将其作为起点。我,我会从 Ansible 开始,看看我能走多远。如果我发现我真的,真的需要一次性运行,我只会在稍后加入 Rundeck 。
CI/CD
Ansible:您的环境听起来更像是一个软件公司,您在其中部署自己的应用程序。它可能应该是可重复的(尤其是在您进行持续交付时),因此您需要在源代码控制中部署脚本。你会想要简单,而 Ansible 是“只是文本文件”。我希望你也希望你的开发人员能够在他们的机器上运行东西(对吧?),Ansible 是去中心化的。
一起使用(用于 CI/CD)
从 Ansible 调用 Rundeck,没有。当然,这是可能的,但我正在努力想出充分的理由。至少,不是非常专业的特定于特定应用程序或框架的原因。
从 Rundeck 调用 Ansible,是的。我可以设想有人首先在 Ansible 中构建一些可重复的临时命令。然后我可以看到有一点需要能够在没有命令行的情况下调用它(比如:非技术用户)。但是,这又是针对您的环境的。