Передача данных между этапами сборки в Jenkins
Я хотел бы сделать что-то вроде:
Это слишком просто и просто демонстрирует, что я хотел бы сделать. В принципе, я хочу иметь возможность хранить и получать доступ к переменным в пределах одной области работы между несколькими шагами сборки. Кроме того, я могу обойтись, сохранив данные в файле и прочитав их позже, но мне бы хотелось, чтобы что-то было проще и менее "взломанным"
Шаг сборки # 1 - Выполнить оболочку
$START=timestamp
Шаг сборки # 2 - Запустите другое задание
Шаг сборки №3 - Выполнить оболочку
$END=timestamp
TIME_LAPSED=$END-$START
(post lapsed time somewhere)
Ответы
Ответ 1
Остается одна вещь между оболочками: рабочее пространство.
Простое и глупое решение: используйте файл (ы)!
Огромное дополнительное преимущество: оно работает, когда вы разбиваете работу на нескольких заданиях и используете плагин Clone Workspace
Шаг сборки # 1 - Выполнить оболочку
START=timestamp
...
echo $START > env_start.txt
...
Шаг сборки # 3 - Выполнить оболочку
START=`cat env_start.txt`
END=timestamp
TIME_LAPSED=$END-$START
Ответ 2
Если вы используете декларативный синтаксис конвейера, определяющий переменную в разделе environment
и использующий шаг script
для установки ее значения, может быть полезным.
Я делаю что-то вроде этого с декларативным конвейером, и он работает для передачи переменной (как внутри одного этапа, так и между этапами):
pipeline {
agent any
environment {
variable = ''
}
stages {
stage('Some stage') {
steps {
script {
if (some condition){
variable = 'some value'
} else { variable = 'else value' }
}
sh '${somepath}/bin/script ' +
"-parameter=${variable}"
}
}
}
stage('Dummy print') {
steps {
sh "echo ${variable}"
}
}
[...]
Ответ 3
Мы интенсивно используем плагин переменных среды приложения, и он отлично работает.
Решение:
- Задайте переменную myenv = value1
- печать в файл в рабочей области: echo "myenv = $myenv" > tmp.myenv
- Ввод после каждого изменения: использовать envinject для чтения среды из файла tmp.myenv → myenv теперь известен как часть среды задания.
Ответ 4
Jenkins позволяет вам вводить переменные среды в процесс сборки. Возможно, все, что вам нужно сделать, - это ввести время начала и окончания времени в качестве переменных окружения и получить доступ к ним по шагам сборки.
![enter image description here]()
Ответ 5
Один из способов работы с переменными Jenkins - использовать jenkins-cli.jar
на этапе построения, он требует некоторой работы, но это добавит FOO=1
в список параметров, так как он работает на этапе сборки, он знает, какую сборку установить параметр для.
java -jar ${JENKINS_HOME}/war/WEB-INF/jenkins-cli.jar -s ${JENKINS_URL} set-build-parameter FOO 1
Ответ 6
Ничего:
- Строковый параметр параметризованной сборки
- предварительная сборка переменных среды Inject для процесса сборки
- встроенный шаг. Инъекционные переменные среды.
работает (с версии 1.656). Конечно, вы можете читать каждый из них, но новые значения, назначенные им, недоступны на последующих этапах сборки.
Следовательно, ответ JediMasterCoder и обработка через файл, такой как Destroyica, являются единственными параметрами до сих пор.
Ответ 7
Решение @Gurubaran работает для меня, вам нужно установить плагин " Environment Injector " в jenkins, затем
Шаг 1: используйте shell/powershell/windows batch/и т.д. создать сгенерированный файл свойств (ключ = значение). например: путь к файлу - $ WORKSPACE/env.properties.
Шаг 2. Добавьте компонент "Внедрить переменные среды" и установите для "Свойства путь к файлу" значение $ WORKSPACE/env.properties
После шага 2: Вы можете использовать эти переменные среды в следующих шагах.
Пример:
![Example]()
Ответ 8
В дополнение к тому, что предложил @Gurubaran (это то, что я сделал бы, если бы не было другого варианта), я бы просто решил присоединиться к шагам сборки к одному, что значительно упростит эту потребность.
Вам нужно будет заботиться о логике обработки ошибок и условиях выхода, но ваша среда будет твердой!
Надеюсь, это поможет.