Upgrade to Pro — share decks privately, control downloads, hide ads and more …

SPb Jenkins Meetup #7. О тестировании плагинов ...

SPb Jenkins Meetup #7. О тестировании плагинов Jenkins в ci.jenkins.io

Митап: https://www.meetup.com/St-Petersburg-Jenkins-Meetup/events/241306920/

"Я расскажу и покажу, как мы организуем тестирование плагинов в проекте Jenkins… с помощью Jenkins. Как мы интегрируемся со стандартными инструментами Java/Maven-стэка? Как построены наши библиотеки Pipeline, и почему в большинстве случаев нам достаточно однострочных Jenkinsfile?".

Ключевые слова: Pipeline, Docker, Maven, JUnit, FindBugs

Oleg Nenashev

July 25, 2017
Tweet

More Decks by Oleg Nenashev

Other Decks in Programming

Transcript

  1. © 2017 CloudBees, Inc. All Rights Reserved. 3 @oleg_nenashev, @jenkins_spb

    Oleg’s “Hall of Shame”(c) • Jenkins Core • Windows Service Wrapper • Плагины • Remoting
  2. © 2017 CloudBees, Inc. All Rights Reserved. 4 @oleg_nenashev, @jenkins_spb

    üКАК ПОСТРОЕНО ТЕСТИРОВАНИЕ ПЛАГИНОВ? üCI В ПРОЕКТЕ JENKINS üКАК МЫ ИСПОЛЬЗУЕМ PIPELINE? üДЕМО О чём доклад?
  3. © 2017 CloudBees, Inc. All Rights Reserved. 5 @oleg_nenashev, @jenkins_spb

    Плагины в Jenkins >1400 <100 >1200 Поддерживается “core team”
  4. © 2017 CloudBees, Inc. All Rights Reserved. 6 @oleg_nenashev, @jenkins_spb

    • Экосистема построена на Maven • Много интеграций • Maven Project Plugin L - интерсепторы, Remoting, …
  5. © 2017 CloudBees, Inc. All Rights Reserved. 8 @oleg_nenashev, @jenkins_spb

    Сборка плагина – это просто •mvn clean verify •mvn clean package •mvn release:prepare release:perform
  6. © 2017 CloudBees, Inc. All Rights Reserved. 9 @oleg_nenashev, @jenkins_spb

    Parent POM? •До 1.642 – часть ядра •После – Plugin POM 2.x •https://github.com/jenkinsci/plugin-pom/ •Независимость от версий ядра и Java
  7. © 2017 CloudBees, Inc. All Rights Reserved. 10 @oleg_nenashev, @jenkins_spb

    Сборка в Maven Запуск по-умолчанию: • junit, findbugs • maven-enforcer, animal-sniffer, • javadoc-lint • nodejs-lint, nodejs test Через профиль: • jacoco Больше – в плагинах Plugin POM
  8. © 2017 CloudBees, Inc. All Rights Reserved. 11 @oleg_nenashev, @jenkins_spb

    Unit-тесты Тулы Jenkins Test Harness • Тесты в проекта • JUnit 3 / 4 • Junit не так прост: • JenkinsRule • @TestExtension • HtmlUnit • DockerRule (home-made) https://github.com/jenkinsci/jenkins-test-harness
  9. © 2017 CloudBees, Inc. All Rights Reserved. 12 @oleg_nenashev, @jenkins_spb

    https://github.com/jenkinsci/ssh-slaves-plugin/ https://github.com/jenkinsci/ownership-plugin/
  10. © 2017 CloudBees, Inc. All Rights Reserved. 13 @oleg_nenashev, @jenkins_spb

    Unit-тесты Тулы Jenkins Test Harness Acceptance Test Harness • Selenium • Cucumber • Docker • … https://github.com/jenkinsci/acceptance-test-harness
  11. © 2017 CloudBees, Inc. All Rights Reserved. 14 @oleg_nenashev, @jenkins_spb

    Unit-тесты Тулы Jenkins Test Harness Acceptance Test Harness https://github.com/jenkinsci/plugin-compat-tester Plugin Compat Tester • Матрицы совместимости ядра и плагинов
  12. Наш CI... • Для плагинов запускаем только JTH • ATH

    и PCT занимают дни – только для релиз-кандидатов ядра L
  13. © 2017 CloudBees, Inc. All Rights Reserved. 17 @oleg_nenashev, @jenkins_spb

    node() { git checkout URL sh “mvn clean package verify” } Как протестировать плагин?
  14. © 2017 CloudBees, Inc. All Rights Reserved. 18 @oleg_nenashev, @jenkins_spb

    •Нет хостинга Jenkins для open-source •Можно собирать плагины на Travis, да… •Требуется много ресурсов Где протестировать плагин?
  15. © 2017 CloudBees, Inc. All Rights Reserved. 19 @oleg_nenashev, @jenkins_spb

    Было • CloudBees DEV@Cloud • https://jenkins.ci.cloudbees.com/ • CI для плагинов и ядра • Freestyle Project • Maven Plugin • Не полный open-source • CloudBees Templates Plugin – сотни похожих репозиториев • CI для инфраструктуры проекта Jenkins • Разрозненные инстансы • Полностью open-source
  16. © 2017 CloudBees, Inc. All Rights Reserved. 20 @oleg_nenashev, @jenkins_spb

    Становится • CloudBees DEV@Cloud • https://jenkins.ci.cloudbees.com/ • CI для плагинов и ядра • Freestyle Project • Maven Plugin • Не полный open-source • CloudBees Templates Plugin – сотни похожих репозиториев • CI для инфраструктуры проекта Jenkins • Разрозненные инстансы • Полностью open-source
  17. © 2017 CloudBees, Inc. All Rights Reserved. 21 @oleg_nenashev, @jenkins_spb

    Что изменилось? • Спонсорская инфраструктура • На порядок больше ресурсов Jenkins Pipeline • Библиотеки • GitHub Organization Folder
  18. © 2017 CloudBees, Inc. All Rights Reserved. 22 @oleg_nenashev, @jenkins_spb

    Было • CloudBees DEV@Cloud • https://jenkins.ci.cloudbees.com/ • CI для плагинов и ядра • Freestyle Project • Maven Plugin • Не полный open-source • CloudBees Templates Plugin – сотни похожих репозиториев • Хостинг для модулей проекта: • https://ci.jenkins.io/ • Полностью open-source • Jenkins Pipeline • Больше ресурсов для CI: • Linux/Windows • Docker
  19. © 2017 CloudBees, Inc. All Rights Reserved. 23 @oleg_nenashev, @jenkins_spb

    Наши Jenkinsfile https://github.com/jenkins-infra/pipeline-library/
  20. © 2017 CloudBees, Inc. All Rights Reserved. 24 @oleg_nenashev, @jenkins_spb

    Что мы собираем? Минимально совместимое ядро Последний LTS Последний Weekly Ядро: ОС: Linux (Docker) Windows Java: Java 8 Java 7 По-умолчанию Opt-in Source Compatibility не гарантирована – ByteCode Transformer, etc.
  21. © 2017 CloudBees, Inc. All Rights Reserved. 27 @oleg_nenashev, @jenkins_spb

    Pipeline Shared Libraries • Библиотеки находятся в SCM • Версионирование • Области видимости ▸System-wide ▸Folder ▸Job
  22. © 2017 CloudBees, Inc. All Rights Reserved. 28 @oleg_nenashev, @jenkins_spb

    Библиотеки в Scripted Pipeline com.mycorp.libs.make Jenkinsfile buildPlugin() buildPlugin() – глобальная переменная Utility - классы com.mycorp.libs.coverity com.mycorp.libs.cppunit Глобальная библиотека
  23. © 2017 CloudBees, Inc. All Rights Reserved. 31 @oleg_nenashev, @jenkins_spb

    buildPlugin(). Как это работает? … Чистый Pipeline DSL
  24. © 2017 CloudBees, Inc. All Rights Reserved. 33 @oleg_nenashev, @jenkins_spb

    Pipeline. Средства Разработки IDE Integration Unit Test Framework Static Analysis Library manager Debug tools Documen- tation Easy script deployment Freestyle => Pipeline Converter Good Not enough Missing
  25. © 2017 CloudBees, Inc. All Rights Reserved. 34 @oleg_nenashev, @jenkins_spb

    Как я работаю? Intellij IDEA Filesystem SCM Plugin (alpha) • Syntax file • Документация Тестовый Jenkins Source Code (local .git repos) • Configuration-as-Code • “Почти как Production” • Свои настройки библиотек • Репозитории с библиотеками • Jenkinsfile
  26. © 2017 CloudBees, Inc. All Rights Reserved. 35 @oleg_nenashev, @jenkins_spb

    Файл Синтаксиса https://st-g.de/2016/08/jenkins- pipeline-autocompletion-in-intellij
  27. © 2017 CloudBees, Inc. All Rights Reserved. 36 @oleg_nenashev, @jenkins_spb

    Filesystem SCM Plugin (1.21-alpha-1) • Версия доступна в экспериментальном Update Center Объявление библиотеки в SCM !!!
  28. © 2017 CloudBees, Inc. All Rights Reserved. 37 @oleg_nenashev, @jenkins_spb

    Тестирование • Нет официального тестового фреймворка • https://github.com/lesfurets/JenkinsPipelineUnit • Подробности и демо – в докладе Станислава “mvn verify” был вызван… И вызов успешен… Для Jenkinsfile…
  29. © 2017 CloudBees, Inc. All Rights Reserved. 38 @oleg_nenashev, @jenkins_spb

    https://hub.docker.com/r/onenashev/ demo-jenkins-config-as-code/
  30. © 2017 CloudBees, Inc. All Rights Reserved. 39 @oleg_nenashev, @jenkins_spb

    Итого • Pipeline значительно упрощает разработку и поддержку системы • Шаблонизация • Библиотеки • Organization Folders • Не обязательно строить сложные Pipeline для “простых” задач • Не хватает средств разработки
  31. © 2017 CloudBees, Inc. All Rights Reserved. 40 @oleg_nenashev, @jenkins_spb

    Ссылки • CI: https://ci.jenkins.io/ • Тулы: • Parent POM: https://github.com/jenkinsci/plugin-pom/ • Pipeline Lib: https://github.com/jenkins-infra/pipeline-library/ • Демо: • https://hub.docker.com/r/onenashev/demo-jenkins-config-as-code/ • https://github.com/oleg-nenashev/demo-jenkins-config-as-code
  32. © 2017 CloudBees, Inc. All Rights Reserved. 41 @oleg_nenashev, @jenkins_spb

    Спасибо! Контакты: E-mail: [email protected] GitHub: oleg-nenashev Twitter: @oleg_nenashev