持续集成 [已解决] Jenkins 无法执行 Ant

wyb199026 · 2016年08月28日 · 最后由 fqzero 回复于 2018年05月23日 · 2199 次阅读

问题

我准备做Jenkins+Jmeter+Ant的接口测试持续集成,但是配置的过程中,一直无法使用Ant,请大家帮忙看看是什么原因。

环境

系统:Mac OS X EI Capitain 10.11.5
Jenkins: 2.19
Ant插件:1.3
Ant:1.9.7
Jmeter:3.0

本地直接执行Ant

我在本地执行是可以正常执行,而且能生成测试结果的。

SvenWeng@wengyanbin:~/Desktop|  ant
Buildfile: /Users/SvenWeng/Desktop/build.xml

all:

test:
[jmeter] Executing test plan: /Users/SvenWeng/Desktop/Jmeter测试脚本5-2.jmx ==> /Users/SvenWeng/Desktop/TestReport201608280735.jtl
[jmeter] Writing log file to: /Users/SvenWeng/apache-jmeter-3.0/bin/jmeter.log
[jmeter] Creating summariser <summary>
[jmeter] Created the tree successfully using /Users/SvenWeng/Desktop/Jmeter测试脚本5-2.jmx
[jmeter] Starting the test @ Sun Aug 28 19:35:53 CST 2016 (1472384153997)
[jmeter] Waiting for possible Shutdown/StopTestNow/Heapdump message on port 4445
[jmeter] summary + 1240 in 00:00:06 = 208.3/s Avg: 42 Min: 33 Max: 332 Err: 0 (0.00%) Active: 10 Started: 10 Finished: 0
[jmeter] summary + 2760 in 00:00:13 = 207.4/s Avg: 44 Min: 33 Max: 635 Err: 0 (0.00%) Active: 0 Started: 10 Finished: 10
[jmeter] summary = 4000 in 00:00:19 = 207.7/s Avg: 43 Min: 33 Max: 635 Err: 0 (0.00%)
[jmeter] Tidying up ... @ Sun Aug 28 19:36:13 CST 2016 (1472384173328)
[jmeter] ... end of run
[jmeter] Executing test plan: /Users/SvenWeng/Desktop/推荐码.jmx ==> /Users/SvenWeng/Desktop/TestReport201608280735.jtl
[jmeter] Writing log file to: /Users/SvenWeng/apache-jmeter-3.0/bin/jmeter.log
[jmeter] Creating summariser <summary>
[jmeter] Created the tree successfully using /Users/SvenWeng/Desktop/推荐码.jmx
[jmeter] Starting the test @ Sun Aug 28 19:36:14 CST 2016 (1472384174438)
[jmeter] Waiting for possible Shutdown/StopTestNow/Heapdump message on port 4445

使用Jenkins中的Ant插件

我首选的是使用Jenkins的Ant插件来执行我的build.xml文件。
报错如下:

ERROR: command execution failed.Maybe you need to configure the job to choose one of your Ant installations?
Finished: FAILURE

看报错应该是我的Ant没有配置,但是我查了一下网络上给的解决方案是在Jenkins的系统配置中配置Ant的环境变量,但是我的Jenkins的系统配置里面没有关于Ant的。
系统配置

构建的Ant配置如下图
Ant配置

使用shell执行脚本

我想使用shell来执行脚本,代码如下:

cd /Users/SvenWeng/Desktop
ant

但是执行结果让我很意外,给我报错找不到命令

/Users/Shared/Jenkins/tmp/hudson6252750443925915479.sh: line 3: ant: command not found
Build step 'Execute shell' marked build as failure
Finished: FAILURE

按道理我本地能成功执行,就表示环境变量是配置好的啊,为什么还会出现无法找到命令这个报错?

使用执行Python的方式来执行Ant

我的Python脚本是这样的:

import os
os.system("ant")

我在本地执行,也是没问题,可以执行成功,但是用shell脚本来执行Python的时候,报错也是找不到命令。

急需老司机来带带我啊!

放上build.xml文件的代码:

<?xml version="1.0" encoding="UTF-8"?>
<project name="ant-jmeter-test" default="all" basedir=".">
<tstamp>
<format property="time" pattern="yyyyMMddhhmm" />
</tstamp>
<!-- 需要改成自己本地的 Jmeter 目录-->
<property name="jmeter.home" value="/Users/SvenWeng/apache-jmeter-3.0" />
<!-- jmeter生成jtl格式的结果报告的路径-->
<property name="jmeter.result.jtl.dir" value="/Users/SvenWeng/Desktop" />
<!-- jmeter生成html格式的结果报告的路径-->
<property name="jmeter.result.html.dir" value="/Users/SvenWeng/Desktop" />
<!-- 生成的报告的前缀-->
<property name="ReportName" value="TestReport" />
<property name="jmeter.result.jtlName" value="${jmeter.result.jtl.dir}/${ReportName}${time}.jtl" />
<property name="jmeter.result.htmlName" value="${jmeter.result.html.dir}/${ReportName}${time}.html" />
<path id="javaclass.path">
<pathelement path="${env.classpath}" />
<pathelement path="${env.JBOSS_HOME}/server/all/lib/servlet-api.jar" />
<pathelement path="${env.JBOSS_HOME}/server/all/lib/jsp-api.jar" />
<fileset dir="${tmp.lib}" includes="*.jar" />
<!-- <fileset dir="${project.lib}" includes="*.jar" /> -->
</path>
<target name="all">
<antcall target="test" />
<antcall target="report" />
</target>
<target name="test">
<taskdef name="jmeter" classname="org.programmerplanet.ant.taskdefs.jmeter.JMeterTask" />
<jmeter jmeterhome="${jmeter.home}" resultlog="${jmeter.result.jtlName}">
<!-- 声明要运行的脚本。"*.jmx"指包含此目录下的所有jmeter脚本-->
<testplans dir="/Users/SvenWeng/Desktop" includes="*.jmx" />
</jmeter>
</target>
<target name="report">
<xslt in="${jmeter.result.jtlName}" out="${jmeter.result.htmlName}" style="${jmeter.home}/extras/jmeter-results-detail-report_21.xsl" />
<!-- 因为上面生成报告的时候,不会将相关的图片也一起拷贝至目标目录,所以,需要手动拷贝 -->
<copy todir="${jmeter.result.html.dir}">
<fileset dir="${jmeter.home}/extras">
<include name="collapse.png" />
<include name="expand.png" />
</fileset>
</copy>
</target>
</project>
如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
共收到 12 条回复 时间 点赞

你的Ant是怎么配置的 贴出来哦

#1楼 @kevin_sqa 额,已经贴了,构建的时候我就填了一个build.xml的路径

下面的命令,在终端执行一遍,再通过 Jenkins 执行一遍

whoami
echo $PATH
which ant

#3楼 @sanlengjingvv 不行诶,报错:

[Desktop] $ ant -file build.xml
ERROR: command execution failed.Maybe you need to configure the job to choose one of your Ant installations?
Finished: FAILURE

我执行你那三句的结果:

SvenWeng@wengyanbin:~/Desktop|  whoami
SvenWeng
SvenWeng@wengyanbin:~/Desktop| echo $PATH
/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/Users/SvenWeng/Desktop/android-sdk-macosx/platform-tools/:/Users/SvenWeng/Desktop/android-sdk-macosx/tools/:/Users/SvenWeng/Tools/you-get:/Library/Frameworks/Python.framework/Versions/3.6/bin/tickets
SvenWeng@wengyanbin:~/Desktop| which ant
/usr/local/bin/ant

新建一个自由风格的 Job
add build step > excute shell
填写

whoami
echo $PATH
which ant

保存,立即构建

#5楼 @sanlengjingvv 执行失败了。

[test] $ /bin/sh -xe /Users/Shared/Jenkins/tmp/hudson6325004620799021745.sh
+ whoami
jenkins
+ echo /usr/bin:/bin:/usr/sbin:/sbin
/usr/bin:/bin:/usr/sbin:/sbin
+ which ant
Build step 'Execute shell' marked build as failure
Finished: FAILURE

不过Jenkins用户的PATH没有/usr/local/bin这个目录,我试试把这个目录加到jenkins的PATH里面

#5楼 @sanlengjingvv 我加了一下环境变量,然后用ant插件能够成功执行ant了,但是现在遇到一个报错

Building in workspace /Users/Shared/Jenkins/Home/workspace/test
[SvenWeng] $ /Users/Shared/Jenkins/Home/tools/hudson.tasks.Ant_AntInstallation/Ant/bin/ant -file Desktop
Buildfile: /Users/SvenWeng/Desktop/build.xml

all:

test:

BUILD FAILED
/Users/SvenWeng/Desktop/build.xml:24: The following error occurred while executing this line:
/Users/SvenWeng/Desktop/build.xml:29: IO error scanning directory '/Users/SvenWeng/Desktop'

Total time: 0 seconds
Build step 'Invoke Ant' marked build as failure
Finished: FAILURE

请问一下知道这个报错是为什么吗?

#5楼 @sanlengjingvv 额,权限的问题,我加了权限之后就解决这个问题了。终于成功跑通了😄

linux上装Jenkins,本机jmeter+ant,怎么配置啊?

#9楼 @ttma 额,我没用过Linux,不过jmeter和ant都可以用homebrew来安装

请问你执行本地的ant和你jenkins的服务器是同一个的吗?系统配置中配置Ant的环境变量跟jenkins的是两回事啊

Lihuazhang 关闭了讨论 10月03日 11:01
13楼 已删除
wyb199026 回复

也遇到这个问题了,请问是怎么解决的?

需要 登录 后方可回复, 如果你还没有账号请点击这里 注册