Chef infra chef可以通过哪些方式安装/部署新版本?

Chef infra chef可以通过哪些方式安装/部署新版本?,chef-infra,Chef Infra,假设我在位置“/usr/bin”安装了一个二进制程序“customcommand” 现在,当应用程序团队发布新的二进制文件时,我想更新位于“/usr/bin”位置的二进制文件 如何在chef中实现上述场景?除了构建适合您的操作系统(apt、yum等)的软件包的常用方法外,最适合您的情况是IMHO资源 例如: remote_文件”/usr/bin/example“do 来源“https://example.com/current/example" 模式“0755” 结束 如果您的服务器(位于ex

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

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


如何在chef中实现上述场景?

除了构建适合您的操作系统(apt、yum等)的软件包的常用方法外,最适合您的情况是IMHO资源

例如:

remote_文件”/usr/bin/example“do
来源“https://example.com/current/example"
模式“0755”
结束
如果您的服务器(位于
example.com
后面的服务器)支持
上次修改的
E-Tag
头文件,Chef只会下载并替换二进制文件,前提是该文件与磁盘上的文件相比发生了更改


除此之外,还有许多更复杂和安全的机制,包括使用一个依赖于版本的URL,该URL是根据一个文件设置的,或者从Nexus或Artifactory之类的工件库接收文件。建议的方法至少可以让您快速入门。

除了构建适合您的操作系统的包(apt、yum等)的常用方法外,最适合您的方法是IMHO资源

例如:

remote_文件”/usr/bin/example“do
来源“https://example.com/current/example"
模式“0755”
结束
如果您的服务器(位于
example.com
后面的服务器)支持
上次修改的
E-Tag
头文件,Chef只会下载并替换二进制文件,前提是该文件与磁盘上的文件相比发生了更改


除此之外,还有许多更复杂和安全的机制,包括使用一个依赖于版本的URL,该URL是根据一个文件设置的,或者从Nexus或Artifactory之类的工件库接收文件。建议的方法至少可以让您快速入门。

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

理想情况下,他们会将其放入某种软件包存储库(ruby gems,对于Linux,比如RPMs或deb,对于Java相关代码,比如Maven或Ivy,等等,还有许多其他跨不同操作系统和语言的代码)。厨师资源将对其提供支持,或者可能会对其提供支持。您可以使用这些来指定需要哪个版本的二进制文件

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


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

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

理想情况下,他们会将其放入某种软件包存储库(ruby gems,对于Linux,比如RPMs或deb,对于Java相关代码,比如Maven或Ivy,等等,还有许多其他跨不同操作系统和语言的代码)。厨师资源将对其提供支持,或者可能会对其提供支持。您可以使用这些来指定需要哪个版本的二进制文件

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


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

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

例如,假设您希望将“customcommand”版本2.32从nexus部署到开发环境

步骤1:创建一个名为“dev”的数据包和一个包含包信息的项目:

"id": "deploy",
  "package": [
    {
      "name": "customcommand",
      "version": "2.32",
      "type": "bin"
    }
  ]
步骤2:创建将在converge期间使用的开发环境文件,例如:
chef client-E dev-r“recipe[name]”

步骤3:创建一个厨师配方,使用
数据包项目(数据包,“数据包项目”)['package']从数据包中提取信息。每个厨师配方都使用远程文件资源执行部署


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

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

例如,假设您希望将“customcommand”版本2.32从nexus部署到开发环境

步骤1:创建一个名为“dev”的数据包和一个包含包信息的项目:

"id": "deploy",
  "package": [
    {
      "name": "customcommand",
      "version": "2.32",
      "type": "bin"
    }
  ]
步骤2:创建将在converge期间使用的开发环境文件,例如:
chef client-E dev-r“recipe[name]”

步骤3:创建一个厨师配方,使用
数据包项目(数据包,“数据包项目”)['package']从数据包中提取信息。每个厨师配方都使用远程文件资源执行部署


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

让我们提醒一下,SO不是一个论坛,旨在解决特定的编程问题。请拿这本书读一读。如果你在厨师方面有开放的问题,请检查,但不要忘记大多数人在这方面的帮助