Переменные среды Jenkins/Hudson
Я запускаю Jenkins от пользователя jenkins
, у которого $PATH
установлен что-то, и когда я перехожу в веб-интерфейс Jenkins, в окне "Свойства системы" (http://$host/systemInfo
) я вижу другой $PATH
.
Я установил Jenkins на Centos с родным rpm с сайта Jenkins. Я использую запуск script с установкой с помощью sudo /etc/init.d/jenkins start
Может кто-нибудь объяснить мне, почему это происходит?
Ответы
Ответ 1
Майкл
Две вещи:
Когда Дженкинс подключается к компьютеру, он переходит в оболочку sh
, а не в оболочку bash
(по крайней мере, это то, что я заметил - я могу ошибаться). Поэтому любые изменения, внесенные вами в $PATH в вашем файле bashrc, не рассматриваются.
Кроме того, любые изменения, внесенные вами в $PATH в вашей локальной оболочке (тот, который вы лично ssh в) не будет отображаться в Jenkins.
Чтобы изменить путь, используемый Дженкинсом, у вас есть два варианта (AFAIK):
1) Отредактируйте свой /etc/profile
файл и добавьте пути, которые вы хотите там
2) Перейдите на страницу конфигурации вашего подчиненного устройства и добавьте переменную среды PATH
со значением: $PATH:/followed-by/paths/you/want/to/add
Если вы используете второй вариант, ваша системная информация все равно не покажет его, но ваши сборки будут видеть добавленные пути.
Ответ 2
Я продолжал сталкиваться с этой проблемой, но теперь я просто добавляю:
source /etc/profile
Как первый шаг в моем процессе сборки. Теперь все мои последующие правила загружаются, чтобы Дженкинс работал плавно.
Ответ 3
Вы также можете отредактировать файл /etc/sysconfig/jenkins
, чтобы внести какие-либо изменения в переменные среды и т.д. Я просто добавил source /etc/profile
в конец файла. /etc/profile
имеет все необходимые настройки PATH
. Когда вы это сделаете, убедитесь, что вы перезапустите Jenkins
/etc/init.d/jenkins restart
Мы запускаем ZendServer CE, который устанавливает грушу, phing и т.д. на другой путь, поэтому это было полезно. Кроме того, мы не получаем ошибки LD_LIBRARY_PATH
, которые мы использовали для клиента Oracle и Jenkins.
Ответ 4
Я пробовал /etc/profile
, ~/.profile
и ~/.bash_profile
, и никто из них не работал. Я обнаружил, что редактирование ~/.bashrc
для подчиненной учетной записи jenkins.
Ответ 5
Информация об этом ответе устарела. Вам нужно перейти в Configure Jenkins > Затем вы можете щелкнуть, чтобы добавить пару-ключ-значение переменной Variable.
например: export MYVAR=test
будет MYVAR
является ключом, а test
- значением.
Ответ 6
В моем новом экземпляре EC2 просто добавив новое значение пользователю Jenkins.profile PATH, а затем перезагрузив tomcat, работал у меня.
В более старом экземпляре, где конфигурация отличается, использование # 2 из ответ Сагара - единственное, что сработало (то есть .profile,.bash * не работает).
Ответ 7
Я нашел для этого два плагина.
Один загружает значения из файла, а другой позволяет вам настроить значения на экране конфигурации задания.
Envfile Plugin - этот плагин позволяет вам устанавливать переменные среды через файл. Формат файла должен быть стандартным форматом файла свойств Java.
EnvInject Plugin - этот плагин позволяет добавлять переменные среды и выполнять настройку script, чтобы настроить среду для Работа.
Ответ 8
Не могли бы вы просто добавить его как переменную окружения в настройках Дженкинса:
Управление Jenkins → Глобальные свойствa > Переменные среды:
Затем нажмите "Добавить", чтобы добавить свойство PATH и его значение в нужное вам значение.
Ответ 9
Вот как я решил эту неприятную проблему:
Я изменил переменную PATH
как @sagar, предложенную в его втором варианте, но все же я получил другое значение PATH
, чем я ожидал.
В конце концов я узнал, что это плагин EnvInject
, который заменил мою переменную PATH
!
Поэтому я мог бы либо удалить EnvInject
, либо просто использовать его для вставки переменной PATH.
Как многие из наших заданий Jenkins используют этот плагин, я не хотел его удалять...
Итак, я создал файл: environment_variables.properties
в моем домашнем каталоге Jenkins.
Этот файл содержит значение среды пути, которое мне нужно:
PATH=$PATH:/usr/local/git/bin/
.
Из веб-интерфейса Jenkins: Manage Jenkins -> Configure System
.
На этом экране я отметил параметр Prepare jobs environment
, а в поле Properties File Path
я ввел путь к моему файлу: /var/lib/jenkins/environment_variables.properties
.
Таким образом, каждое задание Дженкинса мы получаем любые переменные, которые я помещаю в этот environment_variables.properties
файл.
Ответ 10
Jenkins также поддерживает формат PATH+<name>
для добавления к любой переменной, а не только к PATH:
Глобальные переменные среды или переменные среды узла:
![Jenkins variable + notation]()
Это также поддерживается на этапе конвейера withEnv
:
node {
withEnv(['PATH+JAVA=/path/to/java/bin']) {
...
}
}
Просто примите к сведению, это зависит от переменной. Если он должен быть добавлен, вам нужно сделать то, что показывают другие ответы.
См. документ по шагам конвейера здесь.
Вы также можете использовать синтаксис PATH + WHATEVER =/что-то, чтобы добавить/что-то к $ PATH
Или документы по Java на EnvVars здесь.
Ответ 11
У меня был только прогресс в этом вопросе после "/etc/init.d/jenkins force-reload". Я рекомендую попробовать это раньше всего и использовать это, а не перезагружать.
Ответ 12
На моем Ubuntu 13.04 я попробовал несколько настроек, прежде чем преуспеть в этом:
- Изменить /etc/init/jenkins.conf
- Найдите место, где начинается "exec start-stop-server..."
- Вставьте обновление среды непосредственно перед этим, т.е.
export PATH = $PATH:/some/new/путь/bin
Ответ 13
Решение, которое сработало для меня
source ~/.bashrc
Описание
Сначала я проверил, что Jenkins запускал BASH, с echo $SHELL
и echo $BASH
(обратите внимание, что я явно помещаю #!/bin/bash
поверх текстового поля в Jenkins, я не уверен, что это требование получить BASH). source
ing /etc/profile
, как предложили другие, не работал.
Глядя на /etc/profile
, я нашел
if [ "$PS1" ]; then
...
и проверка "$ PS1" нашла его нулевым. Я попытался подделать $PS1
безрезультатно.
export PS1=1
bash -c 'echo $PATH'
однако это не дало желаемого результата (добавьте оставшуюся часть $PATH
, которую я ожидаю увидеть). Но если я скажу bash быть интерактивным
export PS1=1
bash -ci 'echo $PATH'
$PATH
был изменен, как я ожидал.
Я пытался выяснить, как правильно обманывать интерактивную оболочку, чтобы загрузить /etc/bash.bashrc
, однако оказалось, что все, что мне нужно, было в ~/.bashrc
, поэтому просто source
он решил проблему.
Ответ 14
Добавить
/usr/bin/bash
at
Jenkins → Управление Jenkins → настроить систему → Shell- > Shell Исполняемый
Дженкинс использует sh, так что даже /etc/profile не работает для меня
Когда я добавляю это, у меня есть все env.
Ответ 15
Я пробовал все вещи сверху - не работал у меня.
Я нашел два решения (как для SSH-Slave)
Важная часть "$ {HOME}". Это делает дополнительный PATH абсолютным.
Относительный путь не работал у меня.
Вариант II (трубопровод script)
pipeline {
agent {
label 'your-slave'
}
environment {
PATH = "/home/jenkins/.pub-cache/bin:$PATH"
}
stages {
stage('Test') {
steps {
ansiColor('xterm') {
echo "PATH is: $PATH"
}
}
}
}
}
Ответ 16
В Ubuntu я просто редактирую /etc/default/jenkins и добавляю источник /etc/profile в конце, и он работает со мной.
Ответ 17
Запуск команды с набором переменных среды также эффективен. Конечно, вы должны сделать это для каждой команды, которую вы запускаете, но у вас, вероятно, есть работа script, поэтому у вас, вероятно, есть только одна команда для каждой сборки. Моя работа script - это python script, который использует среду для определения того, какой python использовать, поэтому мне все еще нужно было поставить /usr/local/bin/python 2.7 в свой путь:
PATH=/usr/local/bin <my-command>
Ответ 18
Что работало для меня, было переопределение среды PATH для подчиненного устройства.
Set: PATH
To: $PATH:/usr/local/bin
Затем отключите и снова подключите ведомый.
Несмотря на то, что отображалась системная информация, он работал.
Ответ 19
У меня Jenkins 1.639 установлен на SLES 11 SP3 через zypper (менеджер пакетов).
Установка настроенных jenkins как службы
# service jenkins
Usage: /etc/init.d/jenkins {start|stop|status|try-restart|restart|force-reload|reload|probe}
Хотя /etc/init.d/jenkins
sources /etc/sysconfig/jenkins
, любые установленные переменные env не наследуются процессом jenkins, потому что он запускается в отдельной оболочке входа с новой средой, подобной этой:
startproc -n 0 -s -e -l /var/log/jenkins.rc -p /var/run/jenkins.pid -t 1 /bin/su -l -s /bin/bash -c '/usr/java/default/bin/java -Djava.awt.headless=true -DJENKINS_HOME=/var/lib/jenkins -jar /usr/lib/jenkins/jenkins.war --javaHome=/usr/java/default --logfile=/var/log/jenkins/jenkins.log --webroot=/var/cache/jenkins/war --httpPort=8080 --ajp13Port=8009 --debug=9 --handlerCountMax=100 --handlerCountMaxIdle=20 &' jenkins
Как мне удалось установить env vars для процесса jenkins через .bashrc
в его домашнем каталоге - /var/lib/jenkins
. Я должен был создать /var/lib/jenkins/.bashrc
, которого раньше не было.
Ответ 20
Вот что я сделал на Ubuntu 18.04 LTS с Jenkins 2.176.2
Я создал файл .bash_aliases и добавил туда путь, переменные прокси и т.д.
В начале .bashrc это было определено.
# If not running interactively, don't do anything
case $- in
*i*) ;;
*) return;;
esac
Итак, он проверяет, что если мы запускаем неинтерактивную оболочку, то здесь мы ничего не делаем.
в нижней части .bashrc было включено для .bash_aliases
# Alias definitions.
# You may want to put all your additions into a separate file like
# ~/.bash_aliases, instead of adding them here directly.
# See /usr/share/doc/bash-doc/examples in the bash-doc package.
if [ -f ~/.bash_aliases ]; then
. ~/.bash_aliases
fi
поэтому я переместил загрузку .bash_aliases сначала в .bashrc чуть выше неинтерактивной проверки.
Сначала это не сработало, но потом я отключил slave и снова подключил его, чтобы он снова загружал переменные. Вам не нужно перезапускать целые jenkins, если вы изменяете подчиненные переменные. просто отключите и снова подключите.
Ответ 21
Я работаю с Дженкинс PipeLine, и я использовал это:
environment {
PATH = "/your/path/in/jenkins:$PATH"
}
и это сработало !!!
Благодарю.
Ответ 22
1- добавьте в свой профильный файл файл .bash_profile
он находится в папке "/home/your_user/"
vi.bash_profile
добавить:
export JENKINS_HOME=/apps/data/jenkins
export PATH=$PATH:$JENKINS_HOME
==> это рабочее пространство e jenkins
2- Если вы используете причал:
перейти в файл jenkins.xml
и добавьте:
<Arg>/apps/data/jenkins</Arg>