-3

我正在尝试使用厨师自动化应用程序部署。

我准备了通用的食谱(基于输入属性值工作)来部署 API。我将所有属性都保存在我的属性文件夹中。

这里面临的问题是,如果我将包版本号保留在属性文件中,我就能够成功部署包。实际上,每次触发 CD 管道时,包号都会更改。我正在考虑使用 chef-client CLI 功能将参数作为带有 -j 选项的 JSON 文件传递​​。

问题是我不想在每次触发 CD 管道时触摸我的食谱来更新包版本,因为如果我更新我的食谱中的任何内容,我必须再次运行 CI 以进行食谱验证,同时我不能在每个节点(范围从 50 - 500 个服务器)中保留一个文件,并在 Chef-client 被触发之前远程更新版本。

请帮助我找到一种将参数远程传递给knife ssh的方法。或解决此问题的任何其他解决方案。非常感谢您提前。

4

1 回答 1

0

如果包版本被指定为属性,为什么不在厨师环境中设置呢?

https://docs.chef.io/environments.html

使用这种方法,您可以选择为应用程序的每个版本创建一个环境:

  • myapp_v1
  • myapp_v2
  • myapp_v3

或者,只需为管道流程中的每个阶段更新现有环境:

  • 我的开发者
  • 我的
  • 我的测试
  • 米卡

关键是当您引导新节点时,您可以指定环境。环境将确保每个节点都具有相同的节点属性覆盖设置(您也可以更新现有节点的环境),

最后,使用环境的非显而易见的好处是能够“固定”您正在使用的应用程序说明书的版本。在某个阶段,您将需要升级您的食谱,并且该更改也需要进行版本控制!

总之,这是一个示例环境,它说明了原则:

{
  "name": "mytest",
  "cookbook_versions": {
    "myappcookbook1": "= 1.0",
    "myappcookbook2": "= 2.0"
  },
  "override_attributes": {
    "myapp1": {
      "version": "1.0"
    },
    "myapp2": {
      "version": "2.0"
    }
  }
}
于 2016-08-19T09:49:12.110 回答