我有一个gitlab管道,它运行一个非常基本的ansible剧本。在ci文件中,我设置了env变量以输出到一个Junit文件。
- export ANSIBLE_STDOUT_CALLBACK=junit
- export JUNIT_OUTPUT_DIR="results"
虽然在测试部分的运行结束时给了我一个很好的可读报告,但是这剥夺了我在stdout cli中看到我的剧本在运行中的位置,它在atm上运行的是什么服务器等的能力。对于一个可能需要几个小时才能运行的作业,能够了解它在运行中的位置是很好的。
有没有什么办法可以两全其美?我可以有stdout,并且仍然生成Junit报告,或者它们是相互排斥的?我读过一些文章,上面说你只能有一个DEFAULT回调,措辞似乎暗示这是可能的,但是我的搜索还没有找到一个例子。帮助我的蜂群思维,你是我唯一的希望。
1条答案
按热度按时间bpsygsoo1#
从文件来看,
您只能有一个插件作为控制台输出的主管理器。如果您想替换默认插件,您应该在子类中定义CALLBACK_TYPE = stdout,然后在ansible.cfg中配置stdout插件。
换句话说:您可以使用任意数量的回调插件,但是不允许其中一个以上的插件将其
CALLBACK_TYPE
设置为stdout
,并且您应该在stdout_callback
ansible.cfg设置(ANSIBLE_STDOUT_CALLBACK
环境变量)中命名此插件,而不是在callbacks_enabled
(ANSIBLE_CALLBACKS_ENABLED
)中命名您正在使用的其余回调插件。文档没有进一步详细说明
CALLBACK_TYPE
是什么,或者对于每个内置回调插件它的值是什么,但是在源代码中很容易发现,值得注意的是,junit插件没有stdout
的CALLBACK_TYPE
。最终,这意味着您可以保留
ANSIBLE_STDOUT_CALLBACK
作为默认值(这将恢复您的stdout输出),而使用ANSIBLE_CALLBACKS_ENABLED
调用junit
插件。TL;医生: