2016-03-03 2 views
1

Я использую Jenkins для развертывания. Я хотел запустить сценарий powershell, который копирует некоторые файлы. Я установил плагин «Windows Powershell» для jenkins, который выполнит скрипт powershell. Мой сценарий Powershell выглядит нижеjenkins не может выполнить powershell в программных файлах

param (
    [string] $targetEnvironment, 
    [switch] $WhatIf, 
    [switch] $Compare) 

    try 
    { 
     #do smething here 
    } 
    catch 
    { 
    } 

Этот скрипт отлично работает, когда я выполняю его вручную. Однако при запуске скрипта, используя следующую команду в окне ввода плагина я получаю ошибку

enter image description here

Обратите внимание, что, если я скопировал папку «deploymentscript» в «C: \ deploymentscript», а затем измените путь в плагине окно, тогда работа выполняется нормально. Это не работает, когда его выполнение в рамках программных файлов

И.М. ошибка получает

First time build. Skipping changelog. 
[workspace] $ powershell.exe -NonInteractive -ExecutionPolicy ByPass "& 'C:\Users\CODESC~1\AppData\Local\Temp\hudson2119904511537985474.ps1'" 
At C:\Users\username\AppData\Local\Temp\hudson2119904511537985474.ps1:1 char:119 
+ ... etaTaskar.ps1' -targetEnvironment demo 
+     ~~~~~~~~~~~~~~~~~~ 
Unexpected token '-targetEnvironment' in expression or statement. 
At C:\Users\username\AppData\Local\Temp\hudson2119904511537985474.ps1:1 char:138 
+ ... getEnvironment demo 
+     ~~~~ 
Unexpected token 'demo' in expression or statement. 
+ CategoryInfo   : ParserError: (:) [], ParseException 
+ FullyQualifiedErrorId : UnexpectedToken 

Build step 'Windows PowerShell' marked build as failure 
Finished: FAILURE 

EDIT1
@petrik Вы правы, пространство в папке "Program Files (x86)" вызывает проблема. Раствор должен использовать следующий foormat

&("C:\Program Files (x86)\Jenkins\jobs\MyJob\workspace\crconfig\deploymentscript\Deploy.ps1") -targetEnvironment demo 

и что работает.

Теперь на основании статьи here, если не удается scrit PowerShell я хочу работу в Дженкин на провал тоже Так я должен сказать Хадсон назвать сценарий PowerShell образует окна пакетного задания.

powershell "& {&('C:\Program Files (x86)\Jenkins\jobs\MyJob\workspace\crconfig\deploymentscript\Deploy.ps1') -targetEnvironment $Env:EnvironmentParam; exit $lastexitcode }" 

Я не уверен, действительно ли мне это нужно в моем случае ??

+1

Попробуйте удвоить? – Engineer

+0

Я предполагаю, что это не факт, что он работает от «Program Files», но тот факт, что он работает из пути к каталогу, в котором есть пробелы. Что произойдет, если вы вручную выполнили эту команду (вся команда, как это было у jenkins)? – Petrik

+1

Другой вариант - сделать что-то вроде: $ script = 'c: \ Program Files (x86) \ Jenkins \ jobs \ MyJob \ workspace \ crconfig \ deploymentscript \ deploy.ps1'; & $ ​​script -targetEnvironment demo. – Petrik

ответ

1

В этом случае проблема возникает из-за того, что на пути «Program Files» есть пробелы. Ввод пути к скрипту в переменную, которая затем может быть выполнена с использованием call operator.

Чтобы гарантировать, что Jenkins не выполнит сборку, если сценарий Powershell не удалось выполнить несколько шагов.

  1. Используйте плагин Poweren Jenkins. Он передаст код выхода из командной строки на Jenkins
  2. Установите $ErrorActionPreference на «Стоп» как можно раньше. Это заставляет Powershell прекращать свое существование, когда исключаются исключения. Поведение по умолчанию - сообщить об ошибке, но затем продолжить.

Сценарий в конфигурации Дженкинс может выглядеть следующим образом:

$ErrorActionPreference = 'Stop' 
$scriptPath = 'c:\Program Files (x86)\Jenkins\jobs\MyJob\workspace\crconfig\deploymentscript\deploy.ps1' 
& $script -targetEnvironment 'demo' 

Это должно сделать Дженкинс запустить скрипт правильно и сообщит об ошибке и остановить сборку, если сценарий не удается.

0

я сделал две вещи, чтобы решить вопрос:

1) Добавив путь к PowerScript "C: \ Users \\ Documents \ WindowsPowerShell \ profile.ps1" путь переменной свойств системы.
2) Открытый Powershell с правами администратора и выполняются: "Set-ExecutionPolicy НЕОГРАНИЧЕННОГО"

Затем перезапуске окно машины. Когда я снова подключился к jenkins, моя PowerShell работала нормально.

Смежные вопросы