Chef 食谱持续部署

Chef 食谱持续部署

我正在尝试将我的厨师工作流程整合到我通常的持续集成/部署工作流程中。

我已经设法有一个 jenkins 任务,它会检查 git repo 并运行 foodcritic,但我不知道最后一步:将 cookbook 推送到 chef 服务器。

我想到的一些想法:

  • 使用 Knife:问题是,在我的 jenkins-server 的构建节点上没有安装 Knife,而据我所知,Knife 需要一个 Cookbook 目录,它会从中推送 Cookbook。另一方面,我认为让 jenkins 用户执行所有 Knife 命令不是一个好习惯
  • 使用 Knife ruby​​-gem 并编写一些 ruby​​-script 供 jenkins 使用:可能会有用,但我不想尝试这样做,因为无论如何我都不认为这是最好的选择
  • 使用 cURL 或任何类似的库进行一些 REST-API 调用。阅读完 API 文档后,我认为不值得费力去实现这一点。

如果这对于我可能选择的工具至关重要,那么我的构建节点将作为 OSX 和 debian 提供。

因此,任何经验都将受到赞赏!

答案1

如果你只是想将食谱推送到 Chef 服务器进行测试,那么最好使用厨师零这是一个“用于测试和单独目的的快速启动内存 Chef 服务器”。

或者,如果你只是想测试食谱,你可以使用以下命令运行整个测试,而无需 Chef 服务器测试厨房+minitest-chef-handler。我建议你不要使用“蝙蝠“而是遵循 minitest-chef-handler测试用例示例

Serverfault 注意:作为新成员,我仍然无法发布超过 2 个链接,因此请尝试按照以下说明操作:

minitest-chef-handler
  github: calavera/minitest-chef-handler

bats
  github: test-kitchen/test-kitchen/wiki/Getting-Started

test cases examples
  github: calavera/minitest-chef-handler#test-cases

答案2

只是一条评论:在我看来,Foodcritic 不足以进行生产测试。就我个人而言,我希望在自动迁移到生产之前在 VM 上进行某种形式的 Vagrant 测试。

不过,这是你的决定,不是我的。

最终,您需要做的是在某个地方运行 knife 命令。无论是在 Jenkins 中还是在 Jenkins 之外的进程中。

如果您不能/不想在 Jenkins 中运行 knife,那么我建议使用 Jenkins 在 git 分支之间移动代码。(即 Jenkins 监视测试分支,当代码通过测试时,您使用 git 访问权限将其移动到生产分支。)

然后,您需要在 Jenkins 之外构建一个进程,该进程或多或少地执行 Jenkins 所做的工作(监视存储库并在发现更改时采取行动)。Jenkins 非常容易设置,因此如果担心使用主服务器,您可以在单独的机器上运行“独立”的 jenkins,只需执行刀具上传即可。

您并不是唯一一个遇到这种情况的人,每个人都在努力寻找适合自己组织的厨师工作流程。

相关内容