Как определить ошибки компиляции в скрипте Jenkins groovy? - PullRequest
1 голос
/ 06 апреля 2020

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

После тестирования этого кода в небольшом конвейере тестирования я копирую / вставить этот код в оригинальный большой конвейер. А при запуске большого конвейера после нескольких часов работы происходит сбой по тривиальным причинам, например, не определена переменная, которая была пропущена во время копирования / вставки из конвейера тестирования.

Такие тривиальные ошибки не идентифицируются ни в пользовательском интерфейсе Jenkins Pipeline ни в Intellij Idea (которую я использую)

Может кто-нибудь помочь мне, как избежать такого рода тривиальных ошибок, чтобы конвейер после долгого времени работы не выходил из строя?

1 Ответ

2 голосов
/ 06 апреля 2020

Следует рассмотреть возможность установки модульных тестов для вашего конвейера с использованием библиотеки Pipeline Unit Test . Это позволяет вам скомпилировать и смоделировать выполнение сложного конвейера менее чем за 1 секунду. Конечно, вам может понадобиться потратить некоторое время на правильную настройку модульного теста, но это стоит того, чтобы приложить усилия.

Вы можете начать с простого теста, который печатает стек вызовов, например:

import com.lesfurets.jenkins.unit.BasePipelineTest

class TestExampleJob extends BasePipelineTest {

        //...

        @Test
        void should_execute_without_errors() throws Exception {
            def script = loadScript("job/exampleJob.jenkins")
            script.execute()
            printCallStack()
        }
}

Если вы не видите ошибок в стеке вызовов, вы можете добавить assertJobStatusSuccess(), чтобы проверить, не вызвало ли выполнение конвейера изменение состояния сборки. И затем, вы можете начать добавлять такие вещи, как assertCallStackContains(str), чтобы начать проверять, присутствовала ли указанная c команда или этап во время выполнения.

Этот модульный тест также должен выявить любые (или, по крайней мере, большинство) проблем компиляции , Есть несколько редких случаев, когда тестирование модуля конвейера проходит успешно, но конвейер, выполняемый на Jenkins, не проходит. Я использую эту библиотеку в течение двух лет в своей общей библиотеке Jenkins, это сэкономило мне сотни часов ручного тестирования и выявления простых ошибок.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...