简单地管理git仓库部署到厨师节点的标准/最佳/灵活方式是什么?基本上我有一个git repo(开发人员检查他们的代码)。以下是我计划执行的一系列步骤:
1)jenkins服务器完成代码测试后,应该通过调用节点[s]上的chef-client来启动部署。
2)从git repo中删除代码(服务脚本)并将其保存在某处(在jenkins服务器本身上?)
3)调用厨师客户端时应执行以下操作:
a)杀死现有的正在运行的服务。
b)从远程位置下载该tar文件
c)安装依赖项(apt-get等)
d)可能更新一些配置文件(模板资源?)
e)将焦油提取到所需位置。
f)启动该服务。
我想广泛了解可以使用哪种厨师资源来实现上述目标?在我的案例中,每个节点上只运行一个服务。
答案 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文件中传递给客户也是(品味问题)。
进一步猜测太多了。