Cron 使用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/

请注意:我对这里的任何企业/付费(Tower?)解决方案不感兴趣,只有Ansible的OSS产品提供的解决方案


好的,我已经把我的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项目?假设项目位于
    myansible01.example.com:/opt/ansible
    (我的ansible服务器)。只需删除Ansible项目根(
    rm-rf/opt/Ansible
    ),然后将最新的(包含更改的)Ansible项目复制回同一位置就足够了吗?如果Ansible在我执行此“drop-n-swap”时正在运行任何播放,会发生什么情况
  • 看起来商业产品(Ansible Tower)内置了调度功能,但OSS产品没有。如何安排Ansible OSS在特定时间运行播放?例如,我可能希望某些播放每30秒运行一次,以确保节点始终符合要求。
    cron
    足以做到这一点,还是有更标准的方法

对于这类任务,您通常需要一个编排引擎来完成所有的编排

您可以将Jenkins设置为在计时器或其他事件(如推送到SCM(如git))上运行剧本

通常,作业首先签出Ansible代码库的标记/分支,然后将其应用于所有指定的服务器,以便您始终知道正在运行的是什么。如果您愿意,这可以是直接的主控(git术语),因此它总是应用最新的更改。如果您也要将其挂接到SCM repo中,那么一个简单的推送操作将强制将这些更改应用于所有服务器

由于这种即时性,您可能只想在一些测试服务器上做这件事,然后对它们进行某种形式的测试(例如),以验证在将它们转换到生产环境之前,您的更改是好的。 默认情况下,Jenkins不会在同一个作业正在运行时运行作业(或者如果执行器插槽已用完),因此您可以始终确保它仅在Ansible运行完成后才会拉取回购(包括任何更改)。如果您有多个作业正在运行,您可以使用阻塞来防止作业同时运行(两者都试图将可能不同的配置应用于服务器),但您不必担心新作业启动并将repo拉入已运行的作业中,因为Jenkins将这些作业分离到单独的工作空间中

我们使用Jenkins在我们的环境中手动运行Ansible,但我们也有一个“自我修复”Jenkins作业,它只是在我们的环境中运行Ansible代码库的标记提交,强制它处于幂等状态,以防止配置的自然漂移。当我们需要对环境做一些不同的事情,或者在代码库中运行稍微提前的提交时,我们可以轻松地禁用自愈作业,直到我们满意为止,然后只需重新启用作业以将内容放回,或者将Jenkins正在使用的标记提前,以使用最近的提交