Дженкинс - просто robocopy в Дженкинсе заканчивает маркировку с ошибкой
У меня есть простая командная команда windows (robocopy), которая возвращает нулевые ошибки, но всегда отмечена как неудача в Jenkins. Я хотел бы знать, почему?
D:\Jenkins\jobs\Jenkins Config Backup\workspace> exit 1 Шаг сборки "Выполнение командного командного процесса Windows" отмечен как отказ. Закончено: FAILURE
Ответы
Ответ 1
robocopy возвращает бит карту
Подробнее см. Здесь: http://ss64.com/nt/robocopy-exit.html
В итоге: все коды выхода до "3" в порядке.
Это код командного файла, который я обычно использую:
set SOURCE= ...
set DESTINATION= ...
robocopy /MIR /LOG:example.robocopy.log.txt %SOURCE% %DESTINATION%
@echo robocopy exit code: %ERRORLEVEL%
@if %ERRORLEVEL% GTR 3 ( echo robocopy ERROR )
@if %ERRORLEVEL% GTR 3 ( exit %ERRORLEVEL% )
@set ERRORLEVEL=0
Вы также можете сделать "goto" и не выйти.
Ответ 2
Дженкинс отмечает, что сборка не удалась, когда существующий код пакетного скрипта не равен 0. Если robocopy является последней командой в вашем скрипте, будет выполнен код выхода robocopy.
Robocopy не придерживается стандарта, что другой код выхода, кроме 0, означает неудачную сборку. Вам необходимо оценить код выхода robocopy и завершить свой скрипт с exit 0
или exit 1
зависимости от успеха robocopy.
Посмотрите коды выхода robocopy.
Ответ 3
Обновление этого вопроса для jenkins pipelines - это работает для меня:
def robocopy(cmd)
{
// robocopy uses non-zero exit code even on success, status below 3 is fine
def status = bat returnStatus: true, script: "ROBOCOPY ${cmd}"
println "ROBOCOPY returned ${status}"
if (status < 0 || status > 3)
{
error("ROBOCOPY failed")
}
}
Кроме того, вы можете посмотреть плагин File Operations