Jenkins не видит путь к скрипту в python модуле.

Проект, корневая WORKSPACE:

На следующих снимках путь к модулю где лежит функция которая должна запустить скрипт и она сама


Сам скрипт application.sh лежит в папке $WORKSPACE/netsuite-cache-item-fetcher.

А тут трейс который выдает Дженкинс

Никак не могу понят вчем дело…перепробовал разные варианты паса но никак.
Где то туплю…помогите разобратся

А каким образом вы прокидываете $WORKSPACE в метод app_sh_stage?

несовсем понял “прокидываете” )
но суть в том что $WORKSPACE в метод app_sh_stage это скрин с одним из вариантов…уже тупо пас с корня задал.
пробовал и netsuite-cache-item-fetcher/application.sh и …/netsuite-cache-item-fetcher/application.sh думал от робота выйти в корень

тут я думаю дело или в том с какой папки робот его видит (функцию) или пас нужен от модуля где функция…но вариант netsuite-cache-item-fetcher/application.sh для етого должен был бы работать…и локально на машине работает

Кстати хочу добавить при запуске в самом Джене bash -x netsuite-cache-item-fetcher/application.sh
лог показывает что скрипт запускается…значит Джен его видит…но почемуто не из функции
Вот лог:

  09:07:13 [NetsuiteCacheItemFetcher-02a-Smoke-Tests-Dev] $ /bin/sh -xe              /tmp/hudson2948494855477847407.sh
  09:07:13 + sudo chown relman:users /apps/jenkins/workspace/NetsuiteCacheItemFetcher-02a-   Smoke-Tests-Dev -R
  09:07:13 + chmod +x netsuite-cache-item-fetcher/application.sh
  09:07:13 + bash -x netsuite-cache-item-fetcher/application.sh
  09:07:13 +++ dirname netsuite-cache-item-fetcher/application.sh
  09:07:13 ++ cd netsuite-cache-item-fetcher
  09:07:13 ++ pwd
  09:07:13 + SCRIPT_DIR=/data/jenkins/workspace/NetsuiteCacheItemFetcher-02a-Smoke-Tests-Dev/netsuite-cache-item-fetcher
 09:07:13 + JAVA_PATH=/usr/bin/java
 09:07:13 + PROJECT_PATH=/data/jenkins/workspace/NetsuiteCacheItemFetcher-02a-Smoke-Tests-Dev/netsuite-cache-item-fetcher
 09:07:13 + LOG_DIR=/data/jenkins/workspace/NetsuiteCacheItemFetcher-02a-Smoke-Tests-Dev/netsuite-cache-item-fetcher/logs
 09:07:13 + [[ '' == stage ]]
 09:07:13 + APP_NAME=netsuite-cache-item-fetcher-fat.jar
 09:07:13 + DESC='Item Fetcher'
 09:07:13 + LOG_FILE=/data/jenkins/workspace/NetsuiteCacheItemFetcher-02a-Smoke-Tests-Dev/netsuite-cache-item-fetcher/logs/netsuite-cache-item-fetcher.log
 09:07:13 + PID_FILE=/tmp/netsuite-cache-item-fetcher.pid
 09:07:13 + JMX_PORT=9012
 09:07:13 ++ hostname

Python script не знает об окружениях Jenkins. Вам нужно либо прокидывать в метод значение этой переменной либо указывать путь от самого скрипта с подъёмом вверх по дереву каталогов на сколько я понял

То есть вы имеете ввиду …/…/…/…/…/netsuite-cache-item-fetcher/application.sh
От функции поднятся на netsuite-cache-item-fetcher/ и запустить скрипт ?

Ибо “либо прокидывать в метод значение этой переменной” это и есть в функции передать путь netsuite-cache-item-fetcher/application.sh что локально работает а в Джене нет.

Я просто не уверен что при выполнении метода call переменная $WORKSPACE разворачивается в путь. Проверьте это.

В методе app_sh_stage $WORKSPACE в пути нет…на скрине просто вариант как я пробовал…понятно что это Дженкинс создает свой корневой каталог и никто не должен указывать его в пути к файлам.

Самый корректный путь,как я вижу,это netsuite-cache-item-fetcher/application.sh потомучто это прямой путь.
Дженкинс “читает” этот путь так как исполняет bash -x netsuite-cache-item-fetcher/application.sh если непосредственно виполнить эту команду.
Но тотже самый прямой путь не “читает” из функции.

Понятно, ваш скриншот смутил меня)
Вам нужно подняться из папки utills до папки netsuite-cache-item-fetcher и там уже вызывать shell скрипт.

1 лайк

Вопрос решился следующим образом:
В документации к 2.7 модуля сабпроцесс настоятельно рекомендуется вместо него использовать сабпроцесс32