2016-06-28 88 views

回答

0

您需要一种方法来确定您的命令是否从CI运行。如果你有机会到什么命令来运行,那么我会建议只是一些额外的变量添加到命令,例如

ansible-playbook -i inv.yml --extra-vars "ci=True" playbook.yml 

,然后你可以参考你的剧本里面的ci变量来确定该怎么做。

如果这很麻烦,那么最好的办法是依赖大多数CI服务器设置的环境变量。你应该咨询你的CI服务器的文档是否设置了任何类型的环境变量,如果是,他们会做什么。大多数(但不是全部)确实将CI变量设置为true。在最差的情况下,您应该在CI服务器的配置中手动指定此变量。

您应该可以使用访问管理主机的环境变量:

{{ lookup('env','CI') }} 

当然这些选项一起工作,你必须确保环境变量设置正确的非交互式shell(CI应该为你做的),而不是设置在交互式的。

+0

我真的很厌倦与Ansible一起丑陋的解决方法。在Python中有一个明确的方法来做到这一点,它不涉及在所有情况下都不起作用的丑陋的黑客:http://stackoverflow.com/questions/6108330/checking-for-interactive-shell-in-a- python-script – sorin

+0

@sorin也是非常黑客的,它依赖于你需要有一个标准输入的事实。 ansible通常不是一个真正的工具,它预计任何形式的stdin – SztupY

+0

另一方面,它可能是值得一试的做一个单独的ansible模块,但我的猜测是,ansible本身会重定向stdin出于各种原因,所以它将不会是一个tty – SztupY

相关问题