#jenkins #continuous-integration #jenkins-groovy #jenkins-job-dsl
Вопрос:
У меня есть шаг Дженкинса, на котором необходимо запустить встроенный сценарий оболочки. Для сценария требуется несколько аргументов, которые содержатся в конфигурации. Как правильно это сделать? Сценарий оболочки должен быть встроенным и не может быть в отдельном файле. Я пробовал что-то подобное, но это не работает.
stage('Build Image') {
steps {
script {
docker.withRegistry('.......', 'Gitlab') {
CHECK_SHA_RESULT = sh '''
ARG1=$1
ARG2=$2
// Do other stuff and output a result
''' ${config.var1} ${config.var2}
}
}
}
}
Ответ №1:
Существует два варианта передачи значений:
- интерполяция строк
- разверните переменные среды
Интерполяция Строк
Вы можете просто передавать значения, расширяя переменные в заводных строках:
sh """
ARG1=${config.var1}
ARG2=${config.var2}
echo $ARG1
echo $ARG2
"""
(двойные кавычки используются вместо одинарных)
Вы должны быть осторожны, потому что значения сначала расширяются, а затем выполняется код. Это означает, что вы можете вводить код. Пример:
- конфигурационный файл:
var1=text; cat /etc/passwd var2=hello
- выполненный код:
ARG1=text; cat /etc/passwd ARG2=hello echo $ARG1 echo $ARG2
Переменные среды
Вы можете вводить значения с помощью переменных среды. Это намного безопаснее, потому что значения расширяются процессом оболочки (предотвращение внедрения команд).
withEnv([
"ARG1=${config.var1}",
"ARG2=${config.var2}"
]) {
sh '''
echo $ARG1
echo $ARG2
'''
}
( sh
сценарий определяется с помощью кавычек для записи)
Пример:
- конфигурационный файл:
var1=text; cat /etc/passwd var2=hello
- доступные переменные среды:
- ARG1 =
text; cat /etc/passwd
- ARG2 =
hello
- ARG1 =
- выполненный код:
echo $ARG1 echo $ARG2