Как установить переменные среды в Jenkins?
Я хотел бы иметь возможность сделать что-то вроде:
AOEU=$(echo aoeu)
и Дженкинс установил AOEU=aoeu
.
Раздел "Переменные среды" в Jenkins этого не делает. Вместо этого он устанавливает AOEU='$(echo aoeu)'
.
Как я могу заставить Дженкинса оценить команду оболочки и назначить вывод переменной среды?
В конце концов, я хочу иметь возможность назначить исполнителя задания переменной среды, которая может быть передана или использована другими скриптами.
Ответы
Ответ 1
Это можно сделать с помощью EnvInject-плагина следующим образом:
-
Создайте шаг выполнения "Выполнение оболочки":
echo AOEU=$(echo aoeu) > propsfile
-
Создайте шаг построения переменных среды propsfile
и установите "Путь к propsfile
свойств" в propsfile
.
Примечание. Этот плагин (в основном) несовместим с плагином Pipeline.
Ответ 2
Самый простой способ
Вы можете использовать EnvInject plugin для ввода переменных среды при запуске сборки. Например:
![Add key=value (bash OK!) under 'Build Environment'->'Inject environment variables to the build process' -> 'Properties Content']()
Как вы знаете, что это работает
![EnvInject - Variables injected successfully]()
Ответ 3
В моем случае мне нужно было добавить переменную среды JMETER_HOME
, которая будет доступна через мои скрипты сборки Ant для всех проектов на моем сервере Jenkins (Linux), таким образом, чтобы это не мешало моей локальной среде сборки (Windows и Mac) в build.xml
script. Настройка переменной среды через Управление Jenkins - Configure System - глобальные свойства - самый простой и наименее навязчивый способ выполнить это. Плагины не нужны.
![Управление глобальными свойствами Jenkins]()
Затем переменная среды доступна в Ant через:
<property environment="env" />
<property name="jmeter.home" value="${env.JMETER_HOME}" />
Это можно проверить, добавив:
<echo message="JMeter Home: ${jmeter.home}"/>
Что производит:
JMeter Home: ~/.jmeter
Ответ 4
Вы можете попробовать что-то вроде этого
stages {
stage('Build') {
environment {
AOEU= sh (returnStdout: true, script: 'echo aoeu').trim()
}
steps {
sh 'env'
sh 'echo $AOEU'
}
}
}
Ответ 5
EnvInject Plugin aka (Plug Injector Plugin) предоставляет несколько опций для установки переменных среды из конфигурации Jenkins.
Выбрав Inject environment variables to the build process
, вы получите:
Evaluated Groovy script
дает возможность устанавливать переменную среды на основе результата выполненной команды:
- с помощью метода
execute
:
return [HOSTNAME_SHELL: 'hostname'.execute().text,
DATE_SHELL: 'date'.execute().text,
ECHO_SHELL: 'echo hello world!'.execute().text
]
- или с явным кодом
Groovy
:
return [HOSTNAME_GROOVY: java.net.InetAddress.getLocalHost().getHostName(),
DATE_GROOVY: new Date()
]
(Более подробную информацию о каждом методе можно найти в справке (?))
К сожалению, вы не можете сделать то же самое из Script Content
, как он заявляет:
Выполнить файл script, предназначенный для установки среды, такой как создание папки, копирование файлов и т.д. Дайте содержимое файла script. Вы могут использовать указанные выше свойства. Однако добавление или переопределение переменные среды в script не оказывают никакого воздействия в строить работу.
Ответ 6
Вы можете использовать Плагин инжектора среды для установки переменных среды в Jenkins на уровне работы и узла. Ниже я покажу, как установить их на уровне работы.
- В веб-интерфейсе Jenkins перейдите на
Manage Jenkins > Manage Plugins
и установите плагин.
![Environment Injector Plugin]()
- Перейти на работу
Configure
экран
- Найдите
Add build step
в разделе Build
и выберите Inject environment variables
- Установите желаемую переменную среды как VARIABLE_NAME = VALUE шаблон. В моем случае я изменил значение переменной USERPROFILE
![enter image description here]()
Если вам необходимо определить новую переменную среды в зависимости от некоторых условий (например, параметров задания), вы можете обратиться к этому ответу.
Ответ 7
Существует плагин Build Env Propagator, который позволяет добавлять новые переменные среды сборки, например
![Jenkins Build - Propagate build environment variables]()
Любой последовательный шаг переменных среды сборки Propagate переопределяет ранее определенные значения переменных среды.
Ответ 8
Обычно вы можете настраивать переменные среды в глобальных свойствах в Configure System.
Однако для динамических переменных с заменой оболочки вы можете создать файл сценария в директории Jenkins HOME и выполнить его во время сборки. Требуется доступ к SSH. Например.
- Вход в систему как Jenkins:
sudo su - jenkins
или sudo su - jenkins -s/bin/bash
-
Создайте сценарий оболочки, например:
echo 'export VM_NAME="$JOB_NAME"' > ~/load_env.sh
echo "export AOEU=$(echo aoeu)" >> ~/load_env.sh
chmod 750 ~/load_env.sh
-
В Jenkins Build (Execute shell) вызывать скрипт и его переменные перед чем-либо еще, например
source ~/load_env.sh
Ответ 9
Попробуйте плагин среды сценариев (GitHub), который очень похож на EnvInject. Он позволяет запускать скрипт перед сборкой (после проверки SCM), который генерирует для него переменные среды. Например
![Jenkins Build - Regular job - Build Environment]()
и в вашем скрипте вы можете напечатать, например, FOO=bar
для стандартного вывода, чтобы установить эту переменную.
Пример добавления существующей PATH
-style:
echo PATH+unique_identifier=/usr/local/bin
Таким образом, вы можете делать все, что вам нужно, в скрипте - либо cat
, либо запустить скрипт на каком-то другом языке из вашего исходного дерева проектов, и т.д.
Ответ 10
В моем случае я настроил переменные среды, используя следующую опцию, и она worked-
Manage Jenkins -> Configure System -> Global Properties -> Environment Variables -> Add
Ответ 11
Это фрагмент для хранения переменной среды и доступа к ней.
node {
withEnv(["ENABLE_TESTS=true", "DISABLE_SQL=false"]) {
stage('Select Jenkinsfile') {
echo "Enable test?: ${env.DEVOPS_SKIP_TESTS}
customStep script: this
}
}
}
Примечание. Значение переменной среды указывается в виде строки. Если вы хотите использовать его как логическое значение, то вам нужно проанализировать его с помощью Boolean.parse(env.DISABLE_SQL).
Ответ 12
По какой-то причине sudo su - jenkins
не записывает меня в jenkins
пользователь, я использовал другой подход.
Я успешно установил глобальные переменные env, используя jenkins config.xml
at /var/lib/jenkins/config.xml
(установленный в Linux/RHEL) - без использования внешних плагинов.
Мне просто пришлось остановить jenkins add, затем добавить globalNodeProperties
, а затем перезапустить.
Например, я определяю переменные APPLICATION_ENVIRONMENT
и SPRING_PROFILES_ACTIVE
to continious_integration
ниже,
<?xml version='1.0' encoding='UTF-8'?>
<hudson>
<globalNodeProperties>
<hudson.slaves.EnvironmentVariablesNodeProperty>
<envVars serialization="custom">
<unserializable-parents/>
<tree-map>
<default>
<comparator class="hudson.util.CaseInsensitiveComparator"/>
</default>
<int>2</int>
<string>APPLICATION_ENVIRONMENT</string>
<string>continious_integration</string>
<string>SPRING_PROFILES_ACTIVE</string>
<string>continious_integration</string>
</tree-map>
</envVars>
</hudson.slaves.EnvironmentVariablesNodeProperty>
</globalNodeProperties>
</hudson>
Ответ 13
Дженкин имеет встроенную поддержку для этого, используя которую вы можете получить доступ к значению локальных переменных в качестве глобальных переменных среды. Вы можете достичь этого, выполнив 4 простых шага.
Шаг 1
![enter image description here]()
............................
rm -f <some_name>.properties
touch <Some_name>.properties
............................
#pass the variable name you want to access as an env variable
echo variable_name1=$some_value1 >> <some_name>.properties
echo variable_name2=$some_value2 >> <some_name>.properties
............................
echo variable_name3=$some_value3 >> <some_name>.properties
Шаг 2
В раскрывающемся списке "Добавить шаг сборки" выберите "Вставить переменную среды"
![enter image description here]()
![enter image description here]()
Шаг 3
Введите полное имя файла, которое вы создали ранее (<some_name>.properties
), в поле Свойства пути к файлу.
![enter image description here]()
Шаг 4
Теперь он доступен как переменная среды Jenkins, и вы можете использовать его по мере необходимости в Post-build-Action. $ variable_name1, как и любая другая переменная окружения.
Вот хороший пост об этом
Ответ 14
Мы используем массивный файл задания:
description('')
steps {
environmentVariables {
envs(PUPPETEER_SKIP_CHROMIUM_DOWNLOAD: true)
}
}