Jenkins / Hudson ortam değişkenleri


101

Ben kullanıcı adlı Jenkins çalıştırıyorum jenkinsthats etti $PATHben de Jenkins web arayüzüne giderken bir şey ayarlanmış ve Sistem Özellikleri (pencerenin http://$host/systemInfoben farklı bakınız) $PATH.

Jenkins web sitesinden yerel rpm ile Centos'a Jenkins yükledim. Kurulumla birlikte sağlanan başlangıç ​​komut dosyasını kullanıyorum.sudo /etc/init.d/jenkins start

Biri bana bunun neden olduğunu açıklayabilir mi?


1
Eğer jenkins olarak oturum echo $PATHaçarsanız ve jenkins'de gördüğünüzle eşleşiyor mu?
Upgradingdave

3
@Dave hayır, eşleşmiyor. neden anlayamıyorum
Michael

8
Eşleşmemesinin nedeni, jenkins kullanıcısı olarak oturum açtığınızda bir oturum açma kabuğunu çağırmanızdır, oysa jenkins aynı komut dosyası kümesini çalıştırmamak için / bin / sh -xe {betiğinizi} çalıştırır. PATH ortam değişkenini değiştirir. Aslında, komut dosyası seti, yüklediğiniz * nix ve / veya kabuğun belirli özelliklerine göre değişiklik gösterir. AWS Linux AMI üzerinde jenkins ile test ettim ve ne yazık ki / etc / profile /etc/profile.d/xxx.sh / etc / bashrc / etc / environment ~ / .bash_profile ~ / .profile ~ / .bashrc'den hiçbiri başaramadı PATH'ı etkilemek için / bin / sh'ye geçti
Luke

Yanıtlar:


141

Michael,

İki şey:

Jenkins bir bilgisayara bağlandığında, shkabuğa gider, kabuğa değil bash(en azından fark ettiğim şey bu - yanılıyor olabilirim). Dolayısıyla, bashrc dosyanızdaki $ PATH üzerinde yaptığınız herhangi bir değişiklik dikkate alınmaz.

Ayrıca, yerel kabuğunuzdaki $ PATH'a yaptığınız herhangi bir değişiklik (kişisel olarak ssh yaptığınız biri) Jenkins'te görünmeyecektir.

Jenkins'in kullandığı yolu değiştirmek için iki seçeneğiniz vardır (AFAIK):

1) /etc/profileDosyanızı düzenleyin ve istediğiniz yolları buraya ekleyin

2) Slave'inizin konfigürasyon sayfasına gidin ve şu PATHdeğerle ortam değişkeni ekleyin :$PATH:/followed-by/paths/you/want/to/add

İkinci seçeneği kullanırsanız, Sistem Bilgileriniz yine de göstermez, ancak yapılarınız eklenen yolları görür.


2
Bu cevap benim için çalıştı, ancak Jenkins'in yapılandırma sayfasına yazdıklarınız konusunda çok hassas olduğunu fark ettim. Boşluklu yollarla çalışmasını sağlayamadım.
miguelSantirso

Evet öyle, ancak bir UNIX kabuğunda boşluklu yollar girdiğinizde, boşluk normalde bir `` karakteriyle önlenir. Bu nedenle, yolunuz "/ opt / bin / My Folder Name" ise, bunun yerine "/ opt / bin / My \ Folder \ Name" 'i deneyebilirsiniz. Bu, boşluklardan kaçacak ve onları kullanmanıza izin verecektir.
Sagar

11
Çözüm 2, gidilecek yoldur.
gagarine

2
Takip: Ubuntu sistemimde, jenkins servisi yeni başlayan bir iştir, bu yüzden eski sysvinit saplama komut dosyasını değiştiriyordum. Yanlış yer. /Etc/init/jenkins.conf betiğini değiştirdiğimde ve PATH'i exec java'sından önce güncellediğimde, bu işe yarıyor gibi görünüyor.
Stabledog

15
Küçük bir karanlık köşe var: Jenkins yöneticisi, özelleştirmeleri yamamak için ortam değişkenlerini ikincil cihazlardan saklıyor. Bu nedenle, bir bağımlı birimdeki (sistem veya kullanıcı) ortam değişkenlerini değiştirirseniz, bağımlı birim yapılandırmasını güncellemek için ana bilgisayarı yeniden başlatmanız gerekir.
Thinkeye

36

Bu problemle karşılaşmaya devam ettim ama şimdi ekliyorum:

source /etc/profile

Yapım sürecimin ilk adımı olarak. Artık Jenkins'in sorunsuz çalışması için tüm sonraki kurallarım yüklendi.


6
Huh? Ayrıntılı olarak lütfen ... nereye ekliyorsunuz? Nasıl? ne zaman? Windows'ta çalışıyor mu?
HX_unbanned

Yapınızın bir parçası olarak bir kabuk komutu çalıştırdığınızı varsayıyorum. source /etc/profileBu Derleme> Kabuğu Yürüt> Komut metin alanına ilk komut olarak koyun .
bryan kennedy

2
Mac'te çalışıyor, ayrıca şöyle yollar buldum /usr/local/bin içinde belirtildiği/etc/paths ve /etc/pathstarafından kullanılıyor /usr/libexec/path_helperve path_helper içinde çalıştırılıyor /etc/profile.
hiroshi

1
günümü kurtardın :)
RameshVel

Sourcing / etc / profile, işe 'echo $ PATH' hata ayıklaması eklerken yolu gösteriyor, ancak işin çevre değişkenlerine bakarsam aynı değil.
Elijah Lynn

23

/etc/sysconfig/jenkinsOrtam değişkenlerinde herhangi bir değişiklik yapmak için dosyayı da düzenleyebilirsiniz . Ben sadece source /etc/profiledosyanın sonuna ekledim . /etc/profiletüm uygun PATHdeğişken kurulumlarına sahiptir. Bunu yaptığınızda, Jenkins'i yeniden başlattığınızdan emin olun.

/etc/init.d/jenkins restart

Armut, phing, vs'yi farklı bir yoldan kuran ZendServer CE'yi çalıştırıyoruz, bu yüzden bu yardımcı oldu. Ayrıca LD_LIBRARY_PATHOracle istemcisi ve Jenkins ile aldığımız hataları almıyoruz .


Bu önemli bir yorumdur veya jenkins'i {jenkins-url} / restart veya {jenkins-url} / safeRestart'tan yeniden başlatın. Ubuntu ana bilgisayarında / etc / environment öğesini düzenleyerek, yol değişikliklerinin neden alınmadığını kafamı karıştırıyordum - RESTART, {jenkins-url} / systemInfo
kert

Diğerleri başarısız oldu, işe yarayan tek kişi bu! Keşke daha yaygın olsaydı, bu yüzden son birkaç saati boşa harcamayacaktım!
Brad Bonkoski

15

Denedim /etc/profile, ~/.profileve ~/.bash_profileve bunların hiçbiri çalıştı. ~/.bashrcJenkins köle hesabını düzenlemenin işe yaradığını buldum .


3
bunun nedeni giriş yapılmayan kabuğun ne /etc/profile~/.profile
Vincenzo

9

Bu cevapla ilgili bilgiler güncel değil. Jenkins'i Yapılandır'a gitmeniz gerekir> Ve buradan bir Ortam Değişkeni anahtar / değer çifti eklemek için tıklayabilirsiniz.

örneğin: export MYVAR=testolurdu MYVARanahtar ve testdeğerdir.


5

Yeni EC2 örneğimde, Jenkins kullanıcısının .profile'sinin PATH'ına yeni değeri eklemek ve ardından tomcat'i yeniden başlatmak benim için çalıştı.

# 2 kullanılarak yapılandırma farklıdır eski örneği, On Sagar cevabı (yani .profile, .bash * çalışma vermedi) çalışan tek şey oldu.


4

Bunun için iki eklenti buldum. Biri değerleri bir dosyadan yükler, diğeri ise iş yapılandırma ekranındaki değerleri yapılandırmanıza izin verir.

Envfile Plugin - Bu eklenti, bir dosya aracılığıyla ortam değişkenlerini ayarlamanızı sağlar. Dosyanın biçimi, standart Java özelliği dosya biçimi olmalıdır.

EnvInject Eklentisi - Bu eklenti, İş için bir ortam ayarlamak üzere ortam değişkenleri eklemeyi ve bir kurulum komut dosyası çalıştırmayı mümkün kılar.


4

Bunu Jenkins ayarlarında bir ortam değişkeni olarak ekleyemez miydiniz:

Jenkins'i yönetin -> Global özellikler> Ortam değişkenleri: Ardından, bir PATH özelliğini ve ihtiyacınız olana değerini eklemek için "Ekle" yi tıklayın.


1
1.620 sürümünde "Jenkins'i Yönet -> Sistemi Yapılandır -> Ortam Değişkenleri" gibi görünüyor.
akaihola

4

Bu can sıkıcı sorunu bu şekilde çözdüm:

PATHDeğişkeni 2. seçeneğinde @sagar'ın önerdiği şekilde değiştirdim ama yine de PATHbeklediğimden farklı bir değer aldım .

Sonunda değişkenimin EnvInjectyerini alan eklenti olduğunu öğrendim PATH!

Bu yüzden onu kaldırabilir EnvInjectveya PATH değişkenini enjekte etmek için kullanabilirim.

Jenkins işlerimizin çoğu bu eklentiyi kullandığından, onu kaldırmak istemedim ...

Ben de bir dosya oluşturdum: environment_variables.propertiesJenkins ana dizinimin altında.

Bu dosyaya, gerekli yol ortam değeri içerdi: PATH=$PATH:/usr/local/git/bin/.

Jenkins web arayüzünden: Manage Jenkins -> Configure System. Bu ekranda - Ben işaretli Prepare jobs environmentseçeneği ve içinde Properties File Pathalanın benim dosyanın yolunu girmiştir: /var/lib/jenkins/environment_variables.properties.

Bu şekilde, sahip olduğumuz her Jenkins işi, bu environment_variables.propertiesdosyaya koyduğum değişkenleri alır .


1
Bu doğru cevap olmalı. Belirtildiği gibi / etc / profilinin güncellenmesi, dosya salt okunur olduğundan ve izinlerle uğraşmayı gerektirdiğinden OSX'te uygun bir çözüm değildir. Bu çözüm en temiz görünüyor ve Jenkins'te zaten var olan eklentileri kullanıyor. Özellikler dosyanızı oluşturduktan ve Jenkins'e ayarladıktan sonra
jenkins'i

3

Jenkins ayrıca PATH+<name>sadece PATH'i değil, herhangi bir değişkene eklenecek biçimi de destekler :

Global Ortam değişkenleri veya düğüm Ortamı değişkenleri:

Jenkins değişkeni + gösterimi

Bu, ardışık düzen adımında da desteklenir withEnv:

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

Unutmayın, değişkenin başına eklenir. Eklenmesi gerekiyorsa, diğer cevapların gösterdiklerini yapmanız gerekir.

Boru hattı adımları belgesine buradan bakın .

Ayrıca, PATH + WHATEVER = / bir şey / bir şeyi $ PATH yoluna eklemek için sözdizimini de kullanabilirsiniz.

Veya EnvVars'daki java dokümanları burada .


2

Bu konuda sadece "/etc/init.d/jenkins force-reload" yaptıktan sonra ilerleme kaydettim. Bunu her şeyden önce denemenizi ve yeniden başlatmak yerine onu kullanmanızı öneririm.


1
Ve aslında PATH öğesini nereye eklediniz? Hayal edebileceğim her yeri denedim.
Stabledog

2

Ubuntu 13.04'ümde, bunu başarmadan önce epeyce ince ayar yapmayı denedim:

  1. /Etc/init/jenkins.conf dosyasını düzenleyin
  2. "Exec start-stop-server ..." ın başladığı noktayı bulun
  3. Ortam güncellemesini bundan hemen önce ekleyin, yani

dışa aktar PATH = $ PATH: / bir / yeni / yol / bin


2

Ekle

/usr/bin/bash

-de

Jenkins -> Jenkins'i Yönet -> Sistemi yapılandır -> Kabuk-> Kabuk çalıştırılabilir

Jenkins, / etc / profile bile çalışmasın diye sh kullanır. Bunu eklediğimde, tüm ortamlara sahibim.


Bu sizin için hangi Jenkins sürümü işe yaradı @ sumang_87? Jenkins 2.9'da bana yardımcı olamadı
hamx0r

1

Benim için çalışan çözüm

source ~/.bashrc

Açıklama

İlk önce Jenkins'in BASH çalıştırdığını doğruladım echo $SHELLve echo $BASH(Açıkça #!/bin/bashJenkins'teki metin alanının üstüne koyuyorum , BASH almak için bunun bir gereklilik olup olmadığından emin değilim). Diğerlerinin önerdiği gibi sourceing /etc/profileçalışmıyordu.

Bakıyorum /etc/profilebuldum

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

ve "$ PS1" incelendiğinde boş bulundu. Aldatmayı $PS1boşuna denedim öyle

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

ancak bu istenen sonucu vermedi ( $PATHgörmeyi umduğum geri kalanını ekleyin ). Ama bash'a etkileşimli olmasını söylersem

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

$PATHBeklediğim gibi değiştirilmiştir.

/etc/bash.bashrcYüklemek için etkileşimli bir kabuğun nasıl düzgün bir şekilde taklit edileceğini anlamaya çalışıyordum , ancak tek ihtiyacım olan şey içeri girdi ~/.bashrc, bu yüzden basitçe sourcesorunu çözdü.


#!/bin/bash -elBash'e bir giriş kabuğu olarak başlamasını söylemek için kullandığınızdan emin olun . Bu, bash'ın gerekli .rc dosyalarını kaynaklamasına neden olur
Brandon

1

Yukarıdakilerin hepsini denedim - benim için işe yaramadı.

İki çözüm buldum (her ikisi de SSH-Slave için)

  1. Slave ayarlarına git

  2. Yeni bir ortam değişkeni ekleyin

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

"$ {HOME}" kısmı önemlidir. Bu, ek PATH'i mutlak yapar. Göreceli yol benim için işe yaramadı.

Seçenek II (ardışık düzen komut dosyası)

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'da sadece / etc / default / jenkins'i düzenliyorum ve sonuna kaynak / etc / profile ekliyorum ve bende çalışıyor.


0

Komutu ortam değişkeni setiyle çalıştırmak da etkilidir. Tabii ki, çalıştırdığınız her komut için bunu yapmanız gerekir, ancak muhtemelen bir iş betiğiniz vardır, bu nedenle muhtemelen her yapı için yalnızca bir komutunuz vardır. İş betiğim, hangi python'un kullanılacağına karar vermek için ortamı kullanan bir python betiğidir, bu yüzden yoluna /usr/local/bin/python2.7'yi koymam gerekiyordu:

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

0

Benim için işe yarayan şey, köle için PATH ortamını geçersiz kılıyordu.

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

Ardından slave'in bağlantısını kesip yeniden bağlayın.

Sistem bilgilerinin gösterdiğine rağmen işe yaradı.


0

Zypper (paket yöneticisi) aracılığıyla SLES 11 SP3 üzerine Jenkins 1.639 yükledim. Hizmet olarak kurulum yapılandırılmış jenkins

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

/etc/init.d/jenkinsKaynaklar olmasına rağmen /etc/sysconfig/jenkins, oradaki herhangi bir env değişken kümesi, aşağıdaki gibi yeni bir ortamda ayrı bir oturum açma kabuğunda başlatıldığından jenkins işlemi tarafından miras alınmaz:

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

Jenkins işlemi için env değişkenlerini ayarlamayı başardığım yol .bashrc, ana dizini - /var/lib/jenkins. Daha önce olmadığı gibi yaratmak zorundaydım /var/lib/jenkins/.bashrc.


0

İşte Jenkins 2.176.2 ile ubuntu 18.04 LTS'de yaptıklarım

.Bash_aliases dosyasını oluşturdum ve oraya yol, proxy değişkenleri vb. Ekledim.

.Bashrc'nin başlangıcında bu tanımlanmıştı.

# If not running interactively, don't do anything
case $- in
    *i*) ;;
      *) return;;
esac

Yani etkileşimli olmayan kabuğa başlarsak burada hiçbir şey yapmayacağımızı kontrol ediyor.

.bashrc'nin altında .bash_aliases için dahil edildi

# 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

bu yüzden .bash_aliases yüklemesini ilk olarak etkileşimli olmayan denetimin hemen üstüne .bashrc'de taşıdım.

Bu ilk önce işe yaramadı ama sonra slave'in bağlantısını kestim ve yeniden bağladım, böylece değişkenleri tekrar yüklüyor. Bağımlı değişkenleri değiştiriyorsanız tüm jenkins'i yeniden başlatmanıza gerek yoktur. sadece bağlantıyı kesin ve yeniden bağlayın.


-1

1- profil dosyanıza ".bash_profile" dosyasına ekleyin

"/ home / your_user /" klasöründe

vi .bash_profile

Ekle:

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

==> e jenkins çalışma alanıdır

2- Jetty kullanıyorsanız: jenkins.xml dosyasına gidin

ve Ekle :

<Arg>/apps/data/jenkins</Arg>
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.