2016-12-20 35 views
8

Piszę zadanie rurociągu, które wywoła inny skrypt do wykonania. Plik Jenkins i skrypt istnieją w tym samym katalogu, a zadanie nie znajduje skryptu do uruchomienia.Zadanie Jenkins Pipeline nie może znaleźć skryptu z powodu utworzenia ścieżki @tmp

To jest odpowiednia część skryptu;

stage ('Update') { 
    try { 
     dir('jenkins/pipeline/update-jenkins-plugins-ppln') { 
      sh 'ls -l' 
      sh 'update-plugins.sh' 
     } 
} 

, który zwraca następujący błąd;

[update-jenkins-plugins-ppln] Running shell script 
+ ls -l 
total 8 
-rw-r--r-- 1 jenkins jenkins 2441 Dec 20 09:34 Jenkinsfile 
-rwxr-xr-x 1 jenkins jenkins 506 Dec 19 14:06 update-plugins.sh 
[Pipeline] sh 
[update-jenkins-plugins-ppln] Running shell script 
+ update-plugins.sh 
/var/lib/jenkins/workspace/update-jenkins-plugins-ppln/jenkins/pipeline/[email protected]tmp/durable-11cefdd0/script.sh: 2: /var/lib/jenkins/workspace/update-jenkins-plugins-ppln/jenkins/pipeline/[email protected]/durable-11cefdd0/script.sh: update-plugins.sh: not found 

Jak widać, pathing używam jest prawidłowy, ponieważ zgodnie z ls plik, muszę update-plugins.sh znajduje się w katalogu Mam pathed do. Z jakiegoś powodu, podczas wyszukiwania skryptu Jenkins dodaje na ścieżkę @tmp/durable-8d48734f/script.sh.

Różne rozwiązywanie problemów:

  • czytałem, że trzeba ponownie, nawet jeśli jesteś już sprawdzenie go dostać Jenkinsfile kasy oddziału, więc jestem.
  • Mam ssh'd w polu Jenkinsa, aby sprawdzić i tak, skrypt jest tam.

Dlaczego Jenkins dodaje bity @tmp i czy istnieje sposób, aby temu zapobiec?

Odpowiedz

1

Chyba Twój pwd nie jest w PATH tak trzeba nazwać tak: sh './update-plugins.sh'

+0

Próbowałem już; ten sam błąd '+ ./update-plugins.sh /var/lib/jenkins/workspace/[email protected]/durable-88ee0ed4/script.sh: 2:/var/lib/jenkins/workspace/[email protected]/durable-88ee0ed4/script.sh: ./update-plugins.sh: not found' – Alex

+0

To dziwne. Mogę tylko zaproponować ci wypróbowanie sh 'bash update-plugins.sh' lub obliczyć pełną ścieżkę za pomocą potoku func pwd(), połączyć i wywołać skrypt przez absolutną ścieżkę. – izzekil

+0

Dla mnie działało to za pomocą "./" na początku nazwy skryptu. –

2

Czy próbowałeś korzystanie ze środowiska Jenkins obszaru roboczego zmienna WORKSPACE (bezwzględną ścieżkę do obszaru roboczego)? Dzięki temu linia będzie wyglądać mniej więcej tak:

sh '${WORKSPACE}/jenkins/pipeline/update-jenkins-plugins-ppln/update-plugins.sh'