一.问题描述

我的jenkins运行在虚拟机上,mysql服务在主机上;
1.先执行jenkins的deploy任务,拉取远程开发代码并进行部署
2.deploy任务部署完成触发部署test任务,运行自动化代码进行测试

问题出在test任务构建显示success,但是测试代码并没有执行成功

二.问题解决-数据库权限

按照报错提示去target目录下看运行结果报告

org.apache.ibatis.exceptions.PersistenceException:
)### Error querying database.  Cause: java.sql.SQLException: Access denied for user 'root'@'localhost' (using password: YES
### The error may exist in mapper/SQLMapper.xml
### The error may involve com.course.model.loginCase
### The error occurred while executing a query
### Cause: java.sql.SQLException: Access denied for user 'root'@'localhost' (using password: YES)at org.apache.ibatis.exceptions.ExceptionFactory.wrapException(ExceptionFactory.java:30)at org.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:150)at org.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:141)at org.apache.ibatis.session.defaults.DefaultSqlSession.selectOne(DefaultSqlSession.java:77)at com.course.cases.LoginTest.loginTrue(LoginTest.java:51)

显示无法访问到mysql数据库,检查了一下我的用户名密码写的是对的,解决如下:
1.尝试在cmd命令行把root用户的访问权限由localhost->所有主机

mysql -u root -p
CREATE USER 'root'@'%' IDENTIFIED BY '密码';
grant all privileges on *.* to 'root'@'%'
flush privileges;
exit

再次登录即可。
2.并且在配置文件里把连接mysql的url由127.0.0.1改成本机IP,

3.提交代码到github

git add .
git status
git commit -m "修改数据库连接地址"
git push

4.再次在jenkins上执行deploy任务,这次test任务还是没有执行成功

5.查看surefire报告报错
6.到jenkins运行工作目录
/root/.jenkins/workspace/deploy/Chapter13/target/logs

[root@fanyu logs]# ll
总用量 16
-rw-r--r--. 1 root root     0 6月  13 12:17 event.log
-rw-r--r--. 1 root root 13666 6月  13 12:18 userManger.log

查看一下本次deploy服务端程序启动信息

server logs:
Caused by: org.apache.catalina.LifecycleException: Protocol handler start failedat org.apache.catalina.connector.Connector.startInternal(Connector.java:1021)at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)... 21 common frames omitted
Caused by: java.net.BindException: 地址已在使用at sun.nio.ch.Net.bind0(Native Method)at sun.nio.ch.Net.bind(Net.java:433)at sun.nio.ch.Net.bind(Net.java:425)at sun.nio.ch.ServerSocketChannelImpl.bind(ServerSocketChannelImpl.java:223)at sun.nio.ch.ServerSocketAdaptor.bind(ServerSocketAdaptor.java:74)at org.apache.tomcat.util.net.NioEndpoint.bind(NioEndpoint.java:210)at org.apache.tomcat.util.net.AbstractEndpoint.start(AbstractEndpoint.java:1150)at org.apache.coyote.AbstractProtocol.start(AbstractProtocol.java:591)at org.apache.catalina.connector.Connector.startInternal(Connector.java:1018)... 22 common frames omitted
2021-06-13 11:03:54.870 [main] INFO  org.apache.catalina.core.StandardService - Stopping service [Tomcat]
2021-06-13 11:03:54.884 [main] INFO  o.s.boot.autoconfigure.logging.ConditionEvaluationReportLoggingListener - Error starting ApplicationContext. To display the conditions report re-run your application with 'debug' enabled.
2021-06-13 11:03:54.886 [main] ERROR org.springframework.boot.diagnostics.LoggingFailureAnalysisReporter - ***************************
APPLICATION FAILED TO START
***************************

三.问题解决-端口占用

1.检查了一下,我的jenkins服务在用的是8080端口,

[root@fanyu logs]# ps -ef | grep 8080
root       3201   3022  0 08:18 pts/1    00:01:31 java -jar jenkins.war -httpPort=8080
root      10086   3022  0 12:34 pts/1    00:00:00 grep --color=auto 8080

服务端程序在用的也是8080端口;

2.于是便修改端口为8081(并把8081端口加入到防火墙的开放端口中)
示例:

[root@fanyu ~]# firewall-cmd --list-ports    列出开放端口
8080/tcp 3306/tcp 80/tcp 6379/tcp 8081/tcp
[root@fanyu ~]# firewall-cmd --zone=public --add-port=8082/tcp --permanent      增加开放端口
success
[root@fanyu ~]# firewall-cmd --reload     重启防火墙
success
[root@fanyu ~]# firewall-cmd --list-ports
8080/tcp 3306/tcp 80/tcp 6379/tcp 8081/tcp 8082/tcp

3.再次启动deploy任务,test任务

4.test任务依旧报错,查看报告:

loginFalse
org.apache.ibatis.exceptions.PersistenceException: ### Error querying database. Cause: com.mysql.cj.jdbc.exceptions.CommunicationsException: Communications link failure The last packet sent successfully to the server was 0 milliseconds ago. The driver has not received any packets from the server. ### The error may exist in mapper/SQLMapper.xml ### The error may involve com.course.model.loginCase ### The error occurred while executing a query ### Cause: com.mysql.cj.jdbc.exceptions.CommunicationsException: Communications link failure The last packet sent successfully to the server was 0 milliseconds ago. The driver has not received any packets from the server. at org.apache.ibatis.exceptions.ExceptionFactory.wrapException(ExceptionFactory.java:30) at org.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:150) at org.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:141) at org.apache.ibatis.session.defaults.DefaultSqlSession.selectOne(DefaultSqlSession.java:77) at com.course.cases.LoginTest.loginFalse(LoginTest.java:11more Caused by: java.net.ConnectException: 连接超时 (Connection timed out) at java.net.PlainSocketImpl.socketConnect(Native Method) at java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:350) at java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:206) at java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:188) at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:392) at java.net.Socket.connect(Socket.java:589) at com.mysql.cj.protocol.StandardSocketFactory.connect(StandardSocketFactory.java:173) at com.mysql.cj.protocol.a.NativeSocketConnection.connect(NativeSocketConnection.java:65) ... 60 more ... Removed 37 stack frames

大意是连接超时,没有得到服务器的响应包;

四.问题解决-连接超时

1.尝试在本机ping虚拟机
发现可以ping通

2.尝试在虚拟机ping主机
发现连接超时

3.在网上查了下资料是本机的防火墙原因,Windows10的防火墙没有打开ICMPv4-in规则
于是解决如下:
1)打开设置,搜索防火墙

2)点击高级设置
3)点此更改防火墙属性

4)确保更改过后是这样的效果

5)点击入站规则,启动这个规则

再次虚拟机ping主机,发现可以ping通了

[root@fanyu logs]# ping 192.168.159.1
PING 192.168.159.1 (192.168.159.1) 56(84) bytes of data.
64 bytes from 192.168.159.1: icmp_seq=1 ttl=128 time=0.257 ms
64 bytes from 192.168.159.1: icmp_seq=2 ttl=128 time=0.284 ms
64 bytes from 192.168.159.1: icmp_seq=3 ttl=128 time=0.271 ms
64 bytes from 192.168.159.1: icmp_seq=4 ttl=128 time=0.282 ms
64 bytes from 192.168.159.1: icmp_seq=5 ttl=128 time=0.311 ms
64 bytes from 192.168.159.1: icmp_seq=6 ttl=128 time=0.255 ms
64 bytes from 192.168.159.1: icmp_seq=7 ttl=128 time=0.293 ms
64 bytes from 192.168.159.1: icmp_seq=8 ttl=128 time=0.210 ms
64 bytes from 192.168.159.1: icmp_seq=9 ttl=128 time=0.243 ms
64 bytes from 192.168.159.1: icmp_seq=10 ttl=128 time=0.236 ms
64 bytes from 192.168.159.1: icmp_seq=11 ttl=128 time=0.254 ms
64 bytes from 192.168.159.1: icmp_seq=12 ttl=128 time=0.178 ms
64 bytes from 192.168.159.1: icmp_seq=13 ttl=128 time=0.320 ms
64 bytes from 192.168.159.1: icmp_seq=14 ttl=128 time=0.249 ms
64 bytes from 192.168.159.1: icmp_seq=15 ttl=128 time=0.246 ms
64 bytes from 192.168.159.1: icmp_seq=16 ttl=128 time=0.273 ms
64 bytes from 192.168.159.1: icmp_seq=17 ttl=128 time=0.247 ms
64 bytes from 192.168.159.1: icmp_seq=18 ttl=128 time=0.337 ms
64 bytes from 192.168.159.1: icmp_seq=19 ttl=128 time=0.239 ms
64 bytes from 192.168.159.1: icmp_seq=20 ttl=128 time=0.259 ms
64 bytes from 192.168.159.1: icmp_seq=21 ttl=128 time=0.254 ms
64 bytes from 192.168.159.1: icmp_seq=22 ttl=128 time=0.202 ms
^C
--- 192.168.159.1 ping statistics ---
22 packets transmitted, 22 received, 0% packet loss, time 21032ms
rtt min/avg/max/mdev = 0.178/0.259/0.337/0.036 ms

再次在jenkins启动任务,发现还是报错

loginFalse
java.lang.NullPointerException at com.course.cases.LoginTest.getResult(LoginTest.java:96) at com.course.cases.LoginTest.loginFalse(LoginTest.java:119) at com.sun.proxy.$Proxy0.invoke(Unknown Source) ... Removed 33 stack frames

检查这行代码,发现

是因为response为空,所以产生了空指针异常,也就是没有得到响应

五.问题解决-请求无响应

1.不通过jenkins在本机终端尝试运行测试代码
也是报错的,报错如下:

12:53:08.671 [main] DEBUG com.course.model.loginCase - ==>  Preparing: select * from login_case where id=?
12:53:08.671 [main] DEBUG com.course.model.loginCase - ==> Parameters: 1(Integer)
12:53:08.671 [main] DEBUG com.course.model.loginCase - <==      Total: 1
LoginCase(id=1, userName=tt, password=123, expected=true)
http://192.168.159.1:8081/v1/login
12:53:08.671 [main] INFO com.course.cases.LoginTest - ********开始验证loginTrue api*********
12:53:08.675 [main] DEBUG org.apache.http.client.protocol.RequestAddCookies - CookieSpec selected: default
12:53:08.675 [main] DEBUG org.apache.http.client.protocol.RequestAuthCache - Auth cache not set in the context
12:53:08.675 [main] DEBUG org.apache.http.impl.conn.PoolingHttpClientConnectionManager - Connection request: [r
oute: {}->http://192.168.159.1:8081][total kept alive: 0; route allocated: 0 of 2; total allocated: 0 of 20]
Caused by: java.net.ConnectException: Connection refused: connectat java.net.DualStackPlainSocketImpl.connect0(Native Method)at java.net.DualStackPlainSocketImpl.socketConnect(DualStackPlainSocketImpl.java:79)at java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:345)at java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:206)at java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:188)at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:172)at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:392)at java.net.Socket.connect(Socket.java:589)

可以看出测试代码访问数据库都是正常的,但是请求服务端连接被拒绝了。

2.jenkins运行deploy任务和test任务
test任务 console output每一个测试方法也都是提示连接超时

3.确保服务端程序确实是起着的之后,检查了下请求的IP

这个是本机的IP,
因为
服务端程序和测试程序都是运行在虚拟机,这时候请求的地址应该是虚拟机的IP地址;

于是更改访问地址

不要忘了提交代码到git上

git代码更新后
再次执行jenkins的deploy和test任务,
服务器日志能正常响应:

test任务output:

查看extentreport报告
(cd /root/.jenkins/workspace/test/Chapter12/test-output)

[root@fanyu Chapter12]# cd test-output/
[root@fanyu test-output]# ll
总用量 20
-rw-r--r--. 1 root root 20477 6月  13 13:21 index.html

这表明test任务执行成功了

jenkins部署成功执行自动化测试代码失败问题解决相关推荐

  1. idea中push代码失败问题解决

    idea中push代码失败问题解决 解决方案: 把提交方式从https改为git步骤: 1.执行ssh-keygen -t rsa 一路回车去生成公钥私钥,默认保存在用户目录下的.ssh目录下: 2. ...

  2. Jenkins部署分支报Finished: UNSTABLE的问题解决

    Jenkins部署分支报Finished: UNSTABLE的问题解决 参考文章: (1)Jenkins部署分支报Finished: UNSTABLE的问题解决 (2)https://www.cnbl ...

  3. jenkins执行bat失败_关于批处理文件:即使在BAT脚本中成功执行了ROBOCOPY命令,JENKINS作业也会失败...

    我正在通过詹金斯执行Windows蝙蝠脚本. 批处理文件正在提供所需的输出,但是构建失败.我的批处理文件是.. cd /d D:\\Bank\\Member\\ID if %errorlevel% n ...

  4. 关于Jenkins部署代码权限三种方案

    关于Jenkins部署代码权限三种方案 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.修改Jenkins进程用户为root [root@jenkins ~]# cat /etc ...

  5. 前端为什么有的接口明明是成功回调却执行了.catch失败回调_Web前端:ES6是干什么的?(下)...

    大家好,我来了!本期为大家带来的Web前端学习知识是"Web前端:ES6是干什么的?(下)",喜欢Web前端的小伙伴,一起看看吧! 主要内容 Promise Generator A ...

  6. Jenkins学习(执行命令路径,脚本上传静态html代码)(一)

    Jenkins的安装 可参考https://www.cnblogs.com/yangzp/p/12953810.html sudo wget -O /etc/yum.repos.d/jenkins.r ...

  7. 为什么element ui 中表单验证validate验证成功不执行验证成功的逻辑代码

    element ui 中表单验证validate验证成功不执行成功的逻辑代码 首先今天做项目时遇到的一个问题,下面代码中,如果上面的验证规则通过但是不会执行验证通过的代码,只有验证不通过才会输出els ...

  8. maven配置自动部署到服务器上,jenkins+svn+maven安装配置并自动化部署成功(超级详细)...

    jenkins+svn+maven安装配置并自动化部署成功(超级详细) jenkins+svn+maven安装配置并自动化部署成功(超级详细) 简言 写这篇博客的原因是因为每次部署服务器的流程都是在做 ...

  9. docker部署jenkins,发布任务执行scp免密传输

    docker部署jenkins,发布任务执行scp免密传输 # 因为jenkins的任务都是以jenkins用户执行,必须以jenkins用户进入容器生成公私钥 $ docker exec -it - ...

最新文章

  1. 什么是php伪静态规则,php设置伪静态规则编写 问题
  2. 如何快速搜索脑机接口社区的历史文章?
  3. GDCM:读取和转储DICOMDIR文件的测试程序
  4. php 提取登录QQ,php QQ登录
  5. python学习笔记(2
  6. 【项目升级】集成Quartz.Net Job实现(一)
  7. hdu 2188巴什博弈
  8. 05MySQL基本操作
  9. 雷军自曝25年前旧照 网友发现端倪:25年前就有MIX 2S了?
  10. 实习面试问题整理(一)
  11. golang搭建静态web服务器的实现方法
  12. hiberante中get和load方法的区别
  13. Expression Blend 中的Sketchflow for Windows Phone 7
  14. rpm方式安装mysql5.7_centos下rpm方式安装mysql5.7
  15. 用python帮别人写了个文字识别程序
  16. 花前病酒的学拳笔记,杨氏叶派,叶家拳,暂时1-19
  17. Matlab绘图-很详细,很全面
  18. leetcode题解(含解题思路)(持续更新中)
  19. OpenGL进阶示例1——动态画线(虚线、实线、颜色、速度等)
  20. sql中可用的模糊搜索方法

热门文章

  1. js调用扫描仪(Web Twain Scan)-兼容Chrome、Edge、360、Firefox、IE、钉钉、企业微信等
  2. 论文阅读笔记:YOLO9000: Better,Faster,Stronger
  3. 竞价排名和php是什么,竞价排名优缺点详解-金瑞帆高端建站
  4. 【DX-BT24蓝牙模块-AT命令与手机透传教程】
  5. 什么是代理服务,如何选择最佳IP代理?
  6. SPSS随机对照研究总结
  7. 《惢客创业日记》2018.11.02(周五) “追梦大叔”的回忆
  8. 川希:日引流100+宝妈粉蓝海方法,精准引流预产期宝妈思路
  9. LinuxDay12——磁盘存储和文件系统
  10. NOIP练习赛题目1