【问题标题】:How to write a Chef cookbook for multiple applications如何为多个应用程序编写 Chef 食谱
【发布时间】:2017-02-22 18:45:47
【问题描述】:

想象一下 Jenkins 正在生成 3 种不同的发行版——一种在 NodeJS 上运行的 javascript 上,另一种在带有 python 模块的 apache 上运行的 python 上,另一个在 Java 上使用 Springboot。您如何编写 Chef 食谱以将它们全部安装在具有最小 linux ubuntu 发行版的本地基础架构上。问题的范围涉及从 Jenkins 捕获触发器,然后启动 Chef 书籍以部署这 3 个应用程序。根据配置,所有 3 个应用都应部署在相同的基础设施或不同的部署基础架构上。

【问题讨论】:

  • 欢迎来到 StackOverflow。请阅读How do I ask a good question。你的范围很广,我会说“好吧..去做吧,问题出在哪里”?您应该清楚地说明您实际面临的问题。
  • PS:那些 playbooks 在 Chef 术语中称为 cookbooks。我已经更新了你的问题。

标签: jenkins chef-infra


【解决方案1】:

有几件事:

  1. 如何编写食谱完全取决于您。我在http://github.com/poise/application_examples 上为 Python、Ruby 和 Node 提供了一些示例,但这只是我对这个主题的看法。每当您问“我如何与 Chef 一起做 X?”时答案始终是“如果没有 Chef,你将如何做 X,然后自动化”。

  2. 如何从 Jenkins 触发部署比那个已经非常模糊的答案要模糊一些。最简单的答案是让 Jenkins SSH 进入每台机器并运行 chef-client。但是,这可能会产生您不喜欢的安全隐患。您可以查看更专用的命令推送系统,例如 MCollective、SaltStack,或者可能是 Chef Push Jobs(尽管我会跳过最后一个)。您也可以将节点设置为每 5 分钟自动收敛一次,这样所有 Jenkins 都会更新 Chef Server 中的一些内容,以说明要部署哪个版本,然后等待 10 分钟。

【讨论】:

    【解决方案2】:

    我有一个与您类似的案例,使用 TeamCity 而不是 Jenkins。 (但你可以复制类似的行为)

    在我的例子中,我使用 policy_files 来管理我的基础架构,在其中我将构建信息作为属性传递,以便我可以下载配方中的人工制品。 主要技巧是构建由您提到的服务(Python,Java......无论如何)触发的构建,在将结果提交给GIT时更新policy_file中的属性(构建ID,工件名称......)。

    作为回顾:

    1. 为您的服务构建已完成。
    2. 您的 policy_files 的构建被触发更新工件下载信息。
    3. 您通常的构建工作流程。

    为了下载工件,您可以使用 remote_file chef 资源,进行校验和验证,以避免在每次 chef 运行时下载相同的文件。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-11-06
      • 1970-01-01
      • 2015-09-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多