我正在尝试使用版本控制来设置我们的环境。我们的shell脚本分散在不同的服务器上。我不知道从哪里开始组织它以对其进行版本控制。但是,我们也使用puppet进行配置管理,它也应该有版本控制。我有以下两个问题,我不确定它们是否至少可能出现:
提前致谢。
答案 0 :(得分:1)
TL; DR:
- 有没有办法对脚本进行版本控制,将它们留在现在的位置,因为大多数脚本都是服务器特定的?
- 是否有任何常见的解决方案可以对puppet模块和shell脚本使用版本控制,或者将脚本放在puppet中,只有版本控制puppet。
醇>
这是可能的,但如果您编写Puppet代码来处理您的要求,则无需这样做。
通常,当您开始使用像Puppet这样的配置管理工具时,您正在执行此操作以远离管理脚本。 Puppet是一种在不编写任何脚本的情况下运行命令的方法,并且抽象实际步骤以运行到Puppet并让它处理它。
使用Puppet运行现有脚本通常是一种临时情况,您希望最终重构为使用Puppet执行程序,然后使用更幂等的Puppet模块和清单,直到最终所有需求都由本机Puppet代码满足,因此更改仅限于管理傀儡。
有关为何要执行此操作的详细信息,请参阅此问题:https://serverfault.com/questions/504070/why-use-chef-puppet-over-shell-scripts
例如,假设您开始使用脚本安装软件包,如果您在网络服务器上:
Note: Steps simplified for examples, code might not actually work
脚本示例:
#/bin/bash
if $HOSTNAME='webserver.example'
yum install nginx
fi
这位于/var/tmp/install_nginx.sh
首先你可以用Puppet运行它:
exec {'/var/tmp/install_nginx.sh':}
但是,我们如何在那里首先获得该脚本?你可以用版本控制把它放在那里,但是你怎么设置它?
即使你做到了这一点,这也有点繁琐:如果你想在多台服务器上使用它,那么如果网络服务器的名称发生了变化怎么办?
然后你可以用Puppet本身创建脚本:
$webserver_host = 'webserver.example'
$nginx_install_script = "if $HOSTNAME=${webserver.example}
yum install nginx
fi"
exec {'Install Nginx':
command => $nginx_install_script
}
那么如果您需要更改网络服务器名称,则可以更改变量。
但这仍然不是幂等的。 Puppet有本机类型,可以完成很多工作(Documented here或者你可以编写自己的工作)
因此,您可以更改该代码以使其更好:
$webserver_host = 'webserver.example'
if $::fqdn == webserver_host {
package {'nginx':
ensure => 'present',
}
}
这是更加幂等的,它与平台无关。
这种重构从这里继续。