假设我有一个程序二进制文件" customcommand"安装在位置" / usr / bin"。
现在,当应用程序团队发布新的二进制文件时,我想在位置" / usr / bin"
更新二进制文件如何在厨师中实现上述场景?
答案 0 :(得分:1)
除了通常构建适合您的操作系统的软件包(apt,yum等)之外,最适合您的情况是恕我直言remote_file资源。
以下是一个例子:
remote_file "/usr/bin/example" do
source "https://example.com/current/example"
mode "0755"
end
如果您的服务器(example.com
后面的那个)支持Last-Modified
或E-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资源执行部署。
这样,您可以通过更新数据包来部署不同版本的程序。