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

SPb Jenkins Meetup #0 Как начать писать плагин для Jenkins? И когда этого не делать?

SPb Jenkins Meetup #0 Как начать писать плагин для Jenkins? И когда этого не делать?

A9246eff89743db6fd53b9d83e3b9aef?s=128

Merkushev Kirill

December 09, 2015
Tweet

Transcript

  1. Не хватает расширений? Нужно ли делать своё? И как? Меркушев

    Кирилл Руководитель группы автоматизации тестирования в Яндексе #jenkins_spb 1
  2. Плагин или не плагин? Вопрос без четкого ответа #jenkins_spb 2

  3. Пишите расширение Если: Это интеграция с другим сервисом Хотите UI

    для настройки процесса Нужна публикация результатов в UI #jenkins_spb 3
  4. Не пишите расширение Если: Еще не пытались обойтись другими Задача

    проживет меньше года Используется в одной джобе #jenkins_spb 4
  5. Вместо расширения Groovy спешит на помощь! #jenkins_spb GROOVY 5

  6. #jenkins_spb Внутреннее API Синтаксис 6 Б=Безопасность

  7. Job DSL Groovy Groovy Postbuild #jenkins_spb 7

  8. Job DSL Groovy Groovy Postbuild Scriptler #jenkins_spb 8

  9. Scriptler Plugin bit.ly/scriptler #jenkins_spb 9

  10. Scriptler Plugin bit.ly/scriptler #jenkins_spb Репо с примерами Всё в одной

    админке Удобный шаг сборки Нет шага после сборки 10
  11. Groovy Postbuild Plugin bit.ly/groovy-postbuild #jenkins_spb 11

  12. Groovy Postbuild Plugin bit.ly/groovy-postbuild #jenkins_spb Скрипты хранятся «местно» Только шаг

    после сборки 12
  13. Job DSL Plugin bit.ly/job-dsl #jenkins_spb 13

  14. Job DSL Plugin bit.ly/job-dsl #jenkins_spb Причём тут MultiJob? 14

  15. Job DSL Plugin bit.ly/job-dsl #jenkins_spb 15

  16. Job DSL Plugin bit.ly/job-dsl #jenkins_spb 16

  17. Job DSL Plugin bit.ly/job-dsl #jenkins_spb 17

  18. Job DSL Plugin bit.ly/job-dsl #jenkins_spb Поддержка в ~10^32 раз легче

    Генерация под событие Всё под VCS 18
  19. Start Guide Откуда начать свой? #jenkins_spb 19

  20. jenkins-ci.org Extend Jenkins, Blog blog.qatools.ru Jenkins Plugin #jenkins_spb www.cloudbees.com/blog 20

  21. Инструменты Как начать Что это ваще?? Локальная отладка #jenkins_spb 21

  22. Maven 3+ JDK 7+ #jenkins_spb 22

  23. Hello World Plugin mvn -U org.jenkins-ci.tools:maven-hpi-plugin:create #jenkins_spb 23

  24. Структура #jenkins_spb 24

  25. HelloWorldBuilder extends Builder implements Describable<Builder>, ExtensionPoint #jenkins_spb 25

  26. Немного теории #jenkins_spb 26

  27. Словарь Describable Элемент интерфейса #jenkins_spb 27

  28. Describable Все что в UI Builder Шаг сборки #jenkins_spb 28

  29. Describable Все что в UI 2 Shell шага сборки (2

    Builder, 2 Describable) #jenkins_spb 29
  30. Словарь Describable Элемент интерфейса Descriptor Фабрика элементов #jenkins_spb 30

  31. public static final class DescriptorImpl extends BuildStepDescriptor Связь Descriptor Describable

    #jenkins_spb 31
  32. Двусторонняя связь Describable Descriptor #jenkins_spb 32

  33. Полезности Ajax doCheck[Field] doFill[Field]Items doAutocomplete[Field] #jenkins_spb 33

  34. Словарь Describable Элемент интерфейса Descriptor Фабрика элементов ExtensionPoint Точка расширения

    #jenkins_spb 34
  35. @Extension public … class DescriptorImpl #jenkins_spb 35

  36. Descriptor @Extension Descriptor Descriptor #jenkins_spb 36

  37. Extension Points Wrapper Триггер Builder Publisher #jenkins_spb 37

  38. Extension Points #jenkins_spb Action 38

  39. #jenkins_spb jenkins/view/…/job/…/3/someActionUrl/ Action Любое содержимое Любой внешний вид Любое API

    39
  40. Внешний вид #jenkins_spb 40

  41. Внешний вид src/main/resources имя_класса/config.jelly #jenkins_spb 41

  42. Jelly XML Отдельный <f:entry title="Name" field="name"> <f:textbox /> </f:entry> #jenkins_spb

    42
  43. Stapler Загрузка UI Формочки #jenkins_spb 43

  44. Запуск mvn hpi:run Можно дебажить (докинув MAVEN_OPTS)! #jenkins_spb 44

  45. Тестирование Как не тратить много времени #jenkins_spb 45

  46. Unit tests Каждый отдельный элемент в вакууме Power Mock +

    Java Agent Mockito #jenkins_spb 46
  47. Jenkins Rule Полноценный jenkins @Rule public JenkinsRule jRule = new

    JenkinsRule(); jRule.jenkins #jenkins_spb 47
  48. WebClient Для stapler и форм #jenkins_spb 48

  49. lanwen@yandex.ru #jenkins_spb 49 Меркушев Кирилл @delnariel lanwen