Ric*_*chy 11 deployment puppet
我是 Puppet 的初学者,我想知道我是否正在使用 Puppet 部署应用程序的正确方法。
应用程序位于 tar.gz 文件中,该文件包含带有版本号的文件。所以,我这样做是为了部署(我在服务器上并重新启动客户端以获取新的 tarball):
nodes.pp
node 'server1.domain.com' inherits basenode {
apps { apps:
version => 56,
apps_name => "apps_tarball.tgz",
}
init.pp (modules)
exec {"apps_wget":
command => "/usr/bin/wget http://web_server/${version}-${apps_name} -O /tmp/${container_zip_name}",
unless => "test -f /tmp/${version}-${apps_name}",
require => [ Package["wget"] ],
}
exec {"apps_unzip":
cwd => "/usr/local/apps/path",
command => "/usr/bin/unzip /tmp/${version}-${apps_name}",
unless => "test -f /usr/local/apps/path/apps-version-${version}",
require => [ Package["unzip"], Exec["container_wget"] ],
}
Run Code Online (Sandbox Code Playgroud)
但是,当我要升级时,我不知道说Puppet删除旧目录?例如,如果我想将版本 56 升级到 57:我必须删除 56 的版本目录。
我听说过 Capristrano,使用 Puppet 来管理包、配置文件和使用 Capristrano 部署应用程序似乎更好,不是吗?
谢谢。
我会非常努力地将应用程序捆绑为 RPM 或 .deb 包,并构建一个 yum 或 apt 存储库来保存这些包。打包您刚刚打开到目录中的 tarball 或 zip 非常简单(但应该是一个单独的问题)。可用的包装可以很好地跟踪版本并处理各种仅打开 tarball 无法处理的事情。
如果我真的无法构建一个合适的包,我会做这样的事情:
node 'server1.domain.com' inherits basenode {
apps { apps:
version => 56,
oldversion => 55,
apps_name => "apps_tarball.tgz",
}
Run Code Online (Sandbox Code Playgroud)
file {
[ "/usr/local/apps/path/apps-version-${oldversion}", "/tmp/${oldversion}-${apps_name}" ]:
recurse => true,
ensure => absent;
}
exec {
"apps_wget_${apps_name}":
command => "/usr/bin/wget http://web_server/${version}-${apps_name} -O /tmp/${container_zip_name}",
logoutput => on_failure,
creates => "/tmp/${version}-${apps_name}",
require => [ Package["wget"] ];
"apps_unzip_${apps_name}":
cwd => "/usr/local/apps/path",
command => "/usr/bin/unzip /tmp/${version}-${apps_name}",
creates => "/usr/local/apps/path/apps-version-${version}",
require => [ Package["unzip"], Exec["container_wget"], Exec["apps_wget_${apps_name}] ];
}
Run Code Online (Sandbox Code Playgroud)
另一种选择是简单地使用递归木偶资源,如:
file {
"/usr/local/apps/path/":
source => "puppet:///modules/modulename/apps/path",
ensure => directory,
replace => true,
purge => true,
recurse => true;
}
Run Code Online (Sandbox Code Playgroud)
(您已经在 puppet master 上正确解压了东西。可能还需要任何正在运行该服务的包并通知它正在运行的任何服务)。
我想知道我是否采用正确的方式使用 Puppet 部署应用程序。
不,你不是。
您应该使用操作系统上可用的包管理。如果您的软件是tar.gz
格式化的,您应该在本地将其重新打包为.deb
,.rpm
或其他形式。
如果该软件是本地开发的,您应该使用任何可用的构建/部署工具。
归档时间: |
|
查看次数: |
33952 次 |
最近记录: |