【发布时间】:2017-07-27 14:59:00
【问题描述】:
我有一个构建服务器,它在每次提交给给定的剧本存储库后运行 ansible 剧本。主机数据来自动态清单。我现在遇到的问题是,当我推送多个提交时,构建服务器会为同一主机一个接一个地运行ansible-playbook,并在主机服务器上创建一个竞争条件。当主机上正在运行 playbook 时,如何让 ansible 等待正在运行的 playbook 完成然后启动或根本不运行? (我只希望在主机中运行一个 ansible 实例。)
【问题讨论】:
-
如何触发构建服务器运行 ansible playbook?
-
@kfreezy 我使用 Phabricator ,您可以在提交时触发构建。问题是当您同时推送多个提交时。有没有办法确保只有一个 ansible 实例正在运行?
-
您可以为 ansible-playbook 编写包装 shell 脚本或修改 ansible-playbook python 文件以检查其他进程,但这似乎是一个糟糕的解决方案。你最好在你的 CD 服务器上设置一些构建队列。
-
@KonstantinSuvorov 我对包装 ansible-playbook 也有同样的想法。但是队列似乎是一个很好的解决方案,直到主机被写入剧本并且我从外部不知道哪些主机被写入那里所以当我使用队列时,每个主机的每个剧本都应该等待,这使得合法构建的构建服务器非常慢。