首页 文章

Jenkins Javascript路径失败

提问于
浏览
0

我正在构建一个通过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 回答

  • 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两种方式工作,那么你可以尝试以下任何一种方法:

    • 在父脚本中,您可以检查是否设置了任何Jenkins环境变量(例如 JOB_NAME ) . 目的是检查您的脚本是否作为某些Jenkins作业的一部分运行 . 如果是,则将父脚本中login.js的路径更改为相对路径w.r.t job的工作空间 .
    path_to_login.js = default_location
    
    if (jenkins_env_variable is set) {
       path_to_login.js = ../../../../../../login.js
    }
    
    • 就像您传递给父脚本的其他参数( --brand=IBSD --country=UK --env=PROD )一样,您可以传递一个(例如--jenkins = yes)来检查脚本是通过Jenkins还是命令行运行 .
    path_to_login.js = default_location
    
    if (jenkins_arg_passed is yes) {
       path_to_login.js=../../../../../../login.js
    }
    

相关问题