Как заставить Hudson CI выполнять сценарий Powershell?

Нет, это не имеет значения, за исключением соединения CSS или включения, из-за наследования CSS и того, что это перезаписывает то, что было уже разработано (извините для моего английского языка, я думаю, мое предложение не является действительно ясным:-/).

8
задан gofr1 2 March 2016 в 16:27
поделиться

3 ответа

У меня были те же проблемы, что и у вас (как вы видели из моих комментариев). Я отказался от средства запуска PowerShell и перешел к запуску вещей с помощью средства запуска пакетных файлов. Несмотря на то, что я установил для системы неограниченный доступ, эта настройка, похоже, не имела значения для лаунчера Hudson. Я не знаю, работает ли он в каком-то другом контексте или что-то в этом роде, даже добавление вещей в глобальный profile.ps1, похоже, не помогло. В итоге я запустил

powershell " set-executionpolicy Unrestricted; & 'somefile.ps1'" 

, который делает то, что мне нужно, хотя и не идеально. Я написал об этом автору плагина и обновлю его.

1
ответ дан 5 December 2019 в 14:04
поделиться

For question #1, try this (assuming you are using PowerShell 2.0):

"C:\Windows\system32\WindowsPowerShell\v1.0\powershell -executionPolicy Unrestricted -file OzSystems.Tools\psake\psake.ps1 C:\{path}\oz-build.ps1"

You are using "." for the path to oz-build.ps1. I suspect you will need to provide the full path to your oz-build.ps1 file to make this work. Unless the infrastructure that executes the command above happens to have the current dir set correctly. And even if it is set correctly for the "process", that only matters to .NET/Win32 API calls and not to PowerShell cmdlets. Current dir in PowerShell is tracked differently than the process's current dir because PowerShell can have multiple runspaces running simultaneously. That sort of global, mutable value doesn't work in this concurrent scenario.

As for question #2, what account does the Hudson service run under? Make sure that account has executed Set-ExecutionPolicy RemoteSigned (or unrestricted).

1
ответ дан 5 December 2019 в 14:04
поделиться

При запуске PowerShell из запланированной задачи или Hudson, вы хотите:

  1. Укажите параметр -ExecutionPolicy (в вашем случае: -Ex Unrestricted )
  2. Укажите эту команду, используя либо -Command {...} или -File НЕ ОБА и без указания того, что вы имеете в виду.

Попробуйте это (за исключением того, что я не рекомендую использовать относительные пути):

PowerShell.exe -Ex Unrestricted -Command "C:\Path\To\OzSystems.Tools\psake\psake.ps1" ".\oz-build.ps1"

Для ясности, это тоже будет работать:

PowerShell.exe -Ex Unrestricted -Command "&{&'OzSystems.Tools\psake\psake.ps1' '.\oz-build.ps1'}"

Первая строка после -Command интерпретируется как ИМЯ КОМАНДЫ, и каждый последующий параметр просто передается этой команде в качестве параметра. Строка НЕ ​​является сценарием, это имя команды (в данном случае файла сценария) ... вводится в командной строке Windows PowerShell, а затем закрывается, если только Указывается NoExit. Значение Command может быть "-" в виде строки. или блок скрипта.

Если значение Command равно "-", текст команды читается из стандартного input.

Если значение Command - блок сценария, блок сценария должен быть заключен в фигурных скобках ({}). Вы можете указать блок скрипта только при запуске PowerShell.exe. в Windows PowerShell . Возвращаются результаты блока скрипта в родительскую оболочку как десериализованные объекты XML, а не живые объекты.

Если значение Command является строкой, Command должна быть последним параметром в команде, потому что любые символы, введенные после команды интерпретируется как аргументы команды.

2
ответ дан 5 December 2019 в 14:04
поделиться
Другие вопросы по тегам:

Похожие вопросы: