我正在构建一个通过Jenkins运行Mocha WebDriverIO的小测试框架 . 由于某种原因,相对路径未按预期显示 . 结果,fs.js抛出一个错误:
错误:错误:ENOENT,没有这样的文件或目录'C:\ workspaces \ nodejstest \ jenkins \ JENKINS_HOME \ jobs \ browse_test \ workspace \ login.js'
路径应为:'C:\ workspaces \ nodejstest \ _login.js'(已执行脚本的绝对位置) . 任何人都有任何关于为什么目录路径错误的见解,即使我从同一目录执行脚本,而不是Jenkins工作区目录作为错误状态 . 当我从cli运行它时,它工作正常 . 奇怪的 .
测试脚本(run_test.js):
var common = require('./common/common.js'), // INCLUDES FS LIBRARY
scriptList = ['login', 'browse_price_ascending'];
// ITERATE THROUGH SCRIPT NAMES AND EXECUTE
for(var currentScript in scriptList){
// BUILD SCRIPT PATH
var scriptPath = './' + scriptList[currentScript] + '.js';
// EVAL IS NOT ALWAYS EVIL ;)
eval(common.fs.readFile(scriptPath) + '');
}
启动Jenkins(run.sh):
#!/bin/bash
export JENKINS_HOME=./jenkins/JENKINS_HOME
java -jar ./jenkins/jenkins.war
詹金斯工作:
mocha $JENKINS_HOME/../../run_test.js --brand=IBSD --country=UK --env=PROD
1 回答
在Jenkins中,作业的工作空间被视为当前目录 . 无论是否通过指定相对路径w.r.t Jenkins调用父(
$JENKINS_HOME/../../run_test.js
)脚本,脚本中指定的任何路径都将相对于Jenkins ' job' s工作区进行处理 . 因此,要解决您的问题,只需在run_test.js脚本中指定login.js的相对路径即可 .如果您不想将login.js脚本从现有位置移动到Jenkins工作区,则必须指定文件w.r.t Jenkins ' job' s工作区的相对路径 . 但是,如果你想让它足够灵活,可以通过命令行和Jenkins两种方式工作,那么你可以尝试以下任何一种方法:
JOB_NAME
) . 目的是检查您的脚本是否作为某些Jenkins作业的一部分运行 . 如果是,则将父脚本中login.js的路径更改为相对路径w.r.t job的工作空间 .--brand=IBSD --country=UK --env=PROD
)一样,您可以传递一个(例如--jenkins = yes)来检查脚本是通过Jenkins还是命令行运行 .