Ansible 可以替代像 Hudson/Jenkins 这样的 CI 工具吗?
Posted
技术标签:
【中文标题】Ansible 可以替代像 Hudson/Jenkins 这样的 CI 工具吗?【英文标题】:Is Ansible a replacement for a CI tool like Hudson/Jenkins? 【发布时间】:2014-11-08 15:57:50 【问题描述】:最近,在我们公司,我们决定使用 Ansible 进行部署和持续集成。但是当我开始使用 Ansible 时,我没有找到使用 Maven 构建 Java 项目的模块,或者用于运行 JUnit 测试或 JMeter 测试的模块。
所以,我处于怀疑状态:可能是我以错误的方式使用 Ansible。
当我查看 Jenkins 时,它可以执行构建、运行测试、部署等操作。 Hudson 中缺少的东西是在 AWS 等云环境中创建/删除实例。
那么,一般来说,我们需要出于什么目的使用 Ansible/Jenkins?对于 CI,我是否需要结合使用 Ansible 和 Jenkins?
请说明正确使用 Ansible。
【问题讨论】:
【参考方案1】:Ansible 只是一个“美化的 SSH 循环”。 CI 不仅仅是软件运行,而是如何处理成功和失败,通知谁,以及如何将变更合并到目标版本控制的整个过程。
如果我们只关注软件,CI 是由代码更改触发的反应式调度程序,并触发典型的构建-验证-发布-部署“步骤”序列。
所以在软件方面,没有额外“加糖”的 Ansible 只是一个运行东西的工具包,可以是那些步骤,但它不是 CI。 Ansible(没有塔)完全没有这种反应性。
如果您想将 Ansible 与 CI 结合,您可以。
Ansible Tower 是一个非常面向 Ansible 的调度器,但是如果你需要 CI 软件,我认为你不一定需要它。任何能够运行 shell 脚本的 CI 应用程序都能够启动 Ansible playbook。
但与 Ansible 塔不同 - CI 工具知道显示所有测试框架的测试报告、触发通知等。
Ansible Tower 可以在有很多团队接触 Ansible 代码的复杂环境中发挥作用……事实上,我还没有看到一个真正的理由来为它付费。但是,如果经理喜欢 Web 界面,那么没有什么可以忍受“但其他人使用它”的逻辑。
我怀疑 Ansible Tower 的概念是为了回应傀儡企业。
:)
【讨论】:
更新:在某个时间点,RedHat 人员已经打开了 Tower 的一部分,现在有一个项目“AWX”。它可能可以用来实现 CI-ish 功能。【参考方案2】:首先,Jenkins 和 Hudson 基本上是同一个项目。我将在下面将其称为 Jenkins。请参阅How to choose between Hudson and Jenkins?、Hudson vs Jenkins in 2012 和What is the most notable difference between Jenkins and Hudson from an user perpective? 了解更多信息。
其次,Ansible 并不是一个持续集成引擎。它(通常)不会轮询 git repos 并运行以正常方式失败的构建。
什么时候可以简单地使用 Jenkins?
如果您的机器环境和部署过程非常简单明了(例如在团队外部配置的 Heroku 或 Iron),Jenkins 可能就足够了。您可以编写一个自定义脚本,将部署作为最终构建步骤(或链接步骤)。
什么时候可以简单地使用 Ansible?
如果您只需要“部署”而不需要构建/测试,Ansible 可能就足够了。例如,您可以从命令行或使用 Ansible Tower 运行部署。这对于小型项目、静态网站等非常有用。
它们如何协同工作?
一个很好的组合是使用 Jenkins 来构建、测试和保存工件。添加一个步骤来调用 Ansible 或 Ansible Tower 来处理实际的部署过程。这允许 Ansible 处理 machine 配置并让 Jenkins 处理 CI 过程。
Jenkins 的替代品有哪些?
我强烈推荐 Thoughtworks Go(不要与 Go 语言混淆)而不是 Jenkins。其他包括 CruiseControl、TravisCI 和 Integrity。
【讨论】:
以上是关于Ansible 可以替代像 Hudson/Jenkins 这样的 CI 工具吗?的主要内容,如果未能解决你的问题,请参考以下文章