Ошибка пути Jenkins Javascript

Я создаю небольшую тестовую среду, работающую с Mocha + WebDriverIO через Jenkins. По какой-то причине относительный путь не отображается должным образом. В результате 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) + '');

}

Запустите Дженкинса (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

person SC_Chupacabra    schedule 22.09.2014    source источник


Ответы (1)


В Jenkins рабочая область задания рассматривается как текущий каталог. Независимо от того, вызвали ли вы родительский ($JENKINS_HOME/../../run_test.js) сценарий, указав относительный путь относительно Jenkins, любой путь, указанный внутри сценария, будет обрабатываться относительно рабочей области задания Jenkins. Итак, чтобы решить вашу проблему, просто укажите относительный путь к login.js в сценарии run_test.js.

Если вы не хотите перемещать скрипт login.js из существующего местоположения в рабочее пространство Jenkins, вам придется указать относительный путь к файлу относительно рабочего пространства задания Jenkins. Однако, если вы хотите сделать его достаточно гибким для работы в обоих направлениях, т. е. через командную строку и Jenkins, вы можете попробовать любой из следующих подходов:

  • В родительском сценарии вы можете проверить, установлена ​​ли какая-либо переменная среды Jenkins (например, JOB_NAME). Цель состоит в том, чтобы проверить, работает ли ваш скрипт как часть какого-либо задания Дженкинса. Если да, измените путь login.js в родительском скрипте на относительный путь относительно рабочей области задания.

    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
    }
    
person Technext    schedule 23.09.2014
comment
Отлично. Так что, если я правильно понимаю, вы говорите, что я должен лезть ВВЕРХ в нужную папку из скрипта. Если да, то нет ли способа обойти это? Я хотел бы иметь возможность запускать скрипт из командной строки, а также из Jenkins по мере необходимости. - person SC_Chupacabra; 23.09.2014
comment
Отличный обходной путь. Я чувствую себя глупо из-за того, что не подумал об этом сам, ха-ха. Большое спасибо! - person SC_Chupacabra; 25.09.2014