Подтвердить что ты не робот

Передача данных между этапами сборки в Jenkins

Я хотел бы сделать что-то вроде:

Это слишком просто и просто демонстрирует, что я хотел бы сделать. В принципе, я хочу иметь возможность хранить и получать доступ к переменным в пределах одной области работы между несколькими шагами сборки. Кроме того, я могу обойтись, сохранив данные в файле и прочитав их позже, но мне бы хотелось, чтобы что-то было проще и менее "взломанным"

Шаг сборки # 1 - Выполнить оболочку

$START=timestamp

Шаг сборки # 2 - Запустите другое задание

Шаг сборки №3 - Выполнить оболочку

$END=timestamp
TIME_LAPSED=$END-$START
(post lapsed time somewhere)
4b9b3361

Ответ 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 (это то, что я сделал бы, если бы не было другого варианта), я бы просто решил присоединиться к шагам сборки к одному, что значительно упростит эту потребность. Вам нужно будет заботиться о логике обработки ошибок и условиях выхода, но ваша среда будет твердой!

Надеюсь, это поможет.