使用 Ansible OSS 部署和安排更改

Deploying and scheduling changes with Ansible OSS

请注意:对任何enterprise/for-pay感兴趣(?) 解决方案在这里,只有通过 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

要在生产环境中运行,我需要完成几件事:

所以我的担忧:

对于此类任务,您通常需要诸如 Jenkins 之类的编排引擎来完成您的所有编排工作。

您可以将 Jenkins 设置为 运行 关于计时器或其他事件的剧本,例如推送到 SCM,例如 git。

通常,一项工作从检查我们的 Ansible 代码库的 tag/branch 开始,然后将其应用于我们所有指定的服务器,这样您就可以始终了解正在发生的事情 运行。如果你愿意,这可以简单地成为 master 的头(在 git 术语中)所以它总是应用最新的更改。如果您还想将其连接到您的 SCM 存储库中,那么一个简单的推送将强制将这些更改应用到您的所有服务器。

由于这种即时性,您可能只想考虑在某些测试服务器上执行此操作,然后对它们进行某种形式的测试(例如 Serverspec)以在滚动之前验证您的更改是否正确到生产环境。

Jenkins,默认情况下,不会 运行 一个作业,而同一个作业正在 运行ning(或者如果你的执行程序槽已经用完了),所以你总是可以确定它会仅在 Ansible 运行 完成后才提取回购协议(包括任何更改)。如果您有多个作业 运行ning,您可以使用阻塞来阻止同时作业 运行ning(两者都试图对服务器应用可能不同的配置),但您不必担心新工作开始并将回购拉入已经 运行 的工作中,因为 Jenkins 将这些工作分成单独的工作空间。

我们使用 Jenkins 来针对我们的环境手动 运行s Ansible,但我们也有一个 "self healing" Jenkins 作业,它只是 运行s 我们的 Ansible 代码库的标记提交环境,迫使它进入幂等状态以防止配置的自然漂移。当我们需要对环境做一些不同的事情或者 运行 稍微提前提交我们的代码库时,我们可以轻松地禁用自我修复工作,直到我们对事情感到满意,然后再重新- 允许作业将事情放回去或推进 Jenkins 正在使用的标签,现在使用更新的提交。