Основной проблемой, скорее всего, является строковое значение, присвоенное переменной окружения CHANGESET
, которая представляет собой не просто строку 77
, а строку 77
с переводом каретки или переводом строки или переводом каретки + line- добавляется feed, что приводит к усеченной командной строке при исполнении Jenkins. Таким образом, источник этой проблемы должен быть найден в коде, который определяет переменную окружения CHANGESET
со строкой не только числа, но числа с символом новой строки.
GG_Victor написал в комментарии :
Возврат каретки, похоже, был проблемой, и изменение присвоения CHANGESET
, чтобы иметь .trim()
на выходе оболочки в jenkinsfile, выглядит так: env.CHANGESET = sh (...).trim()
облегчен проблема.
Но было бы еще лучше выяснить, почему переменная окружения CHANGESET
определяется со строковым значением с добавлением возврата каретки к числу, поскольку это реальный источник Проблема.
Другая проблема с кодом пакета - это переопределение предопределенной переменной среды PATH
со строкой, представляющей собой путь к одной папке. Пожалуйста, взгляните на В чем причина "X не распознается как внутренняя или внешняя команда, работающая программа или пакетный файл"? После длинного ответа сверху вниз вы должны знать, почему path
не должен использоваться в качестве имени локальной переменной среды. Лучше было бы FolderPath
или ProjectPath
или ArchivePath
вместо path
.
Поэтому первая строка должна быть, например:
set "ArchivePath=D:\Data\Builds\%GGProjectName%\development"
Использование "
как здесь сделано, настоятельно рекомендуется. Причина описана в моем ответе:
Почему нет строкового вывода с 'echo% var%' после использования 'set var = text' в командной строке?
Команда CALL необходима только для вызова пакетного файла из пакетного файла. Нет необходимости запускать исполняемый файл из командного файла. Командный процессор Windows останавливает выполнение пакетного файла до тех пор, пока запущенный исполняемый файл не прервется сам. Таким образом, выполнение командного файла в вашем случае не продолжается cmd.exe
до тех пор, пока запущенный 7z.exe
не завершит создание файла архива и не завершит работу с кодом выхода, возвращенным командному процессору Windows, который присваивает его ERRORLEVEL
для оценки одним следующих команд.
Такое поведение при запуске консоли или GUI исполняемого файла из пакетного файла можно легко увидеть, создав пакетный файл со следующими пятью строками и выполнив его двойным щелчком:
@echo off
echo Run Notepad.
%SystemRoot%\Notepad.exe
echo Notepad terminated.
pause
Командный процессор Windows выводит Run Notepad.
и запускается следующим Windows Блокнот . В окне консоли отображается Run Notepad.
, пока открыто графическое окно Блокнот , поскольку cmd.exe
ожидает завершения Windows Блокнот . Как только пользователь завершает работу Windows Notepad , командный процессор Windows продолжает работу и выдает следующую строку Notepad terminated.
Last, выполнение команды снова приостанавливается из-за команды PAUSE чтобы дать пользователю возможность увидеть, что выполнение пакетного файла продолжилось после завершения Notepad .
Это поведение при запуске исполняемого файла из пакетного файла отличается от запуска исполняемого файла изнутри окно командной строки. Командный процессор Windows не ожидает завершения запуска исполняемого файла, если пользователь открывает командную строку , вводит %SystemRoot%\Notepad.exe
и нажимает клавишу RETURN или ENTER для запуска Windows Блокнот . Пользователь может в этом случае сразу же ввести и выполнить следующую команду после переключения с все еще открытого Блокнота окна на окно Windows командной строки.
Поэтому для второй строки следует использовать:
"C:\Program Files\7-Zip\7z.exe" a -bd -tzip -y -- "%ArchivePath%\%GGProjectName%-%CHANGESET%.zip" ".\Build\"
Двойные кавычки настоятельно рекомендуются снова, особенно для полного квалифицированного имени файла архива, содержащего -
после пробела, чтобы избежать интерпретации остальных по ошибке как переключение 7z.exe
, или для полного квалифицированного имени файла, содержащего пробел или единицу из этих символов &()[]{}^=;!'+,`~
. Лучше всегда заключать имена файлов / папок в двойные кавычки, даже если в этом нет особой необходимости.
Три дополнительных ключа -bd
, -y
и --
описаны с помощью 7. -Zip .