Как установить переменные среды в Jenkins?

Я хотел бы иметь возможность сделать что-то вроде:

AOEU=$(echo aoeu)

и Дженкинс установил AOEU=aoeu.

Раздел "Переменные среды" в Jenkins этого не делает. Вместо этого он устанавливает AOEU='$(echo aoeu)'.

Как я могу заставить Дженкинса оценить команду оболочки и назначить вывод переменной среды?

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

Ответ 1

Это можно сделать с помощью EnvInject-плагина следующим образом:

  1. Создайте шаг выполнения "Выполнение оболочки":

    echo AOEU=$(echo aoeu) > propsfile
    
  2. Создайте шаг построения переменных среды 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, вы получите:

  • Properties File Path
  • Properties Content
  • Script File Path

  • Script Content

  • и, наконец, Evaluated Groovy script.


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 на уровне работы и узла. Ниже я покажу, как установить их на уровне работы.

  1. В веб-интерфейсе Jenkins перейдите на Manage Jenkins > Manage Plugins и установите плагин.

Environment Injector Plugin

  1. Перейти на работу Configure экран
  2. Найдите Add build step в разделе Build и выберите Inject environment variables
  3. Установите желаемую переменную среды как 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. Например.

  1. Вход в систему как Jenkins: sudo su - jenkins или sudo su - jenkins -s/bin/bash
  2. Создайте сценарий оболочки, например:

    echo 'export VM_NAME="$JOB_NAME"' > ~/load_env.sh
    echo "export AOEU=$(echo aoeu)" >> ~/load_env.sh
    chmod 750 ~/load_env.sh
    
  3. В 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)
    }
}