Как использовать параметр файла в 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
указанного в параметрах параметров файла:
В этом примере я получу файл с именем 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
Ответ 2
С давних времен существует ошибка, из-за которой невозможно использовать fileParameter
:
Ответ 3
Для этой проблемы существует обходное решение https://github.com/janvrany/jenkinsci-unstashParam-library
и в сценарии конвейера вы делаете:
library "jenkinsci-unstashParam-library"
node {
def file_in_workspace = unstashParam "file"
sh "cat ${file_in_workspace}"
}