‘壹’ jenkins构建项目的错误和原因及其解决方法
我们项目开发完之后需要构建项目发布上线时,通常会使用到jenkins构建工具,然后在使用jenkins工具构建项目时通常也会遇到一些构建错误问题,通常情况下,如果项目在自己本地打包时没有问题,启动服务时也没有问题的情况下,可能是jenkins配置问题,需要开发人员配合本地配置项的修改完成,下面我给大家分享一下我遇到的一些构建失败问题,注意:本篇文章讲的主要是关于前端项目的构建失败问题。
Umi自动化工程创建的react项目
从图一中可以看出,是构建时打包命令出错,使用了不能识别的 npm run build:prod ,该命令是前端工程项目中 package.json 包文件中的 scripts 中配置的,该案例中前端并没有配置build:prod 这个打包命令,如图:
这里有两种解决办法。
直接去jenkins 上将打包命令配置成前端包文件种配置的命令,本案例中因为没有区分不同的开发环境,而且项目也只有master一个主分支,没有使用环境变量来区分不同环境的打包命令,所以图一中的问题,可以直接将jenkins里面的打包命令配置成图二中的打包命令 npm run build。去到jenkins 工具中,找到对应的配置项,如图:
如果项目变得复杂,需要进行严格的环境区分,那么这种情况下建议使用第二种方法,使用环境变量区分不同环境的打包命令,具体步骤如下:
去到前端项目在项目根目录下找到包文件package.json文件,打开后,在scripts下面配置build:prod 的打包命令,如图:
去到前端项目中的配置文件config.js中配置 APP_ENV环境变量来区分不同的环境,例如生产环境,开发环境,测试环境等,配置如下:
本文中暂时讲到图一中这种jenkins构建失败的现象以及导致失败的原因和针对其不同的两种解决方法,后续再碰到其它失败现象再补充,或者大家也可以在评论区回复各自遇到的失败情况,欢迎留言。
‘贰’ jenkins,设置集成测试环境,就是构建过程先部署服务,然后运行整体测试用例,执行完后在关闭服务
Jenkins是一个开源项目,它提供了一个容易使用的持续集成系统,并且提供了大量的plugin满足各式的集成需求。
因为手里项目所用到的稳定性和性能测试工具每天手动部署到各台windows机器上比较浪费时间,所以这里使用jenkins用于部署测试工具到各个测试机上运行。整套环境需要一个中心服务器和若干测试机器组成的slave,这就是jenkins的Master/Slave结构,如下所示:
在我们下面的使用中,master和slave是通过jnlp协议来通讯的。
Master机器:
我们需要在我们的master机器上安装jenkins,没有什么特殊说明,注意的是安装包方式同样可以通过运行安装目录下的jenkins.war来启动jenkins,而默认情况下安装后会安装一个名为Jenkins的自动运行的服务。
安装完后访问jenkins的根目录,默认情况下端口是8080(如果要使用其他端口启动,可以通过命令行”Java –jar Jenkins.war –httpPort=80”的方式修改),通过”系统管理”-”管理节点”-“新建节点”
新建节点主要设置远程目录已经运行和访问的方式,注意这里如果有很多机器,建议远程工作目录名称都一样,方便管理,如下所示:
点击保存,这时候就会在jenkinsnode视图左侧看到创建的slave节点。
下面要做的就是部署真正的slave机器了,点击左侧的”test_machine”,这时候会打开该节点的页面,复制这个url,一般是形如http://192.168.1.148/computer/test_machine/, 注意这里在访问的时候不要通过 127.0.0.1的方式访问,因为这样可能会导致后面所用到的jnlp文件中master地址也是127.0.0.1,从而导致slave机器上启动失败。
Slave机器:
首先需要在slave机器上安装java环境和.NetFrameWork环境,然后在浏览器中访问上面拷贝的url,这里提供了三种方式运行slave,我这里使用的第二种方式:
备注:slave.jar的位置如 http://192.168.1.148/jnlpJars/slave.jar
这时候有可能出现如下的错误:
这是因为从 Java 7 Update51 开始,如果应用程序没有证书(例如未签名应用程序)或缺少应用程序名称和发行者信息,默认情况下会被阻止。运行此类型的应用程序可能不安全并存在较高级别的风险。
解决的方法是通过windows开始菜单项打开java控制面板,然后把master机器的url添加到安全提示的例外网站。
再次运行,则弹出如下的安全警告,允许运行即可。
同时,当运行主机上安装了多个java版本时并且应用程序被安全设置阻止时,可以取消一些版本,防止一些意想不到的异常。
运行成功我们能看到连接成功的窗口,而我们继续查看可以在设定的远程工作目录,c:\remote_jenkins下看到如下的一些文件jenkins-slave.exe,jenkins-slave.exe.config,slave.exe,jenkins-slave.xml。 我们这里主要关注jenkins-slave.xml,从下面我们可以看到两个关键节点,executable和arguments,如果你想使用不同的java版本,可以从这里修改,而从arguments可以看出jnlp协议连接的master主机地址。
这时候slave机器已经运行起来了,但是我们显然不想每次都在slave机器上运行一下启动,所以jenkins又提供了slave的服务,如下所示进行安装。
上面说过机器上需要. NetFrameWork环境,我理解是用于安装windows服务用的,当你没有安装时会提示如下错误:
但是上面的提示却误导了我,因为一般都会版本越新越好,但是在xp环境上,最终只有安装2.0版本才能正常,其他所有版本安装后安装服务都会提示如下一些错误提示:
当然上面slave机器上所有进行操作的前提是设置了远程工作目录并且的确在你远程的物理机上创建了该目录,如果没有设置远程工作目录,会错误提示如下:
如果配置了远程工作目录,但是salve机器上没有该目录,则弹出如下错误:
如果slave无法连接,查看远程工作目录下的jenkins-slave.err.log,
这是因为我在master机器上把该slave的名字改了,但是下发到该slave上的jenkins-slave.xml还是旧的信息。
还有一种情况就是在在你master机器ip不断变化的情况下,可能存在即使新建了新的slave节点,但是启动slave的时候失败的情况,这时候最好的方式是看一下该节点的slave-agent.jnlp文件中的内容,然后手动修改中间的一些地址信息,然后手动javaws运行该文件即可。另外一种方法是jenkins的系统管理面板下修改“Jenkins Location”的” Jenkins URL”。