Link
Embed
Share
Beginning
This slide
Copy link URL
Copy link URL
Copy iframe embed code
Copy iframe embed code
Copy javascript embed code
Copy javascript embed code
Share
Tweet
Share
Tweet
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