Slide 1

Slide 1 text

© 2020 CloudBees, Inc. All Rights Reserved. © 2020 CloudBees, Inc. All Rights Reserved. «Обновлять нельзя оставить» Управляем зависимостями в CI/CD Олег Ненашев, CloudBees @oleg_nenashev

Slide 2

Slide 2 text

© 2020 CloudBees, Inc. All Rights Reserved. > whoami @oleg_nenashev oleg-nenashev • Principal SW Engineer, CloudBees • Jenkins Core maintainer • Jenkins Board Member • CDF Ambassador 2

Slide 3

Slide 3 text

© 2020 CloudBees, Inc. All Rights Reserved. О чём доклад? V – Управление зависимостями V – На примере Java/Maven V - Cтандартные тулы X - Jenkins X - Дебри Java X - OSGi, модули, … 3

Slide 4

Slide 4 text

© 2020 CloudBees, Inc. All Rights Reserved. Что в докладе? CI/CD. И причем тут зависимости? Maven и Maven Enforcer Боты, на примере Dependabot Bill of Materials Демо 4

Slide 5

Slide 5 text

© 2020 CloudBees, Inc. All Rights Reserved. CI/CD – это процесс, а не средства Time to Market Time to Recovery 5

Slide 6

Slide 6 text

© 2020 CloudBees, Inc. All Rights Reserved. ● Ранняя интеграция и тестирование изменений ● Быстрый и частый мердж в мастер ● Автоматизация ● Тестовое покрытие ● Прозрачность статуса ● Минимальные изменения Основы Continuous Integration 6 https://martinfowler.com/articles/continuousIntegration.html

Slide 7

Slide 7 text

© 2020 CloudBees, Inc. All Rights Reserved. Сборка Merge Юнит-тесты Статический анализ Интеграционные тесты Типовой Pipeline 7 Тесты, Тесты, Тесты . . .

Slide 8

Slide 8 text

© 2020 CloudBees, Inc. All Rights Reserved. А зачем библиотеки? 8 1. Взять компоненты из библиотеки

Slide 9

Slide 9 text

© 2020 CloudBees, Inc. All Rights Reserved. Что делать пользователям? 9 1. Взять компоненты из библиотеки 2. Собрать свой велосипед проект Просто добавь клея!

Slide 10

Slide 10 text

© 2020 CloudBees, Inc. All Rights Reserved. ● Ранняя интеграция и тестирование изменений ● Автоматизация ● Быстрый и частый мердж в мастер ● Тестовое покрытие ● Прозрачность статуса ● Минимальные изменения Основы CI/CD 10

Slide 11

Slide 11 text

© 2020 CloudBees, Inc. All Rights Reserved. “Минимальные изменения”? 11

Slide 12

Slide 12 text

© 2020 CloudBees, Inc. All Rights Reserved. Dependency Hell 12

Slide 13

Slide 13 text

© 2020 CloudBees, Inc. All Rights Reserved. Lib 1 Lib 2 Lib 3 Plugin 1 Plugin 2 Plugin 3 Lib 5 Lib 6 Plugin 4 иногда 13 + Средства разработки Наш проект Lib 4

Slide 14

Slide 14 text

© 2020 CloudBees, Inc. All Rights Reserved. 14 IT IS OVER 9000 DEPENDENCIES

Slide 15

Slide 15 text

© 2020 CloudBees, Inc. All Rights Reserved. Pipeline Pipeline’ов 15 Сборка Merge Юнит-тесты Статический анализ Интеграционные тесты

Slide 16

Slide 16 text

© 2020 CloudBees, Inc. All Rights Reserved. Pipeline Pipeline’ов 16 Сборка Merge Юнит-тесты Статический анализ Интеграционные тесты Сборка Merge Юнит-тесты Статический анализ Интеграционные тесты Сборка Merge Юнит-тесты Статический анализ Интеграционные тесты

Slide 17

Slide 17 text

© 2020 CloudBees, Inc. All Rights Reserved. Pipeline Pipeline’ов 17 Сборка Merge Юнит-тесты Статический анализ Интеграционные тесты Сборка Merge Юнит-тесты Статический анализ Интеграционные тесты Сборка Merge Юнит-тесты Статический анализ Интеграционные тесты Сборка Merge Юнит-тесты Статический анализ Интеграционные тесты Сборка Merge Юнит-тесты Статический анализ Интеграционные тесты Сборка Merge Юнит-тесты Статический анализ Интеграционные тесты

Slide 18

Slide 18 text

© 2020 CloudBees, Inc. All Rights Reserved. Как часто Вы обновляете зависимости? 18

Slide 19

Slide 19 text

© 2020 CloudBees, Inc. All Rights Reserved. Обновлять нельзя,оставить aka “работает – не трогай” 19

Slide 20

Slide 20 text

© 2020 CloudBees, Inc. All Rights Reserved. Почему? Сложно тестировать Нет времени И так сойдет 20

Slide 21

Slide 21 text

© 2020 CloudBees, Inc. All Rights Reserved. Не сойдёт! Нужны новые фичи Багфиксы Security-апдейты  21 https://snyk.io/vuln/maven:com.fasterxml.jackson.core%3Ajackson-databind Пример: jackson-databind

Slide 22

Slide 22 text

© 2020 CloudBees, Inc. All Rights Reserved. Апдейт - возможность прочувствовать технический долг 22

Slide 23

Slide 23 text

© 2020 CloudBees, Inc. All Rights Reserved. 23 https://2019.jokerconf.com/2019/talks/rjhhmugp5tzqbmlmg3mcm/

Slide 24

Slide 24 text

© 2020 CloudBees, Inc. All Rights Reserved. Экосистема Jenkins Ядро и модули Плагины Дистрибутивы Подпроекты Библиотеки Средства разработки 24

Slide 25

Slide 25 text

© 2020 CloudBees, Inc. All Rights Reserved. Java 10 PoC - июнь 2018 Java 11 PoC - сентябрь 2018 Java 11 RC - декабрь 2018 Java 11 GA - март 2019 25 ? ? ? TODO: • Обновить несколько библиотек • Автоматизировать тесты

Slide 26

Slide 26 text

© 2020 CloudBees, Inc. All Rights Reserved. Обновление и бинарная совместимость 26

Slide 27

Slide 27 text

© 2020 CloudBees, Inc. All Rights Reserved. Наши “друзья” ClassNotFoundException MethodNotFoundException AbstractMethodError LinkageError 27

Slide 28

Slide 28 text

© 2020 CloudBees, Inc. All Rights Reserved. Тулы не работают Нет фиксов для Java 9+ Несовместимые изменения Библиотеки требуют Java 9+ Мёртвые проекты 28

Slide 29

Slide 29 text

© 2020 CloudBees, Inc. All Rights Reserved. Апдейт - возможность прочувствовать технический долг 29

Slide 30

Slide 30 text

© 2020 CloudBees, Inc. All Rights Reserved. Обновлять,нельзя оставить 30

Slide 31

Slide 31 text

© 2020 CloudBees, Inc. All Rights Reserved. Rocket Science Переписать всё на Go/Kotlin/{ваш язык} Перейти на микросервисы OSGi Модули Java … нет 31

Slide 32

Slide 32 text

© 2020 CloudBees, Inc. All Rights Reserved. 32 Источник изображения: https://newsroom.unsw.edu.au/news/health/we- can-shrink-covid-19-curve-rather-just-flatten-it Производительность команды Обновляем всё разом Обновляем последовательно Число задач

Slide 33

Slide 33 text

© 2020 CloudBees, Inc. All Rights Reserved. 33 Источник изображения: https://newsroom.unsw.edu.au/news/health/we- can-shrink-covid-19-curve-rather-just-flatten-it ДЕДЛАЙН Производительность команды Обновляем последовательно Обновляем всё разом Число задач

Slide 34

Slide 34 text

© 2020 CloudBees, Inc. All Rights Reserved. 34 ? ? ? > mvn versions:display-dependency-updates

Slide 35

Slide 35 text

© 2020 CloudBees, Inc. All Rights Reserved. Maven-плагины The following dependencies in Dependencies have newer versions: [INFO] com.github.tomakehurst:wiremock ....................... 1.57 -> 2.26.3 [INFO] com.tngtech.java:junit-dataprovider ................. 1.10.0 -> 1.13.1 [INFO] io.jenkins:configuration-as-code ........................ 1.32 -> 1.41 [INFO] io.rest-assured:rest-assured .......................... 3.3.0 -> 4.3.0 [INFO] org.apache.commons:commons-lang3 ......................... 3.7 -> 3.10 [INFO] org.hamcrest:hamcrest-core ................................ 2.1 -> 2.2 [INFO] org.hamcrest:hamcrest-library ............................. 2.1 -> 2.2 [INFO] org.jenkins-ci.modules:instance-identity .................. 2.1 -> 2.2 … > mvn versions:display-dependency-updates 35

Slide 36

Slide 36 text

© 2020 CloudBees, Inc. All Rights Reserved. Наши тулы ● Maven /Gradle ● Parent POM ● Maven SureFire, JUnit/etc. ● SpotBugs, Animal Sniffer, Maven Enforcer ● JaCoCo и Cobertura ● Свои Maven-плагины 36

Slide 37

Slide 37 text

© 2020 CloudBees, Inc. All Rights Reserved. Maven не контролирует зависимости по умолчанию 37

Slide 38

Slide 38 text

© 2020 CloudBees, Inc. All Rights Reserved. Транзитивные зависимости… 38 ПОТОМУ ЧТО MAVEN

Slide 39

Slide 39 text

© 2020 CloudBees, Inc. All Rights Reserved. 39 Барух Садогурский, Кирилл Толкачев — Баттл инструментов для сборки — Maven vs Gradle ПОТОМУ ЧТО MAVEN

Slide 40

Slide 40 text

© 2020 CloudBees, Inc. All Rights Reserved. ● Maven Enforcer Plugin https://maven.apache.org/enforcer/maven-enforcer-plugin/ ● Extra Enforcer Rules Plugin https://www.mojohaus.org/extra-enforcer-rules/ Что поможет? 40

Slide 41

Slide 41 text

© 2020 CloudBees, Inc. All Rights Reserved. Транзитивные зависимости ● И снова Maven Enforcer Plugin ● requireUpperBoundDeps commons-logging:commons-logging com.google.code.findbugs:jsr305 net.java.dev.jna:jna 41

Slide 42

Slide 42 text

© 2020 CloudBees, Inc. All Rights Reserved. ● banDuplicateClasses ● enforceBytecodeVersion ● banCircularDependencies ● … Extra Enforcer Rules Plugin 42 https://www.mojohaus.org/extra-enforcer-rules/

Slide 43

Slide 43 text

© 2020 CloudBees, Inc. All Rights Reserved. maven-enforcer-plugin … 1.8 test … … extra-enforcer-rules … 43

Slide 44

Slide 44 text

© 2020 CloudBees, Inc. All Rights Reserved. 44 maven-enforcer-plugin … 1.8 test … … extra-enforcer-rules … 1.8 test

Slide 45

Slide 45 text

© 2020 CloudBees, Inc. All Rights Reserved. Автоматизация зависимостей? 45

Slide 46

Slide 46 text

© 2020 CloudBees, Inc. All Rights Reserved. https://github.com/marketplace 46

Slide 47

Slide 47 text

47 Dependabot, Renovate, Greenkeeper, etc.

Slide 48

Slide 48 text

© 2020 CloudBees, Inc. All Rights Reserved. Dependabot 48 dependabot.com, acquired by GitHub

Slide 49

Slide 49 text

© 2020 CloudBees, Inc. All Rights Reserved. Dependabot ● CLI – для GitHub, GitLab и Azure DevOps ● SaaS + GitHub App 49 dependabot.com, acquired by GitHub

Slide 50

Slide 50 text

© 2020 CloudBees, Inc. All Rights Reserved. Automatic scans and updates 50

Slide 51

Slide 51 text

51

Slide 52

Slide 52 text

52

Slide 53

Slide 53 text

© 2020 CloudBees, Inc. All Rights Reserved. Шаг 1. Enable Dependabot 53

Slide 54

Slide 54 text

© 2020 CloudBees, Inc. All Rights Reserved. Шаг 2. Доступ к репозиториям 54

Slide 55

Slide 55 text

© 2020 CloudBees, Inc. All Rights Reserved. Шаг 3. Настройка 55

Slide 56

Slide 56 text

© 2020 CloudBees, Inc. All Rights Reserved. Шаг 4. Подождём… 56

Slide 57

Slide 57 text

© 2020 CloudBees, Inc. All Rights Reserved. Dependabot – это не только pull request 57

Slide 58

Slide 58 text

© 2020 CloudBees, Inc. All Rights Reserved. Release notes 58

Slide 59

Slide 59 text

© 2020 CloudBees, Inc. All Rights Reserved. CommentOps 59

Slide 60

Slide 60 text

© 2020 CloudBees, Inc. All Rights Reserved. Configuration-as-Code 60

Slide 61

Slide 61 text

© 2020 CloudBees, Inc. All Rights Reserved. Продвинутые опции Фильтрация артефактов Фильтрация версий 61

Slide 62

Slide 62 text

© 2020 CloudBees, Inc. All Rights Reserved. Продвинутые опции Фильтрация артефактов Фильтрация версий Validated merge 62

Slide 63

Slide 63 text

© 2020 CloudBees, Inc. All Rights Reserved. Продвинутые опции Фильтрация артефактов Фильтрация версий Validated merge Интеграция с GitHub Security 63

Slide 64

Slide 64 text

© 2020 CloudBees, Inc. All Rights Reserved. Dependabot в Jenkins • Начали использовать в 2019 • 80+ репозиториев • 4500+ pull requests • Экономит время! 64

Slide 65

Slide 65 text

© 2020 CloudBees, Inc. All Rights Reserved. 65 https://jenkins.devstats.cd.foundation/

Slide 66

Slide 66 text

© 2020 CloudBees, Inc. All Rights Reserved. Стоимость CI/CD Ресурсы для сборки API rate limit Время на ревью 66

Slide 67

Slide 67 text

© 2020 CloudBees, Inc. All Rights Reserved. Bill of Materials (BOM) 67

Slide 68

Slide 68 text

© 2020 CloudBees, Inc. All Rights Reserved. BOM – “Библиотека зависимостей” 68 Наш проект Bill of Materials Зависимости и версии • Версионирование • Интеграционные тесты • Анализ зависимостей

Slide 69

Slide 69 text

© 2020 CloudBees, Inc. All Rights Reserved. Включаем BOM в Maven ${GROUP_ID} ${ARTIFACT_ID} ${VERSION_ID} import pom 69

Slide 70

Slide 70 text

© 2020 CloudBees, Inc. All Rights Reserved. Используем BOM в Maven … org.jenkins-ci.plugins.workflow workflow-cps test … 70 ВЕРСИИ НЕТ!

Slide 71

Slide 71 text

© 2020 CloudBees, Inc. All Rights Reserved. Пример https://github.com/jenkinsci/jenkins/tree/master/bom https://github.com/jenkinsci/bom 71

Slide 72

Slide 72 text

© 2020 CloudBees, Inc. All Rights Reserved. CI/CD – Pipeline of Pipeline 72 Bill of Materials • Версионирование • Интеграционные тесты • Анализ зависимостей • CI/CD Наш проект Внешние зависимости

Slide 73

Slide 73 text

© 2020 CloudBees, Inc. All Rights Reserved. Demo! https://github.com/jenkinsci/jenkinsfile-runner 73

Slide 74

Slide 74 text

© 2020 CloudBees, Inc. All Rights Reserved. ● От апдейта не убежишь ● Зависимости - отличная возможность прочувствовать технический долг ● Обновляться лучше постоянно ● Есть средства разработки Заключение 74

Slide 75

Slide 75 text

© 2020 CloudBees, Inc. All Rights Reserved. Что Вы можете сделать после доклада? Добавьте Maven Enforcer и правила в свой проект Попробуйте Dependabot или подобные тулы 75

Slide 76

Slide 76 text

© 2020 CloudBees, Inc. All Rights Reserved. Contacts: E-mail: [email protected] GitHub: oleg-nenashev Twitter: @oleg_nenashev ВОПРОСЫ? 76