厨师可以通过哪些方式安装/部署新版本?

时间:2016-02-10 11:36:35

标签: chef

假设我有一个程序二进制文件" customcommand"安装在位置" / usr / bin"。

现在,当应用程序团队发布新的二进制文件时,我想在位置" / usr / bin"

更新二进制文件

如何在厨师中实现上述场景?

3 个答案:

答案 0 :(得分:1)

除了通常构建适合您的操作系统的软件包(apt,yum等)之外,最适合您的情况是恕我直言remote_file资源。

以下是一个例子:

remote_file "/usr/bin/example" do
  source "https://example.com/current/example"
  mode "0755"
end

如果您的服务器(example.com后面的那个)支持Last-ModifiedE-Tag标题,那么Chef只会下载并替换二进制文件,如果它已被更改,那么在磁盘上。

除此之外,还有许多复杂和安全的机制,包括使用基于attribute设置的版本相关URL或从Nexus或Artifactory等工件库接收文件。建议的方法至少可以让您快速入门。

答案 1 :(得分:1)

您使用Chef自动执行您通常必须手动执行的操作,因此问题是,您通常如何管理该流程?应用程序团队如何发布新的二进制文件;它是否使用新的版本号检入存储库,是否只是将新版本放入共享目录中,或者只是收到电子邮件?

理想情况下,他们将它放入某种软件包存储库(ruby-gems,对于Linux类似于RPM或deb,对于Java相关代码,如Maven或Ivy等,还有许多其他操作系统和语言)。主厨package资源将支持它,或者可能有community cookbook。您可以使用它们来指定二进制文件所需的版本。

如果它只是一个共享位置的文件,那么你可以使用厨师file资源“同步”你的版本和官方版本,但请记住这是非常可怕的(没有版本检查,没有安全防范降级,只是“同步这两个文件”)

如果是涉及电子邮件或类似内容的手动流程,您需要首先自动执行该流程,我会说: - )

答案 2 :(得分:1)

最好的方法是使用数据包提供包信息,环境文件和remote_file资源来执行实际部署。

举个例子,假设你要部署" customcommand"版本2.32从nexus到开发环境。

步骤1:创建一个名为" dev"的数据包。以及包含信息的项目:

"id": "deploy",
  "package": [
    {
      "name": "customcommand",
      "version": "2.32",
      "type": "bin"
    }
  ]

步骤2:创建将在收敛期间使用的开发环境文件,例如:chef-client -E dev -r "recipe[name]"

步骤3:创建一个厨师食谱,使用data_bag_item(data bag,'data bag item')['package'].each do |item|从数据包中提取信息,并使用remote_file资源执行部署。

这样,您可以通过更新数据包来部署不同版本的程序。