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



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



AOEU=$(echo aoeu)


и Дженкинс выделяют AOEU=aoeu.



The Переменные Среды раздел в Дженкинсе этого не делает. Вместо этого, он устанавливает AOEU='$(echo aoeu)'.



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



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

1926   10  

10 ответов:

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

  1. создайте шаг сборки "Execute shell", который выполняется:

    echo AOEU=$(echo aoeu) > propsfile
    
  2. создать ввести переменные окружения шаг сборки и установите "путь к файлу свойств" в propsfile.

Примечание: этот плагин (в основном) не совместим с плагином трубопровода.

самый простой способ

можно использовать EnvInject плагин для ввода переменных среды при запуске сборки. Например:

Add key=value (bash OK!) under 'Build Environment'->'Inject environment variables to the build process' -> 'Properties Content'

Как вы знаете, это работает

EnvInject - Variables injected successfully

в моем случае, мне нужно добавить JMETER_HOME переменная окружения будет доступна через мои скрипты сборки Ant во всех проектах на моем сервере Jenkins (Linux), таким образом, чтобы не мешать моей локальной среде сборки (Windows и Mac) в build.xml сценарий. Установка переменной окружения через управление Дженкинс - настройка системы - глобальные свойства был самый простой и наименее навязчивый способ сделать это. Никакие плагины не являются необходимый.

Manage Jenkins Global Properties


переменная окружения затем доступна в Ant через:

<property environment="env" />
<property name="jmeter.home" value="${env.JMETER_HOME}" />

Это можно проверить на работ, добавив:

<echo message="JMeter Home: ${jmeter.home}"/>

что производит:

JMeter Home:~/.jmeter

Плагин EnvInject ака ( Плагин Инжектора Среды) дает вам несколько вариантов для установки переменных среды из конфигурации Дженкинса.

опции 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 как говорится:

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

здесь Build Env Propagator Plugin что позволяет добавлять новые переменные среды сборки, например

Jenkins Build - Propagate build environment variables

любой последовательный шаг распространения переменных среды сборки переопределит ранее определенные значения переменных среды.

вы можете попробовать что-то вроде этого

stages {
        stage('Build') {
            environment { 
                    AOEU= sh (returnStdout: true, script: 'echo aoeu').trim()
                }
            steps {
                sh 'env'
                sh 'echo $AOEU'
            }
        }
    }

можно использовать Окружающая Среда Инжектор Плагин для установки переменных среды в Jenkins на уровне заданий и узлов. Ниже я покажу как это сделать на уровне работы.

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

Environment Injector Plugin

  1. иди на работу Configure
  2. найти Add build step in Build и выберите Inject environment variables
  3. установите нужную переменную окружения в качестве VARIABLE_NAME=value pattern. В моем случае, я изменил значение переменной USERPROFILE

enter image description here

Если вам нужно определить новую переменную среды в зависимости от некоторых условий (например, параметры задания) вы можете обратиться к этой ответ.

обычно вы можете настроить переменные среды на глобальные свойства на Настройка Системы.

однако для динамических переменных с заменой оболочки вы можете создать файл сценария в Jenkins HOME dir и выполнить его во время сборки. Требуется доступ по SSH. Например.

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

    echo 'export VM_NAME="$JOB_NAME"' > ~/load_env.sh
    chmod 750 ~/load_env.sh
    
  3. В Jenkins Построить (выполнить консоли), вызовите скрипт и его переменные прежде всего, например

    source ~/load_env.sh
    

попробовать Плагин Сценария Среды (GitHub), который очень похож на EnvInject. Он позволяет запускать скрипт перед сборкой (после проверки SCM), который генерирует переменные среды для него. Е. Г.

Jenkins Build - Regular job - Build Environment

и в вашем скрипте, вы можете печатать, например,FOO=bar к стандартному выходу для установки этой переменной.

пример для добавления к существующей PATH-стиль переменная:

echo PATH+unique_identifier=/usr/local/bin

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

почему-то sudo su - jenkins не регистрирует меня jenkinsпользователей, Я в конечном итоге использовал другой подход.

мне удалось установить глобальные переменные env с помощью использования jenkins config.xml at /var/lib/jenkins/config.xml (установлен в Linux / RHEL) - без использования внешних плагинов.

Я просто должен был остановить Дженкинса добавить, а затем добавить globalNodeProperties, а затем перезапустить.

пример, я определяю переменные APPLICATION_ENVIRONMENT и SPRING_PROFILES_ACTIVE до 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>

Comments

    Ничего не найдено.