#jenkins #jenkins-pipeline
Вопрос:
Я пытаюсь объявить переменную с именем output в script
разделе файла Дженкинса и пытаюсь использовать ее следующим образом
stages {
stage('Deploy') {
steps {
script {
output = 'output.log'
sh 'cd invoker amp;amp; mvn clean install amp;amp; mvn exec:java -Dexec.mainClass="com.company.Deployer" -Dexec.args="qal ${GIT_COMMIT_HASH}" > ../${output}'
echo readFile(output)
}
}
}
}
Но я получаю эту ошибку: script.sh: cannot create ../: Is a directory
. Это означает, что переменная не заполняется. Я попробовал и ${output}
то, и $output
другое, но получил ту же ошибку.
Что я делаю не так?
Ответ №1:
В строках groovy одинарные кавычки ( ''
) не поддерживают интерполяцию строк, ее поддерживают только строки в двойных кавычках ( ""
) (GStrings), и поэтому ваш параметр не оценивается.
Чтобы решить проблему, просто используйте двойные кавычки в своем sh
шаге:
sh "cd invoker amp;amp; mvn clean install amp;amp; mvn exec:java -Dexec.mainClass="com.company.Deployer" -Dexec.args="qal ${GIT_COMMIT_HASH}" > ../${output}"
Другой вариант-использовать директиву среды декларативного конвейера, которая является частью синтаксиса декларативного конвейера, которая задает параметры (в дополнение к параметрам по умолчанию), которые будут загружаться в качестве переменных среды в среду выполнения оболочки.
Таким образом, вы можете определить параметр в environment
блоке, а затем использовать его в скрипте с синтаксисом оболочки для переменных среды: $PARAM
.
Что-то вроде:
pipeline {
agent any
environment {
OUTPUT_FILE= 'output.log'
}
stages {
stage('Use Global Parameter') {
steps {
sh 'cd invoker amp;amp; mvn clean install amp;amp; mvn exec:java -Dexec.mainClass="com.company.Deployer" -Dexec.args="qal $GIT_COMMIT_HASH" > ../$OUTPUT_FILE'
echo readFile(output)
}
}
}
}