#java #jenkins #groovy #jenkins-pipeline
#java #дженкинс #groovy #дженкинс-конвейер
Вопрос:
У меня есть файл Jenkins, содержащий конвейер. Я установил параметр, который может быть необязательным для передачи, а также задается значение по умолчанию, если параметр не задан:
parameters {
string(name: 'MY_VAR', defaultValue: 'foo', description: 'my var that can be optional')
}
В середине этапов я хотел бы переопределить (только несколько раз и только в том случае, если передаются некоторые другие конкретные параметры) этот ‘my_var’ с некоторым другим значением.
Пока это работает:
stage('Build') {
steps {
env.MY_VAR="foobar"
}
}
но я хотел бы прочитать эту переменную из файла, поэтому я хотел бы сделать что-то вроде:
stage('Build') {
steps {
// Of course none of following work
env.MY_VAR=$(cat /tmp/my-file)
//or
sh "new_var=$(cat /tmp/my-file)"
env.MY_VAR=$new_var
}
}
Как я могу этого добиться?
Ответ №1:
Я полагаю, вам нужно использовать блок сценариев. Определение переменных в блоке скрипта позволит вам использовать их во всем конвейере, а не только на отдельном этапе.
stage ('Build') {
steps {
script {
env.MY_VAR=sh returnStdout: true, script: """ cat /tmp/my-file """
echo "${env.MY_VAR}"
}
}
}
Ответ №2:
На самом деле вы можете использовать любую из библиотек groovy внутри инструкции script. Например, вы можете использовать класс File для чтения текстовых файлов:
pipeline {
agent any
stages {
stage('Build') {
steps {
script {
def filePath = "/tmp/my-file"
env.VAR = new File(filePath).text
}
}
}
stage('Test') {
steps {
echo env.VAR
}
}
}
}
Комментарии:
1. это выглядит чистым ответом и, вероятно, сработало бы, но в моей настройке jenkins я получил следующую ошибку:
RejectedAccessException: Scripts not permitted to use new java.io.File java.lang.String
. У меня нет доступа к настройкам Jenkins, но это тоже выглядит чистым решением.