Как использовать параметр файла в jenkins

Я выполняю параметризованную сборку в jenkins, чтобы считать нет. строк в файле, который имеет 1 параметр файла. Его расположение файла - pqr. Имя файла сценария - linecount.sh который сохраняется на удаленном сервере. Когда я попытался выполнить его с помощью команды sh linecount.sh filename, он отлично работает с jenkins. Но поскольку я удаляю имя файла из аргумента и выполняю тот же скрипт, что и с параметризованной сборкой, на консоли отображается ошибка ниже:

Started by user Prasoon Gupta
[EnvInject] - Loading node environment variables.
Building in workspace users/Prasoon/sample_programs
Copying file to pqr
[sample_programs] $ /bin/sh -xe /tmp/hudson3529902665956638862.sh
+ sh linecount.sh
PRASOON4
linecount.sh: line 15: parameterBuild.txt: No such file or directory
Build step 'Execute shell' marked build as failure
Finished: FAILURE

Я загружаю файл (parameterBuild.txt) с моей локальной машины. Почему это дает эту ошибку?

Я сомневаюсь, что в сценарии оболочки я использовал аргумент как $1. Как я могу ссылаться на это, когда я беру файл в качестве параметра.

Ответ 1

Загруженный файл не сохранит то же имя, что и на вашем локальном компьютере. Он будет указан после аргумента File location указанного в параметрах параметров файла: enter image description here В этом примере я получу файл с именем file.txt в моем корневом file.txt рабочей file.txt, независимо от того, что я называю его на своем компьютере. Поэтому, если я сейчас создам свою работу и в диалоговом окне параметров введите следующее (обратите внимание, что мое локальное имя файла - table.html):

enter image description here

Затем я получаю следующее в журнале (у меня есть шаг сборки, который делает ls -l):

Building on master in workspace /var/lib/jenkins/workspace/fs
Copying file to file.txt
[fs] $ /bin/sh -xe /tmp/hudson845437350739055843.sh
+ ls -l
total 4
-rw-r--r-- 1 jenkins jenkins 292 Feb 15 07:23 file.txt
Finished: SUCCESS

Обратите внимание, что table.html теперь называется file.txt, например, что я ввел как File location.

Итак, в вашем случае команда должна быть:

sh linecount.sh pqr

Ответ 3

Для этой проблемы существует обходное решение https://github.com/janvrany/jenkinsci-unstashParam-library и в сценарии конвейера вы делаете:

library "jenkinsci-unstashParam-library"
node {
  def file_in_workspace = unstashParam "file"
  sh "cat ${file_in_workspace}"
}