Введение в Jenkins 2 и мощь трубопроводов

Введение в Дженкинс 2 и сила трубопроводов

1. обзор

В этой статье мы собираемся продемонстрировать использование конвейеров на примере непрерывной доставки с использованиемJenkins.

Мы собираемся создать простой, но весьма полезный конвейер для нашего демонстрационного проекта:

  • компиляция

  • Простой статический анализ (параллельно с компиляцией)

  • Модульные тесты

  • Интеграционные тесты (параллельно с юнит-тестами)

  • развертывание

2. Настройка Jenkins

Прежде всего, нам нужно загрузить последнюю стабильную версиюJenkins (2.73.3 на момент написания этой статьи).

Давайте перейдем в папку, где находится наш файл, и запустим его с помощью командыjava -jar jenkins.war. Keep in mind that we can’t use Jenkins without an initial users setup.

После разблокировки Jenkins с помощью начального пароля, сгенерированного администратором, мы должны заполнить информацию профиля первого пользователя-администратора и обязательно установить все рекомендуемые плагины.

image

Теперь у нас есть свежая установка Jenkins, готовая к использованию.

image

Все доступные версии Jenkins можно найтиhere.

3. Трубопроводы

Jenkins 2 поставляется с замечательной функцией под названиемPipelines, которая очень расширяема, когда нам нужно определить среду непрерывной интеграции для проекта.

A Pipeline is another way of defining some Jenkins steps using code и автоматизировать процесс развертывания программного обеспечения.

Он используетDomain Specific Language(DSL) с двумя разными синтаксисами:

  • Декларативный трубопровод

  • Скриптовый конвейер

В наших примерах мы будем использоватьthe Scripted Pipeline which is following a more imperative programming model built with Groovy.

Давайте рассмотрим некоторые характеристики плагинаPipeline:

  • конвейеры записываются в текстовый файл и обрабатываются как код; это означает, что они могут быть добавлены в систему контроля версий и впоследствии изменены

  • они останутся после перезапуска сервера Jenkins

  • мы можем при желании приостановить конвейеры

  • они поддерживают сложные требования, такие как параллельное выполнение работ

  • плагин Pipeline также может быть расширен или интегрирован с другими плагинами

Другими словами, настройка проекта Pipeline означает написание сценария, который будет последовательно применять некоторые этапы процесса, который мы хотим выполнить.

To start using pipelines we have to install the Pipeline plugin, позволяющий составлять простую и сложную автоматизацию.

При желании мы также можем использоватьPipeline Stage View, чтобы при запуске сборки мы видели все настроенные нами этапы.

4. Быстрый пример

В нашем примере мы будем использовать небольшое приложение Spring Boot. Затем мы создадим конвейер, который клонирует проект, строит его и запускает несколько тестов, а затем запускает приложение.

Давайте установим плагины*https://wiki.jenkins-ci.org/display/JENKINS/Checkstyle+Plugin[Checkstyle],*Static Analysis Collector иJUnit, которые, соответственно, полезны для сбора результатовCheckstyle, построения комбинированного графика анализа отчетов об испытаниях и демонстрации успешно выполненных и неудачных тестов. .

Во-первых, давайте разберемся, почему здесь используется Checkstyle: это инструмент разработки, который помогает программистам писать лучший код Java в соответствии с общепринятыми и известными стандартами.

Сборщик статического анализа - это надстройка, которая собирает различные результаты анализа и печатает результаты в комбинированном графике трендов. Кроме того, плагин обеспечивает отчеты о работоспособности и стабильность сборки на основе этих сгруппированных результатов.

Наконец, подключаемый модульJUnit предоставляет издателя, который использует отчеты о тестировании XML, созданные во время сборки, и выводит подробную и значимую информацию относительно тестов проекта.

Мы также настроимCheckstyle вpom.xml: нашего приложения.


    org.apache.maven.plugins
    maven-checkstyle-plugin
    2.17

5. Создание скрипта конвейера

Во-первых, нам нужно создать новую работу Дженкинс. Обязательно выберитеPipeline в качестве типа, прежде чем нажимать кнопку ОК, как показано на этом снимке экрана:

image

Следующий экран позволяет нам заполнить более подробную информацию о различных этапах нашей работы Jenkins, таких какdescription,triggers, некоторыеadvanced project options:

image

Давайте погрузимся в основную и наиболее важную часть этого вида работы, щелкнув вкладкуPipeline.

Затем для определения выберитеPipeline script ** и отметьтеUse Groovy Sandbox.

Вот рабочий скрипт для среды Unix:

node {
    stage 'Clone the project'
    git 'https://github.com/eugenp/tutorials.git'

    dir('spring-jenkins-pipeline') {
        stage("Compilation and Analysis") {
            parallel 'Compilation': {
                sh "./mvnw clean install -DskipTests"
            }, 'Static Analysis': {
                stage("Checkstyle") {
                    sh "./mvnw checkstyle:checkstyle"

                    step([$class: 'CheckStylePublisher',
                      canRunOnFailed: true,
                      defaultEncoding: '',
                      healthy: '100',
                      pattern: '**/target/checkstyle-result.xml',
                      unHealthy: '90',
                      useStableBuildAsReference: true
                    ])
                }
            }
        }

        stage("Tests and Deployment") {
            parallel 'Unit tests': {
                stage("Runing unit tests") {
                    try {
                        sh "./mvnw test -Punit"
                    } catch(err) {
                        step([$class: 'JUnitResultArchiver', testResults:
                          '**/target/surefire-reports/TEST-*UnitTest.xml'])
                        throw err
                    }
                   step([$class: 'JUnitResultArchiver', testResults:
                     '**/target/surefire-reports/TEST-*UnitTest.xml'])
                }
            }, 'Integration tests': {
                stage("Runing integration tests") {
                    try {
                        sh "./mvnw test -Pintegration"
                    } catch(err) {
                        step([$class: 'JUnitResultArchiver', testResults:
                          '**/target/surefire-reports/TEST-'
                            + '*IntegrationTest.xml'])
                        throw err
                    }
                    step([$class: 'JUnitResultArchiver', testResults:
                      '**/target/surefire-reports/TEST-'
                        + '*IntegrationTest.xml'])
                }
            }

            stage("Staging") {
                sh "pid=\$(lsof -i:8989 -t); kill -TERM \$pid "
                  + "|| kill -KILL \$pid"
                withEnv(['JENKINS_NODE_COOKIE=dontkill']) {
                    sh 'nohup ./mvnw spring-boot:run -Dserver.port=8989 &'
                }
            }
        }
    }
}

Сначала мы клонируем репозиторий из GitHub, а затем меняем каталог на наш проект, который называетсяspring-jenkins-pipeline..

Далее мы скомпилировали проект и параллельно применили анализCheckstyle.

Следующий шаг представляет собой параллельное выполнение модульных тестов и интеграционных тестов, а затем развертывание приложения.

Parallelism is used to optimize the pipeline, and have the job runs faster. В Jenkins рекомендуется одновременно выполнять некоторые независимые действия, что может занять много времени.

Например, в реальном проекте у нас обычно много юнит-тестов и интеграционных тестов, которые могут занять больше времени.

Обратите внимание, что если какой-либо тест не пройден, BUILD также будет помечен как FAILED, и развертывание не произойдет.

Кроме того, мы используемJENKINS_NODE_COOKIE, чтобы предотвратить немедленное завершение работы нашего приложения, когда конвейер достигает конца.

Чтобы увидеть более общий сценарий, работающий в других различных системах, посмотрите файлGitHub repository.

6. Аналитический отчет

После создания задания мы сохраним наш скрипт и нажмемBuild Now на главной странице проекта нашей панели управления Jenkins.

Вот обзор сборок:

image

Чуть ниже мы найдем этапный вид конвейера с результатом каждого этапа:

image

Каждый вывод доступен при наведении курсора на ячейку этапа и нажатии кнопкиLogs, чтобы просмотреть сообщения журнала, напечатанные на этом этапе.

Мы также можем найти более подробную информацию об анализе кода. Нажмите на желаемую сборку вBuild History в правом меню и нажмитеCheckstyle Warnings..

Здесь мы видим 60 высокоприоритетных предупреждений, которые можно просмотреть, нажав:

image

На вкладкеDetails отображаются фрагменты информации, которые выделяют предупреждения и позволяют разработчику понять их причины.

Таким же образом, полный отчет об испытаниях доступен по ссылкеTest Result. Посмотрим на результаты пакетаcom.example:

image

Здесь мы видим каждый тестовый файл с его продолжительностью и статусом.

7. Заключение

В этой статье мы настроили простую среду непрерывной доставки для запуска и отображения статического анализа кода и отчета о тестировании в Jenkins через заданиеPipeline.

Как всегда, исходный код этой статьи можно найти вover on GitHub.