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

180

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

AOEU=$(echo aoeu)

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

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

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

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

Плагин EnvInject имеет серьезную уязвимость безопасности. Теперь Дженкинс имеет встроенную поддержку для этогоstackoverflow.com/a/53430757/1753177 lambodar

Ваш Ответ

13   ответов
181

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

  1. Create an "Execute shell" build step that runs:

    echo AOEU=$(echo aoeu) > propsfile
    
  2. Create an Inject environment variables build step and set "Properties File Path" to propsfile.

Note: Этот плагин (в основном) не совместим с плагином Pipeline.

Error: User Rate Limit Exceededecho 'AOEU=' > propsfileError: User Rate Limit Exceededecho `echo aoeu` > propsfileError: User Rate Limit ExceededAOEU=aoeu).
Error: User Rate Limit Exceeded November Yankee
Error: User Rate Limit Exceeded
Error: User Rate Limit Exceeded
Error: User Rate Limit ExceededshError: User Rate Limit Exceeded
-1

Мы используем заводной файл работы:

description('')
steps {
    environmentVariables {
        envs(PUPPETEER_SKIP_CHROMIUM_DOWNLOAD: true)
    }
}
0

В моем случае я настроил переменные окружения, используя следующую опцию, и это сработало:

Manage Jenkins -> Configure System -> Global Properties -> Environment Variables -> Add
Error: User Rate Limit Exceeded
10

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

stages {
        stage('Build') {
            environment { 
                    AOEU= sh (returnStdout: true, script: 'echo aoeu').trim()
                }
            steps {
                sh 'env'
                sh 'echo $AOEU'
            }
        }
    }
Error: User Rate Limit Exceeded
Error: User Rate Limit Exceeded
Error: User Rate Limit Exceeded
Error: User Rate Limit ExceededJenkinsfileError: User Rate Limit Exceeded
12

Плагин EnvInject ака (Environment Injector Plugin) предоставляет несколько вариантов установки переменных среды из конфигурации Jenkins.

ВыбравInject environment variables to the build process ты получишь:

  • Properties File Path
  • Properties Content
  • Script File Path

  • Script Content

  • and finally Evaluated Groovy script.


Evaluated Groovy script дает вам возможностьset environment variable based on result of executed command:

  • with execute method:
    return [HOSTNAME_SHELL: 'hostname'.execute().text, 
        DATE_SHELL: 'date'.execute().text,
        ECHO_SHELL: 'echo hello world!'.execute().text
    ]
  • or with explicit Groovy code:
    return [HOSTNAME_GROOVY: java.net.InetAddress.getLocalHost().getHostName(),
        DATE_GROOVY: new Date()
    ] 

(Более подробную информацию о каждом методе можно найти во встроенной справке (?))


К сожалению, вы не можете сделать то же самое изScript Content как говорится:

Execute a script file aimed at setting an environment such as creating folders, copying files, and so on. Give the script file content. You can use the above properties variables. However, adding or overriding environment variables in the script doesn't have any impacts in the build job.

89

The simplest way

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

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

How you know it's working

EnvInject - Variables injected successfully

Error: User Rate Limit Exceeded November Yankee
Error: User Rate Limit Exceeded
Error: User Rate Limit Exceededkey=valueError: User Rate Limit Exceededcat app/build.gradle | grep "def majorVersion" | python -c 'import sys,re,os; print("VERSION_NUMBER="+re.findall(r"[\d+\.]+", sys.stdin.read())[0]+os.environ["BUILD_NUMBER"])'
Error: User Rate Limit ExceededBUILD_DATE=date "+%Y-%m-%d-%H_%M_%S"Error: User Rate Limit ExceededBUILD_DATE=$(date "+%Y-%m-%d-%H_%M_%S")Error: User Rate Limit ExceededBUILD_DATE=`date "+%Y-%m-%d-%H_%M_%S"`Error: User Rate Limit Exceeded
Error: User Rate Limit Exceededwiki.jenkins-ci.org/display/JENKINS/Environment+Script+PluginError: User Rate Limit Exceededstackoverflow.com/a/38286383/1240268
0

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

Я успешно установил глобальные переменные env, используя jenkinsconfig.xml в/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>
0

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

Step-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

Step-2

Под & quot;Add Build Step& Quot; в раскрывающемся списке выберите & quot;Inject environment variable& Quot;

enter image description here

enter image description here

Step:3

Введите полное имя файла, который вы создали ранее (<some_name>.properties) вProperties File Path поле.

enter image description here

Step-4

Теперь он доступен как переменная среды Jenkins, и вы можете использовать его по мере необходимости в Post-build-Action.$variable_name1 как и любая другая переменная окружения.

Вот хороший пост об этом

Error: User Rate Limit Exceededplugins.jenkins.io/envinject
Error: User Rate Limit Exceeded
Error: User Rate Limit Exceeded
43

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

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

Error: User Rate Limit Exceeded
Error: User Rate Limit Exceededgit /path/to/my/gitError: User Rate Limit ExceededPATH+git /path/to/my/gitError: User Rate Limit ExceededgitError: User Rate Limit ExceededJenkins pipeline scriptError: User Rate Limit Exceeded/bin/sh: git: command not found.
Error: User Rate Limit Exceeded
7

Ты можешь использоватьПлагин окружения установить переменные среды в Jenkins на уровне работы и узла. Ниже я покажу, как установить их на уровне работы.

  1. From the Jenkins web interface, go to Manage Jenkins > Manage Plugins and install the plugin.

Environment Injector Plugin

  1. Go to your job Configure screen
  2. Find Add build step in Build section and select Inject environment variables
  3. Set the desired environment variable as VARIABLE_NAME=VALUE pattern. In my case, I changed value of USERPROFILE variable

enter image description here

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

8

ЕстьПостроить плагин Env Propagator который позволяет добавлять новые переменные среды сборки, например,

Jenkins Build - Propagate build environment variables

Any successive Propagate build environment variables step will override previously defined environment variable values.

Error: User Rate Limit Exceeded
5

Обычно вы можете настроитьEnvironment variables вGlobal properties вConfigure System.

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

  1. Log-in as Jenkins: sudo su - jenkins or sudo su - jenkins -s /bin/bash
  2. Create a shell script, e.g.:

    echo 'export VM_NAME="$JOB_NAME"' > ~/load_env.sh
    echo "export AOEU=$(echo aoeu)" >> ~/load_env.sh
    chmod 750 ~/load_env.sh
    
  3. In Jenkins Build (Execute shell), invoke the script and its variables before anything else, e.g.

    source ~/load_env.sh
    
Error: User Rate Limit Exceededsu -lError: User Rate Limit Exceeded
Error: User Rate Limit Exceededsudo su - jenkinsError: User Rate Limit Exceededecho $USERError: User Rate Limit Exceededroot.
3

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

Jenkins Build - Regular job - Build Environment

и в вашем сценарии вы можете напечатать, например,FOO=bar на стандартный вывод, чтобы установить эту переменную.

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

echo PATH+unique_identifier=/usr/local/bin

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

Похожие вопросы