Ansible-使用现有jenkins流程,服务正常部署后,查看启动的服务无法正常运行
问题描述:
1)报错提示为密码相关,因为PaaS层对应模块升级版本后,新增了密码加解密功能,即对于配置文件中的明文密码均替换为加密后的密文方式,而该功能对于jdk有版本要求,需要jdk版本1.8及以上的。
2)根据报错中,实际jenkins任务--->调用ansible的playbook,进行部署后启动的程序,使用的java版本是1.7.0_45的,因此从这可以判断jdk版本存在问题。
3)手动重启服务,发现服务能够正常启动且正常。最后发现原因为,手动启动调用的是通过java -version查看到的jdk版本,而通过ansible执行启动时调用到的jdk版本为1.7。
验证(根哥给的思路方法):
[root@IOV_node05 tmp]# cat push_tomcat.yml //验证yml
---
- name: update service package and restart
hosts: "{{cHost}}"
remote_user: app
become: yes
become_user: root
tasks:
- name: print jdk
shell: java -version
register: rc
- debug: msg=rc.std_out
[root@IOV_node05 tmp]# ansible-playbook push_tomcat.yml -e "cHost=192.168.18.163" -vvv //临时验证执行
登录到对应服务器验证环境变量配置的java版本:
发现ansible调用jdk版本和服务器上显示的java版本不一致
出现上述情况最终原因分析:
ansible执行start.sh时,读取到的环境变量是依据/usr/bin/java读取到的
解决方法:
1)卸载服务器上老版本的jdk;
2)将java软连接到新jdk版本的java上,如:ln -sv /usr/java/jdk1.8.0_162/bin/java /usr/bin/java
注意:以后线上环境验证java版本时,使用:# /usr/bin/java -version
[root@IOV_node05 tmp]# ansible-playbook push_tomcat.yml -e "cHost=192.168.18.47" -vvv
直接使用java -version实际读取的是通过profile或者profile.d下指定的,存在ansible运行调用的环境不一致的情况,所以可能出现上述的情况。
最好的办法是将以前老版本的jdk卸载
另一种设置java环境变量的方式:
# alternatives --display java
# alternatives --config java
# alternatives --install /usr/bin/java java /usr/java/jdk1.8.0_162/bin/java 1