Cron 使用Ansible OSS部署和安排更改
请注意:我对这里的任何企业/付费(Tower?)解决方案不感兴趣,只有Ansible的OSS产品提供的解决方案Cron 使用Ansible OSS部署和安排更改,cron,ansible,operation,Cron,Ansible,Operation,请注意:我对这里的任何企业/付费(Tower?)解决方案不感兴趣,只有Ansible的OSS产品提供的解决方案 好的,我已经把我的Ansible项目配置好了,工作得很好,呜呜!看起来像这样: myansible01.example.com:/opt/ansible/ site.yml fizz.yml buzz.yml group_vars/ roles/ common/ tasks/
好的,我已经把我的Ansible项目配置好了,工作得很好,呜呜!看起来像这样:
myansible01.example.com:/opt/ansible/
site.yml
fizz.yml
buzz.yml
group_vars/
roles/
common/
tasks/
main.yml
handlers
main.yml
foos/
tasks/
main.yml
handlers/
main.yml
要使其在生产环境中正常工作,我需要完成以下几件事:
- 我需要能够自动部署此项目的更改
- 我需要安排playbooks运行,比如说,每30秒运行一次(以确保所有托管节点始终符合要求)
- 通常如何将更改部署到活动的Ansible项目?假设项目位于
(我的ansible服务器)。只需删除Ansible项目根(myansible01.example.com:/opt/ansible
),然后将最新的(包含更改的)Ansible项目复制回同一位置就足够了吗?如果Ansible在我执行此“drop-n-swap”时正在运行任何播放,会发生什么情况rm-rf/opt/Ansible
- 看起来商业产品(Ansible Tower)内置了调度功能,但OSS产品没有。如何安排Ansible OSS在特定时间运行播放?例如,我可能希望某些播放每30秒运行一次,以确保节点始终符合要求。
足以做到这一点,还是有更标准的方法cron
由于这种即时性,您可能只想在一些测试服务器上做这件事,然后对它们进行某种形式的测试(例如),以验证在将它们转换到生产环境之前,您的更改是好的。 默认情况下,Jenkins不会在同一个作业正在运行时运行作业(或者如果执行器插槽已用完),因此您可以始终确保它仅在Ansible运行完成后才会拉取回购(包括任何更改)。如果您有多个作业正在运行,您可以使用阻塞来防止作业同时运行(两者都试图将可能不同的配置应用于服务器),但您不必担心新作业启动并将repo拉入已运行的作业中,因为Jenkins将这些作业分离到单独的工作空间中
我们使用Jenkins在我们的环境中手动运行Ansible,但我们也有一个“自我修复”Jenkins作业,它只是在我们的环境中运行Ansible代码库的标记提交,强制它处于幂等状态,以防止配置的自然漂移。当我们需要对环境做一些不同的事情,或者在代码库中运行稍微提前的提交时,我们可以轻松地禁用自愈作业,直到我们满意为止,然后只需重新启用作业以将内容放回,或者将Jenkins正在使用的标记提前,以使用最近的提交