Jenkins流水线执行失败

一、背景

本人用JenKins+ansible搭建了一个流水线发包流程,结果发现一直卡在pipeline中的某一步发布不成功。

二、问题排查

1、打开JenKins控制台查看日志
在这里插入图片描述
发现一直卡在了 "TASK [Gathering Facts] ***********************"这一步

2、查找资料得知这是ansible用setup模块默认自动执行的一个task,作用是获取目标机(客户端)上的基本信息,如:操作系统、ipv4等。

3、首先考虑了是不是ansible连接出问题。查看了ansible中的hosts(自己新定义的),发现用户、密码、IP地址、用户组都没有问题,又看了playbook 格式、配置也都没有问题。

4、然后用ssh登录目标机、ping目标机地址都能成功,说明是可以连通的。那就只能是"Gathering Facts"这个TASK在目标机上 一直没有执行成功。

5、在ansible机子上使用ansible -i XXX XXX -m setup -a 'filter=ansible_all_ipv4_addresses’命令,一直卡住不动。登录到目标机上使用ps -ef |grep ansible查询进程,发现有AnsiballZ_setup.py的进程。

三、原因分析

根据问题排查发现是ansible中的"Gathering Facts"这task一直在获取目标机上的信息,目标机因为文件挂载系统出错的原因一直没有返回内容。

四、修改bug

在playbook中添加一个配置gather_facts: false 关闭"Gathering Facts"这个任务就能正常执行了。

PS:因为我只是Jenkins流水线用ansible重启服务,用不到目标机上的信息,所以没有找目标机上的具体原因直接关掉了那个任务。可以用strace -p 命令追踪AnsiballZ_setup.py这个进程的具体报错原因,并进行更改。
Logo

权威|前沿|技术|干货|国内首个API全生命周期开发者社区

更多推荐