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



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

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

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

除了构建适合您的操作系统(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 只会下载并替换二进制文件(如果它与磁盘上的内容相比发生了变化(。

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

您使用 Chef 自动执行通常需要手动执行的操作,因此问题是,您通常如何管理该过程?应用程序团队如何发布新的二进制文件;它是否签入了具有新版本号的某个存储库,他们只是将新版本放入共享目录还是您只是收到电子邮件?

理想情况下,他们将其放入某种包存储库中(ruby-gems,对于Linux来说,像RPM或deb,对于Java相关的代码,比如Maven或Ivy等,在不同的操作系统和语言中还有许多其他东西(。要么厨师包资源将支持它,要么可能有它的社区食谱。您可以使用它们来指定您需要的二进制文件版本。

如果它只是共享位置的文件,那么您可以使用 chef 文件资源来"同步"您的版本和正式版本,但请记住这是非常可怕的(没有版本检查,没有防止降级的保护措施,只是"同步这两个文件"(

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

执行此操作的最佳方法是使用数据包来提供包信息、环境文件和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:创建一个 chef 配方,该配方使用 data_bag_item(data bag,'data bag item')['package'].each do |item| 从数据包中提取信息并使用remote_file资源执行部署。

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

最新更新