Змінні середовища Дженкінса / Хадсона


101

Я запускаю Дженкінса від користувача, jenkinsякий $PATHщось встановив, і коли я заходжу у веб-інтерфейс Дженкінса, у вікні Властивості системи ( http://$host/systemInfo) я бачу інше $PATH.

Я встановив Дженкінс на Centos з рідною об / хв від веб-сайту Jenkins. Я використовую сценарій запуску, наданий при встановленніsudo /etc/init.d/jenkins start

Чи може хто-небудь пояснити мені, чому це відбувається?


1
Якщо ви входите як дженкінси, і echo $PATHчи відповідає це тому, що ви бачите в дженкінах?
Upgradingdave

3
@Dave ні, це не відповідає. не можу зрозуміти, чому
Майкл

8
Причина, що не відповідає, полягає в тому, що коли ви входите як користувач jenkins, ви викликаєте оболонку входу, тоді як jenkins просто виконує / bin / sh -xe {ваш скрипт}, тому він не працює через один і той же набір сценаріїв які змінюють змінну середовища PATH. Насправді, набір скриптів змінюється залежно від конкретного смаку * nix та / або оболонки, який ви встановили. Я протестував на AWS Linux AMI з jenkins, і, на жаль, ніхто з / etc / profile /etc/profile.d/xxx.sh / etc / bashrc / etc / environment ~ / .bash_profile ~ / .profile ~ / .bashrc не зміг. впливати на ПАТ перейшов до / bin / sh
Лука

Відповіді:


141

Майкл,

Дві речі:

Коли Дженкінс підключається до комп'ютера, він переходить до shоболонки, а не до bashоболонки (принаймні, це те, що я помітив - я можу помилятися). Тому будь-які зміни, внесені до $ PATH у вашому файлі bashrc, не враховуються.

Крім того, будь-які зміни, які ви внесете до $ PATH у вашій локальній оболонці (ту, до якої ви особисто входите), не з'являться у Дженкінсі.

Щоб змінити шлях, який використовує Дженкінс, у вас є два варіанти (AFAIK):

1) Відредагуйте /etc/profileфайл та додайте потрібні шляхи до нього

2) Перейдіть на сторінку конфігурації вашого підлеглого і додайте змінну середовища PATHіз значенням:$PATH:/followed-by/paths/you/want/to/add

Якщо ви використовуєте другий варіант, ваша системна інформація все одно не відображатиме її, але ваші збірки побачать додані шляхи.


2
Ця відповідь спрацювала для мене, але я помітив, що Дженкінс дуже чутливо ставиться до того, що ви пишете на сторінку конфігурації. Я не міг змусити його працювати з доріжками з пробілами.
miguelSantirso

Так, але коли ви вводите шляхи з пробілами в оболонці UNIX, простір зазвичай виділяється символом ``. Тому, якщо ваш шлях "/ opt / bin / My Folder Name", ви можете спробувати "/ opt / bin / My \ Folder \ Name". Це дозволить уникнути пробілів і дозволить використовувати їх.
Сагар

11
Рішення 2 - це шлях.
gagarine

2
Наступні дії: у моїй системі Ubuntu служба jenkins - це найвища робота, тому я змінював старий сценарій заглушки sysvinit. Неправильне місце. Коли я налаштовую сценарій /etc/init/jenkins.conf і оновлюю PATH перед тим, як він виконує Java, це, здається, працює.
Stabledog

15
Існує невеликий темний куточок: майстер дженкінсів кешує змінні середовища від рабів, щоб виправити налаштування. Отже, якщо ви змінюєте змінні середовища на підлеглому (системі чи користувачеві), вам потрібно перезапустити майстер, щоб оновити конфігурацію ведених.
Thinkeye

36

Я продовжував стикатися з цією проблемою, але тепер просто додаю:

source /etc/profile

Як перший крок у моєму процесі збирання. Тепер усі мої наступні правила завантажуються, щоб Дженкінс працював безперебійно.


6
Так? Детально, будь ласка ... ви додасте де? як? коли? Це працює в Windows?
HX_забавлений

Я припускаю, що ви виконуєте команду shell, як частину вашої збірки. Поставте source /etc/profileяк першу команду в цій збірці> Виконати оболонку> Команда textarea.
Брайан Кеннеді

2
Він працює на Mac, також я знайшов такі шляхи, як /usr/local/binвказано в /etc/paths, і /etc/pathsвикористовується /usr/libexec/path_helper, і в ньому виконується path_helper /etc/profile.
hiroshi

1
ти врятував мені день :)
RameshVel

Sourcing / etc / profile показує шлях при додаванні налагодження 'echo $ PATH' у роботу, але якщо я дивлюсь на змінні середовища для завдання, це не те саме.
Ілля Лінн

23

Ви також можете редагувати /etc/sysconfig/jenkinsфайл, щоб вносити будь-які зміни в змінні середовища і т. Д. Я просто додав source /etc/profileдо кінця файлу. /etc/profileмає всі належні PATHналаштування змінних. Коли ви це зробите, переконайтеся, що перезапустіть Дженкінса

/etc/init.d/jenkins restart

Ми запускаємо ZendServer CE, який встановлює грушу, фінг тощо в інший шлях, тому це було корисно. Крім того, ми не отримуємо LD_LIBRARY_PATHпомилок, які ми отримували з клієнтом Oracle та Jenkins.


Це ключовий коментар, або перезавантажте jenkins з {jenkins-url} / restart або {jenkins-url} / safeRestart. Я стукав головою про те, чому зміни шляху не були підібрані, відредагувавши навіть / etc / Environment на хості ubuntu - RESTART це виправить, як підтверджено {jenkins-url} / systemInfo
kert

Всі інші провалилися, це єдине, що працювало! Я хотів би, щоб це було більш поширеним, щоб я не витрачав даремно останні години!
Бред Бонкоскі

15

Я намагався /etc/profile, ~/.profileі ~/.bash_profileніхто з них не працював. Я виявив, що редагування ~/.bashrcоблікового запису рабовласницьких дженкінів.


3
це тому, що оболонка без входу не читає ні /etc/profileані~/.profile
Вінченцо,

9

Інформація щодо цієї відповіді застаріла. Вам потрібно перейти до Налаштувати Дженкінс> І тоді ви можете натиснути, щоб додати туди пару ключових значень змінної середовища.

наприклад: export MYVAR=testбув би MYVARключовим, і testце значення.


5

У моєму новому екземплярі EC2, просто додавши нове значення до PATH користувача .profile користувача Jenkins, а потім перезапустити tomcat працював на мене.

У старшому екземплярі, де конфігурація відрізняється, єдине, що працювало (використання .profile, .bash * не працювало) з використанням відповіді №2 від відповіді Сагара .


4

Я знайшов для цього два плагіни. Один завантажує значення з файлу, а інший дозволяє налаштувати значення на екрані конфігурації завдання.

Envfile Plugin - Цей плагін дозволяє встановлювати змінні середовища через файл. Формат файлу повинен бути стандартним форматом файлу властивостей Java.

EnvInject Plugin - Цей плагін дає змогу додавати змінні середовища та виконувати сценарій налаштування, щоб створити середовище для роботи.


4

Чи не могли ви просто додати його як змінну середовища в налаштуваннях Дженкінса:

Управління Jenkins -> Глобальні властивості> Змінні середовища: А потім натисніть "Додати", щоб додати властивість PATH та її значення до того, що вам потрібно.


1
Здається, що "Управління Дженкінсом -> Налаштування системи -> Змінні середовища" у версії 1.620.
akaihola

4

Ось як я вирішив цю набридливу проблему:

Я змінив PATHзмінну, як запропонував @sagar у своєму другому варіанті, але все ж отримав інше PATHзначення, ніж я очікував.

Врешті я дізнався, що саме EnvInjectплагін замінив мій PATHзмінний!

Тому я міг або видалити EnvInjectабо просто використовувати його для введення змінної PATH.

Оскільки у багатьох наших роботах з Дженкінсом використовується цей плагін, я не хотів його видаляти ...

Тому я створив файл: environment_variables.propertiesпід домашнім каталогом Дженкінса.

Цей файл містив значення середовища шляху , що мені потрібно: PATH=$PATH:/usr/local/git/bin/.

У веб - інтерфейсі Дженкінс: Manage Jenkins -> Configure System. У цьому вікні - я галочка Prepare jobs environmentопції, і в Properties File Pathполе я увійшов шлях до мого файлу: /var/lib/jenkins/environment_variables.properties.

Таким чином, кожне завдання, яке ми отримуємо від Дженкінса, отримує всі змінні, які я вклав у цей environment_variables.propertiesфайл.


1
Це має бути правильна відповідь. Як зазначено, оновлення / etc / profile не є прийнятним рішенням для OSX, оскільки файл лише для читання і вимагає возитися з правами. Це рішення видається найчистішим і використовує вже наявні плагіни на Jenkins. Не забудьте перезапустити jenkins, коли ви створите свій файл властивостей і встановите його на Jenkins
Voke Ransom Anighoro

3

Дженкінс також підтримує формат, PATH+<name>щоб додати до будь-якої змінної, не тільки PATH:

Глобальні змінні середовища або вузли змінних середовища:

Змінна Дженкінса + позначення

Це також підтримується на етапі конвеєра withEnv:

node {
  withEnv(['PATH+JAVA=/path/to/java/bin']) {
    ...
  }
}

Просто візьміть на замітку, вона передує змінній. Якщо його потрібно додати, потрібно зробити те, що показують інші відповіді.

Дивіться документ про етапи трубопроводу тут .

Ви також можете використовувати синтаксис PATH + WHATEVER = / щось додати / щось до $ PATH

Або документи Java на EnvVars тут .


2

Я просунувся в цьому питанні лише після "/etc/init.d/jenkins принудительного перезавантаження". Я рекомендую спробувати це перед чим-небудь іншим, і використовувати це, а не перезавантажувати.


1
А де ви насправді додали елемент PATH? Я пробував кожне місце, яке можу собі уявити.
Stabledog

2

На моєму Ubuntu 13.04 я спробував досить багато виправлень, перш ніж досягти успіху в цьому:

  1. Редагувати /etc/init/jenkins.conf
  2. Знайдіть місце, де починається "виконувати запуску-зупинку-сервер ..."
  3. Вставте оновлення середовища безпосередньо перед цим, тобто

експортувати PATH = $ PATH: / деякий / новий / шлях / бін


2

Додайте

/usr/bin/bash

у

Jenkins -> Управління Jenkins -> налаштування системи -> Shell-> оболонка, що виконується

Дженкінс використовує sh, щоб навіть / etc / profile не працював для мене. Коли я додаю це, у мене є всі умови.


Яка версія Дженкінса зробила це для вас @ sumang_87? Не вдалося мені допомогти на Jenkins 2.9
hamx0r

1

Рішення, яке працювало на мене

source ~/.bashrc

Пояснення

Я вперше перевірив, що Дженкінс працює під керівництвом BASH, echo $SHELLі echo $BASH(зауважте, я чітко розміщую #!/bin/bashповерх textarea в Дженкінсі, я не впевнений, чи це вимога отримати BASH). sourceЯкщо /etc/profileінші запропонували, це не працює.

Подивившись, /etc/profileя знайшов

if [ "$PS1" ]; then
...

і перевіряючи "$ PS1", визнано це недійсним. Я намагався підробляти $PS1безрезультатно, як так

export PS1=1
bash -c 'echo $PATH'

однак це не призвело до бажаного результату (додайте решту, що $PATHя очікую побачити). Але якщо я скажу Башу бути інтерактивним

export PS1=1
bash -ci 'echo $PATH'

$PATHбув змінений , як я очікував.

Я намагався розібратися, як правильно підробити інтерактивну оболонку для /etc/bash.bashrcзавантаження, однак, виявляється, все, що мені було потрібно, було знищено ~/.bashrc, тому просто sourceвирішивши проблему.


Обов’язково використовуйте #!/bin/bash -elдля того, щоб повідомити bash для запуску як оболонки для входу. Це повинно викликати bash для отримання необхідних .rc файлів
Брендон

1

Я спробував все, що було зверху - не вийшло для мене.

Я знайшов два рішення (обидва для SSH-Slave)

  1. Перейдіть до налаштованих пристроїв

  2. Додайте нову змінну середовища

  3. ПАТ
  4. $ {PATH}: $ {HOME} /. Pub-cache / bin: $ {HOME} /. Local / bin

Важлива частина "$ {HOME}". Це робить додатковий PATH абсолютним. Відносний шлях для мене не спрацював.

Варіант II (сценарій конвеєра)

pipeline {
    agent {
        label 'your-slave'
    }
    environment {
        PATH = "/home/jenkins/.pub-cache/bin:$PATH"
    }
    stages {
        stage('Test') {
            steps {
                ansiColor('xterm') {
                    echo "PATH is: $PATH"
                }
            }
        }
    }
}

0

У Ubuntu я просто редагую / etc / default / jenkins і додаю джерело / etc / profile наприкінці, і це працює на мене.


0

Запуск команди з набором змінної середовища також ефективний. Звичайно, ви повинні робити це для кожної команди, яку ви запускаєте, але у вас, ймовірно, є сценарій завдання, тому ви, мабуть, маєте лише одну команду на збірку. Мій сценарій завдання - це сценарій python, який використовує середовище, щоб вирішити, який python використовувати, тому мені все одно потрібно було поставити /usr/local/bin/python2.7 на своєму шляху:

PATH=/usr/local/bin <my-command>

0

Те, що працювало для мене, було переважати середовище PATH для раба.

Set:   PATH 
To:    $PATH:/usr/local/bin

Потім відключення і підключення до раба.

Незважаючи на те, що системна інформація показувала, вона працювала.


0

У мене Jenkins 1.639 встановлений на SLES 11 SP3 через zypper (менеджер пакунків). Установка конфігурувала дженкіни як послугу

 # service jenkins
 Usage: /etc/init.d/jenkins {start|stop|status|try-restart|restart|force-reload|reload|probe}

Хоча /etc/init.d/jenkinsджерела /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

Те, як мені вдалося встановити навколишнє середовище для процесу дженкінса, є .bashrcв його домашньому каталозі - /var/lib/jenkins. Мені довелося творити так, /var/lib/jenkins/.bashrcяк його раніше не було.


0

Ось що я зробив на 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 трохи вище неінтерактивної перевірки.

Спочатку це не спрацювало, але потім я відключив підлеглий і повторно підключив його, щоб він знову завантажував змінні. Вам не потрібно перезапускати цілі дженкіни, якщо ви змінюєте ведені змінні. просто відключіть і знову підключіться.


-1

1- додайте у свій файл ".bash_profile" вашого профілю

він знаходиться в папці "/ home / your_user /"

vi .bash_profile

додати:

export JENKINS_HOME=/apps/data/jenkins  
export PATH=$PATH:$JENKINS_HOME

==> це робоча область e jenkins

2- Якщо ви використовуєте jetty: перейдіть до файлу jenkins.xml

і додати:

<Arg>/apps/data/jenkins</Arg>
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.