概述
项目只能推送至远程服务器上执行单元测试,现在希望通过Jenkins自动执行测试。 执行流程:代码更新,Jenkins自动拉取项目,将项目拷贝至远程服务器,执行测试后,再将测试结果拷贝至Jenkins服务器,通过钉钉机器人通知测试结果。
1、在Jenkins新建Item,选择Freestyle Project

2、点击“确定”后进入项目配置页面
Gitlab配置可参考 https://blog.csdn.net/qq_36717210/article/details/123375547?spm=1001.2014.3001.5501 
3、源码管理
选择“Git",在URL中填入代码仓库地址  凭据(Credentials)一栏若为空,则点击“添加”→“Jenkins”,显示添加凭据弹窗,类型选择“Username with password”,用户名和密码分别填入Gitlab的用户名和密码,描述随意填写,点击“添加”  在指定分支处填入对应分支名称 
4、构建触发器
勾选“Poll SCM” “H/10 9-20 * * *”表示在每天的9点-20点之间,每10分钟检查一次,若Git代码存在更新则执行构建 轮询机制的具体说明可参考 https://www.cnblogs.com/sunyllove/p/9852606.html 
5、构建环境
因为需要将项目拷贝至远程服务器执行,所以这里选择“在构建前通过SSH发送文件或执行命令”  Name选择在系统配置中添加的SSH Server Source中填写要拷贝至远程服务器的文件,此处要拷贝整个项目,因此填了“/” Remote Directory填写文件在远程服务器存放的路径 Exec command填写在远程服务器上要执行的命令  问题:在远程服务器执行命令时,控制台显示“ERROR: Exception when publishing, exception message [Exec exit status not zero. Status [127]]” 经过测试发现,shell命令(例如cd、mkdir、rm)的执行是没问题的,一旦加上mvn命令就会报错。考虑是因为无法识别mvn命令。 Jenkins报错原因不明确,应该是因为不是在本机执行的,无法获取远程服务器的错误。
解决方法:远程服务器已经安装了maven,且设置了maven环境变量,因此在执行mvn命令之前先执行source /etc/profile使环境变量生效。
Jenkins无法读取远程服务器的测试结果,因此执行测试后需要将测试结果拷贝至Jenkins服务器。点击“增加构建步骤”,如果Jenkins服务器是Windows系统则选择“Excute Windows batch command”,其它系统选择“Execute shell” 
5.1 Jenkins服务器是Windows系统
可使用pscp拷贝远程服务器的文件 下载对应版本的pscp https://www.chiark.greenend.org.uk/~sgtatham/putty/latest.html  将下载好的pscp.exe放在Jenkins所在服务器C:\WINDOWS\system32文件夹下,然后就可以使用pscp命令  pscp -r -pw “password” user@远程服务器ip地址:/要拷贝的远程文件路径 下载到本地的路径(下载到当前路径可写为“.”) -r 拷贝整个目录 -pw “” 引号中填入登录远程服务器的密码 user为登远程服务器的用户名 首次使用pscp命令时会有交互提示,需输入y或n;因为是在Jenkins执行,无法进行交互,所以在命令前加上echo y | pscp …
5.2 Jenkins服务器是其他系统(Linux或Mac OS)
此处以MacOS为例 scp不支持在命令中写入登录远程服务器的密码,因此需要使用sshpass 在MacOS上安装sshpass可参考https://www.jianshu.com/p/c692b82cb628 安装后,在执行shell命令中写入命令 sshpass -p 'password' scp -r root@192.168.2.222:/root/文件路径/target . 拷贝测试结果到当前路径 执行后出现 "sshpass: command not found"的提示 在Jenkins所在服务器编辑~/.bash_profile文件
vim ~/.bash_profile
添加环境变量
export SSHPASS="/Users/username/sshpass-1.05" 填写sshpass所在路径
export PATH="$PATH:$SSHPASS"
保存文件后执行source ~/.bash_profile 在shell命令行中第一行写入source ~/.bash_profile  执行构建,提示“sshpass: Permission denied” 解决办法:cd 到sshpass文件夹下,执行chmod a+x ./文件名 ,再执行 sudo chmod -R 777 目录路径 再次在Jenkins执行构建,可查看当前工作区下已显示从远程服务器下载的文件
6、构建后操作
因为项目使用Junit进行测试,所以在构建后要获取Junit测试报告 点击“增加构建后操作步骤”→“Publish Junit test result report”  填入从远程服务器拷贝的测试报告文件路径  执行构建,在状态中会显示测试结果,点击“最新测试结果”,可查看具体测试用例执行结果与耗时 
7、配置钉钉机器人通知
7.1在钉钉群中添加机器人
钉钉群设置→智能群助手→添加机器人→自定义  机器人名字随意填写,这个机器人名字只是在群内的名字显示; 安全设置任选一项即可;  点击完成,会生成一个webhook 
7.2Jenkins配置钉钉机器人
在系统管理(Manage Jenkins)→插件管理(Manage Plugins)中安装DingTalk插件 未安装时,在“可选插件”中搜索DingTalk进行安装  安装DingTalk插件完成后,一定要重启Jenkins!要重启Jenkins!重启Jenkins!!!重启之后才生效。 安装插件后,在系统配置中找到钉钉,点击“新增”  关键字和加密选填一项,填写内容与添加机器人时设置的一致  填写完成后,点击“测试”,钉钉群内会收到一条测试消息  保存设置,在项目设置中就可以看到钉钉机器人  勾选已添加的机器人,点击“高级”  可对通知时机与通知人进行配置  保存设置,执行构建,钉钉群内会收到测试结果通知消息 
|