【问题标题】:How can I deploy code 'on-demand' using chef client-server architecture?如何使用 Chef 客户端-服务器架构“按需”部署代码?
【发布时间】:2013-09-21 05:36:31
【问题描述】:

这是场景:

我可以通过 SSH 连接到我的 Chef-Server 。但是我不能通过 SSH 连接到任何 Chef-Clients。所以这就是我的工作方式:我有一个工作站来更改或创建角色。所有主厨客户端都作为守护进程运行,因此当它们醒来时,它们会注意到状态变化并开始自我更新。

现在,我需要在这些客户端上配置代码部署。我在想我可以为此使用应用程序说明书,并使用我的工作站向角色添加食谱。但是,每次厨师客户醒来并发现修订更改时,这不会导致部署吗?我想要一种 On Demand 类型的部署:我只想在代码准备好部署时进行部署,而不是在此之前进行任何其他提交。

我如何做到这一点?

【问题讨论】:

    标签: deployment chef-infra


    【解决方案1】:

    几个问题

    您的代码部署何时准备就绪?你怎么知道的?如果这是一个可重复的过程,你能不把它编码成食谱吗?如果这不是一个可重复的过程,则需要将其设为一个,以便它可以自动化

    IE 运行 cucumber 测试,如果它们都通过了,那么部署 else 什么都不做?

    我们从 Artifactory 提供数据并使用 web api 检查我们可用的最新安装程序。如果它与之前安装的相同(通过检查/创建注册表项来完成),我们会告诉用户,这个版本已经安装,所以我们跳过。如果不一样我们安装。现在我知道这不是完全相同的场景,但我觉得这里需要一些自定义代码。

    根据代码的状态,或者利用数据包值来表示 install=true 或 false。当您要部署时,您将在数据包中更新项目 a 的安装项,其余时间将其设置为 false。只有当值为真时,配方才会继续?

    【讨论】:

    • 会有一个用户知道部署已准备就绪。它不基于任何自动触发器。如果用户希望在某个时候进行部署,则必须进行部署。这里可能有多个节点充当 AppServer。如果我在 DataBag 中设置了“install=true”,那么一旦部署完成,客户端是否有责任将其设置为 false?客户端没有修改 DataBag 对象的管理员权限。
    • 同一种方法,但不同类型的触发器。当触发 OnDemand 部署时,如何在 DataBag 中设置“构建序列号”(只是一个运行序列),客户端需要一个簿记文件,其中包含部署在该节点中的“构建序列号”列表。对于下一次运行,客户端会看到相同的数字,因此不会发生部署。我认为这应该有效,你怎么看? (但作为一名厨师初学者,我不知道如何用这种逻辑制作食谱!也许我应该找到一些带有 ruby​​ 逻辑的示例食谱。任何指针?)
    • 我正在阅读更多内容,我提出的方法发生了一些变化。我想我会为此设置一个节点属性,而不是每个节点上的簿记文件来存储处理后的部署编号。我会尝试写一个食谱来做到这一点并更新。
    • 可能是这样的,但我不会设置布尔值,而是设置序列 ID:wiki.opscode.com/pages/viewpage.action?pageId=15728818
    • 该属性肯定会帮助您解决数据包的任何权限问题。祝你好运!
    【解决方案2】:

    为什么不建立一个随时可以部署 HEAD 的分支?仅当您的代码准备好发布到世界时才推送到此分支。这样您就不必担心厨师会同步存储库的中间、不稳定状态。当然,您仍然需要等待客户端唤醒并同步才能看到您的更改,所以如果延迟是一个问题,这将不起作用。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-12-01
      • 2022-10-26
      • 2012-07-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多