2017-06-19 39 views
6

Utworzono skrypt programu Powerhell, który przeniesie (przy użyciu winscp.dll) pliki z serwera Windows Jenkins na serwer Linux. W poleceniu wsadowym Jenkinsa wykonałem skrypt PowerShell i działa dobrze.Wykonywanie skryptu wsadowego nie działa w Jenkins Pipeline Job

Ale kiedy spróbowałem tego samego w pracy z rurociągiem Jenkins, wywołuje skrypt PowerShell i przechodzi do następnego kroku. Nie czeka na odpowiedź skryptową powershell.

bat 'powershell.exe -ExecutionPolicy Bypass "D:\\Test\\Deploymentscripts\\PowerShellScript\\FileTransfer.ps1 $env:EndMarket $env:Environment"' 

Próbowałem z innym skryptem powłoki, który połączy się z serwerem Linux i wykona niektóre polecenia. To działa dobrze w pracy na linii

Prosimy o przypomnienie mnie, aby rozwiązać ten problem.

+1

Musisz rozwiązać ten problem za pomocą skryptu PowerShell, który nie jest podany w pytaniu. Istnieje przykład PowerShell/winscp.dll tutaj: https://winscp.net/eng/docs/library_powershell. Jak w tym przykładzie '$ session' jest czyszczona (' $ session.Dispose() '), gdy transfer zakończył się pomyślnie, można założyć, że proces transferu został zakończony. – iRon

+0

Czy możesz udostępnić swoją konfigurację potoku? –

Odpowiedz

3

Interesujące. Twój problem nie występuje w twoim skrypcie, ponieważ już wyjaśniłeś, że działa on w zadaniu wsadowym.

Nie wiem, jak jest napisane, ale proponuję przejrzeć Stage, Lock and Milestone, co prawdopodobnie jest potrzebne.

Etap etap jest podstawowym budulcem w rurociąg, dzieląc kroki rurociągu do jednoznacznych jednostek i pomaga wizualizować postęp używając „Etap View” wtyczki

Chyba można dodać blok etapów podobny do tego: Pipeline:

stage("Previous Step") { 

     // Some previous step 
    } 

stage("Wait for Script Execution") { 

    // Call your script 
    bat 'powershell.exe -ExecutionPolicy Bypass "D:\\Test\\Deploymentscripts\\PowerShellScript\\FileTransfer.ps1 $env:EndMarket $env:Environment"' 
} 

stage("Next Step") { 

     // Script already finished its execution 
    } 

Ale bez informacji o potoku to tylko zgadywanie. Także poprawić kompatybilność skryptu unikając „bat i ExcutionPolicy” i używając PowerShell plugin z tej wtyczki można uprościć swój kod tak:

powershell -File your_script.ps1 

EDIT: Zapomniałam wspomnieć, że można spróbować inną alternatywę do powershell i biblioteki winscp używając "scp" bezpośredniej kompatybilności pomiędzy Windows i Linux, mówię o Cygwin.

Z Cygwin zainstalowany (z SCP) można użyć scp jak to było pole Linux i skrypt bash zamiast PowerShell:

D:/cygwin-64/bin/run.exe /usr/bin/bash -lic \"/home/user/file.sh\" 

W tym przypadku używam skryptu cicho przez Cygwin w Jenkins Projekt z opcją "Uruchom Windows Batch". W skrypcie możesz dodać polecenia powłoki i instrukcje scp, które chcesz.

Może wydawać się nieco bardziej złożona, ale zapewnia większą elastyczność w wykonywaniu zadań systemu Windows - Linux.

Mam więcej szczegółowych przykładów w moim blog, może się przydać.

Jak wspomniano wcześniej, należy sprawdzić, czy zmienne są ładowane.

0

Nie wywołujesz poprawnie skryptu. Przechodzisz w $ Env w wywołaniu powershell, które jest zmienną powershell.

Jesteś w trybie wsadowym, więc powinno upłynąć%.

bat 'powershell.exe -ExecutionPolicy Bypass "D:\\Test\\Deploymentscripts\\PowerShellScript\\FileTransfer.ps1" "%EndMarket%" "%Environment%"'