Дженкинс - просто 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