Node.js Jenkins Javascript路径故障

Node.js Jenkins Javascript路径故障,node.js,jenkins,selenium-webdriver,mocha.js,webdriver-io,Node.js,Jenkins,Selenium Webdriver,Mocha.js,Webdriver Io,我正在通过Jenkins构建一个运行Mocha+WebDriverIO的小型测试框架。由于某些原因,相对路径没有按预期显示。因此,fs.js抛出了一个错误: 错误: 错误:enoint,没有这样的文件或目录'C:\workspaces\nodejstest\jenkins\jenkins\u HOME\jobs\browse\u test\workspace\login.js' 路径应该是:“C:\workspace\nodejstest\login.js”(执行脚本的绝对位置)。任何人,都知道

我正在通过Jenkins构建一个运行Mocha+WebDriverIO的小型测试框架。由于某些原因,相对路径没有按预期显示。因此,fs.js抛出了一个错误:

错误:

错误:enoint,没有这样的文件或目录'C:\workspaces\nodejstest\jenkins\jenkins\u HOME\jobs\browse\u test\workspace\login.js'

路径应该是:“C:\workspace\nodejstest\login.js”(执行脚本的绝对位置)。任何人,都知道为什么目录路径是错误的,即使我是从同一个目录执行脚本,而不是错误所述的Jenkins workspace目录。当我从cli运行它时,它工作正常。奇怪

测试脚本(run_Test.js):

启动Jenkins(run.sh):

詹金斯的工作:

mocha $JENKINS_HOME/../../run_test.js --brand=IBSD --country=UK --env=PROD

在Jenkins中,作业的工作区被视为当前目录。无论您是否通过指定相对路径w.r.t JENKINS调用父脚本(
$JENKINS_HOME/./../run_test.js
),脚本中指定的任何路径都将相对于JENKINS作业的工作区进行处理。因此,要解决您的问题,只需在run_test.js脚本中指定login.js的相对路径

如果不想将login.js脚本从现有位置移动到Jenkins工作区,则必须指定文件w.r.t Jenkins作业工作区的相对路径。但是,如果您想使它足够灵活,可以同时使用命令行和Jenkins,那么您可以尝试以下任何一种方法:

  • 在父脚本中,可以检查是否设置了任何Jenkins环境变量(例如
    JOB\u NAME
    )。目的是检查您的脚本是否作为某个Jenkins作业的一部分运行。如果是,则将父脚本中login.js的路径更改为相对路径w.r.t作业的工作区。

    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
    }
    

太好了。如果我理解正确,你是说我应该从脚本中爬到正确的文件夹。如果是这样的话,这是没有办法的?我希望能够根据需要从命令行和Jenkins运行脚本。这是一个很好的解决方法。我有点傻,因为我自己没有想到这一点,哈哈。谢谢!
path_to_login.js = default_location

if (jenkins_env_variable is set) {
   path_to_login.js = ../../../../../../login.js
}
path_to_login.js = default_location

if (jenkins_arg_passed is yes) {
   path_to_login.js=../../../../../../login.js
}