【问题标题】:Jenkins Javascript Path FailureJenkins Javascript 路径失败
【发布时间】:2014-11-16 22:58:53
【问题描述】:

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

【问题讨论】:

    标签: node.js jenkins selenium-webdriver mocha.js webdriver-io


    【解决方案1】:

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

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

    • 在您的父脚本中,您可以检查是否设置了任何 Jenkins 环境变量(例如JOB_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 运行脚本。
    • 很好的解决方法。我自己没有想到它,我有点傻哈哈。非常感谢!
    猜你喜欢
    • 2014-10-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-10
    • 2014-09-05
    • 2020-06-01
    • 2019-05-03
    相关资源
    最近更新 更多