Запуск пакетного скрипта с двумя командами msiexec приводит к завершению скрипта сразу после завершения первой команды

Я пытаюсь запустить пакетный скрипт из задания jenkins, в котором есть две команды msiexec: одна для удаления, а другая для установки.
Этот скрипт на github, поэтому Дженкинс Джокинс клонирует репозиторий и затем запускает скрипт

Задание Jenkins запускает выполнение второй команды msiexec (установка), но оно немедленно завершается. Если я открываю консоль задания, я вижу сообщение "Обработка утечек файловых дескрипторов". и статус работы: успех


Если я запускаю тот же скрипт через cmd без jenkins, он работает нормально.

setlocal enabledelayedexpansion 
IF EXIST "directory path" (
msiexec /uninstall {Product ID} /qb
)
pushd \\shared drive
IF EXIST "directory path" (
msiexec /i "path to exefile" /qb
popd
exit 0
)
ELSE (
ECHO Setup Not Found in current
exit 0
)

1 ответ

Ключевое слово ELSE должно быть в той же строке, что и ) ИСТИННОЙ ветви состояния IF отделена от ) космическим символом. ELSE в отдельной строке интерпретируется как имя консольного приложения для запуска.

if exist "directory path" (
    %SystemRoot%\System32\msiexec.exe /uninstall {Product ID} /qb
)
pushd "\\ComputerName\ShareName\"
if exist "directory path" (
    %SystemRoot%\System32\msiexec.exe /i "path to exefile" /qb
) else (
    echo Setup not found in %CD%.
)
popd
exit /B 0

Подсказка: для отладки командного файла запустите его из окна командной строки, а не двойным щелчком по нему после удаления или комментирования всех строк, содержащих echo off, И не используйте EXIT без /B поскольку это всегда приводит к выходу из всего командного процесса, а не только к выходу только из обработки текущего пакетного файла. Отладка командного файла в окне командной строки становится сложной, если командный файл содержит EXIT без /B и эта команда действительно выполняется при запуске пакетного файла, потому что сообщения об ошибках, выводимые во время выполнения пакетного файла, в этом случае не видны.

Другие вопросы по тегам