如何使用厨师将git repo部署到厨师节点?

时间:2016-05-12 08:12:04

标签: chef chef-recipe

简单地管理git仓库部署到厨师节点的标准/最佳/灵活方式是什么?基本上我有一个git repo(开发人员检查他们的代码)。以下是我计划执行的一系列步骤:

1)jenkins服务器完成代码测试后,应该通过调用节点[s]上的chef-client来启动部署。

2)从git repo中删除代码(服务脚本)并将其保存在某处(在jenkins服务器本身上?)

3)调用厨师客户端时应执行以下操作:

a)杀死现有的正在运行的服务。

b)从远程位置下载该tar文件

c)安装依赖项(apt-get等)

d)可能更新一些配置文件(模板资源?)

e)将焦油提取到所需位置。

f)启动该服务。

我想广泛了解可以使用哪种厨师资源来实现上述目标?在我的案例中,每个节点上只运行一个服务。

1 个答案:

答案 0 :(得分:3)

以通用的方式,我会做这样的事情(未经测试的代码仅作为展示):

使用ark资源进行tar文件下载和解包。

属性文件:

default['my_app']['tarball'] = "url of the tarball created by jenkins"
default['my_app']['checksum'] = "sha256sum of your tarfile"
default['my_app']['dependencies']['apache2'] = '2.4.3'
default['my_app']['dependencies']['libXXXX'] = '1.0.0'

配方文件:

service 'my_service' do
  action :enable,:start
end

ark 'whatever' do
  action :put
  url node['my_app']['tarball']
  checksum node['my_app']['checksum']
  path "/where/to/extract"
  notifies :restart, "service[my_service]"
end 

# Loop over the dependencies to create a package resource for each
node['my_app']['dependencies'].each do |package_name,package_version|
  package package_name do
    version package_version
  end
end

template "/where/to/extract/app/etc/config.file" do
  source "config.file.erb"
  variables({
    "var1" => "value1",
    "var2" => "value2"
  })
  notifies :restart, "service[my_service]"
end

如果在运行期间部件已移动,则使用通知将重新启动服务,这应该是幂等的,如果您在没有更改的情况下运行厨师,则不会执行任何操作。

在jenkins运行之后对所有这些进行链接可能会非常棘手,因为您必须更新部分菜谱值。

每次构建后都应更新校验和,可能必须更新依赖项等。

所有这些更新都可以通过不同的方式实现,我的个人偏好是使用与应用程序相同的版本号来更新cookbook(以便保持一种简单的回滚方式),但是属性可以在json文件中传递给客户也是(品味问题)。

进一步猜测太多了。