SlideShare a Scribd company logo
1 of 47
Download to read offline
Тёмная сторона Jenkins.
Стабилизируем Remoting
Олег Ненашев
CloudBees, Inc.
St. Petersburg Jenkins Meetup
11 мая 2017
© 2017 CloudBees, Inc. All Rights Reserved. 2
Обо мне
@oleg_nenashev
oleg-nenashev
© 2017 CloudBees, Inc. All Rights Reserved. 3
Oleg’s
“Hall of
Shame”(c)
• Jenkins Core
• Windows Service
Wrapper
• Плагины
• Remoting
© 2017 CloudBees, Inc. All Rights Reserved. 4
• Распределенная система – ключ к успеху Hudson
• Remoting – движок под капотом Hudson/Jenkins
• “Свой велосипед”
Что такое Remoting?
© 2017 CloudBees, Inc. All Rights Reserved. 5
Кто видел ТАКОЕ?
© 2017 CloudBees, Inc. All Rights Reserved. 6
А ТАКОЕ?
© 2017 CloudBees, Inc. All Rights Reserved. 7
Что делает?
• Исполняемый файл агентов (slave.jar)
• Протоколы работы с мастером
• Classloading
• Удаленные потоки ввода-вывода
• Мониторинг агентов
© 2017 CloudBees, Inc. All Rights Reserved. 8
Олег и Remoting
• Боролся с Remoting в Intel/Sitronics
• Патчил Remoting в Synopsys, свой форк
• Стал ментейнером Remoting в CloudBees
• Поддерживаю Remoting в рабочее (и не
очень) время
• Поддержка/консалтинг
© 2017 CloudBees, Inc. All Rights Reserved. 9
üКАК РАБОТАЕТ REMOTING?
üЧТО ДЕЛАТЬ, КОГДА ОН НЕ РАБОТАЕТ?
О чём доклад?
© 2017 CloudBees, Inc. All Rights Reserved. 10
Disclaimer
• Презентация отражает личное мнение докладчика
• Личное мнение докладчика может не совпадать с позицией
сообщества Jenkins или компании CloudBees
• Презентация не является тренингом
• Обсуждение Remoting на афтерпати может содержать
ненормативную лексику
© 2017 CloudBees, Inc. All Rights Reserved. 11
Как работает сборка в Jenkins?
Мастер АгентRPC вызовы
Вызов системной команды
RemoteInputStream/
RemoteOutputStream
Недостающие классы
© 2017 CloudBees, Inc. All Rights Reserved. 12
Использование Remoting
• Мастер <=> Агенты
• 4 протокола
• Мастер ó CLI (Deprecated)
• https://jenkins.io/blog/2017/04/11/new-cli/
• Агент ó Maven в Maven Project Plugin
• Через Maven Interceptors
• CloudBees Jenkins Enterprise:
• Client master ó CloudBees Jenkins Operations Center
© 2017 CloudBees, Inc. All Rights Reserved. 13
Протоколы Remoting
• JNLP1 – устаревший протокол
• JNLP2 – NIO, нет шифрования
• JNLP3 – нет NIO, шифрование, нестабилен
• JNLP4 – NIO, шифрование через TLS
• CLI1 – нет шифрования
• CLI2 – с шифрованием
• Ping – тестовый протокол
© 2017 CloudBees, Inc. All Rights Reserved. 14
Настройка протоколов • До 2.19.1 – Через System Property
• После – Настройки безопасности
© 2017 CloudBees, Inc. All Rights Reserved. 15
Рекомендованная конфигурация
• JNLP1 – устаревший протокол
• JNLP2 – NIO, нет шифрования
• JNLP3 – нет NIO, шифрование, нестабилен
• JNLP4 – NIO, шифрование через TLS
• CLI1 - нет шифрования
• CLI2 – с шифрованием
• Ping – тестовый протокол
2.32+
2.54+
© 2017 CloudBees, Inc. All Rights Reserved. 16
JNLP-агент
JVM мастера JVM агента
HTTP/HTTPS
/tcpAgentListener
remoting.jarjenkins.war JNLP-протокол
• Docker: jenkinsci/jnlp-slave
• Swarm Plugin: собственный JAR
© 2017 CloudBees, Inc. All Rights Reserved. 17
SSH агент Jenkins
JVM мастера JVM агента
SSH-Сервер
jenkins.war
JNLP-протокол
• SSH Slaves Plugin
• CloudBees NIO SSH Slaves Plugin
• Docker: jenkinsci/ssh-slave
SSH-connect
SSH
JRE/JDK
remoting.jar
Настройки
• Авто-обновление
Remoting с мастера
© 2017 CloudBees, Inc. All Rights Reserved. 18
JNLP-агент + Windows Service
• Windows Agent Installer Module в ядре
• Бонус - Windows Agents Plugin
(установка через DCOM)
JVM мастера Агент
HTTP/HTTPS
/tcpAgentListener
JVM + slave.jar
jenkins.war
JNLP-протокол
HTTPS/HTTP
remoting.jar
WinSW
(jenkins-slave.exe)
jenkins-slave.exe
• Обновление Remoting
• Логгирование по-умолчанию
• Failover
© 2017 CloudBees, Inc. All Rights Reserved. 19
ТОП-5 Проблем Remoting
Зависит от TCP
“Убегающие” процессы в
Windows
Нет авто-обновления Remoting
Логи не пишутся на диск по-
умолчанию
Приоритизация трафика
© 2017 CloudBees, Inc. All Rights Reserved. 20
Проблемы: разрыв соединения
Разрыв TCP-
соединения
PingThread Мониторинг
агентов
• Использование диска
• Версия Remoting
Баг Remoting
© 2017 CloudBees, Inc. All Rights Reserved. 21
Баги Remoting
• Плохая диагностика до Jenkins 2.37Общее
• Баги в управлении сессиями
• RejectedExecutionEx в ExecutorService убивает ВСЕ
соединения (.../remoting/pull/156 )
JNLP1/JNLP2
• Скорее не работает…
• Errata: .../remoting/blob/master/docs/protocols.md -
jnlp3-connect-errata
JNLP3
• Пока не замечено
• Jenkins 2.27+JNLP4
© 2017 CloudBees, Inc. All Rights Reserved. 22
PingThread – что за зверь?
© 2017 CloudBees, Inc. All Rights Reserved. 23
•Вызывает Ping с таймаутом в 4 минуты?
Remoting PingThread
© 2017 CloudBees, Inc. All Rights Reserved. 24
•Что он делает?
•Вызывает Ping с таймаутом в 4 минуты?
Remoting PingThread
© 2017 CloudBees, Inc. All Rights Reserved. 25
Ping Thread
Пустой RPC-запрос на агент
Пересылка запроса через сеть
Ожидание в очереди агента
Исполнение в ThreadPool
Доставка результата
© 2017 CloudBees, Inc. All Rights Reserved. 26
•“Давайте отключим PingThread”
Famous Last Words
© 2017 CloudBees, Inc. All Rights Reserved. 27
•Почему он может отвалиться?
TCP…
© 2017 CloudBees, Inc. All Rights Reserved. 28
7 Кругов Виртуализации
https://www.slideshare.net/OlegNenashev/
spb-jenkins-meetup-5-jenkins-in-da-cloud
Какое-то железо
vSphere/AWS/…
ОС *nix
Docker
ОС *nix
JVM
© 2017 CloudBees, Inc. All Rights Reserved. 29
Какое-то железо
vSphere/AWS/…
ОС *nix
Docker
ОС *nix
JVM
7 Кругов Виртуализации
© 2017 CloudBees, Inc. All Rights Reserved. 30
Какое-то железо
vSphere/AWS/…
ОС *nix
Docker
ОС *nix
JVM
А
ТАК
?
Какое-то железо
vSphere/AWS/…
ОС *nix
Docker
ОС *nix
JVM
Какая-то сеть
(роутеры, VPN,
dial-up, proxy…)
TCP
© 2017 CloudBees, Inc. All Rights Reserved. 31
Боремся с Tcp
TCP Retransmission timeout
• *nix: https://unix.stackexchange.com/questions/210367/changing-
the-tcp-rto-value-in-linux
• Windows: https://support.microsoft.com/en-us/help/170359/how-
to-modify-the-tcp-ip-maximum-retransmission-time-out
Конфигурация сети
• Внешний мониторинг
• Разделение management- и storage- сетей
• Мастер ó Агент – в отдельную сеть
© 2017 CloudBees, Inc. All Rights Reserved. 32
Проблема
JENKINS-23271
• ”Слишком умный” Garbage Collector в Java 8
• RemoteInvocationHandler => command.start().join()
• Jenkins 2.35+
© 2017 CloudBees, Inc. All Rights Reserved. 33
Проблема: Старый Remoting на агентах
• ОбновляютсяSSH агенты
• НЕ обновляются до Jenkins 2.50Windows Service
агенты
• НЕ обновляютсяJNLP-агенты
• Фиксы не доходят
• Нет новых протоколов (JNLP4)
• Хуже диагностика
• Возможные проблемы совместимости с мастером
© 2017 CloudBees, Inc. All Rights Reserved. 34
Как проверить версию Remoting?
• System Information на страничке агента
• Version Column Plugin: https://plugins.jenkins.io/versioncolumn
© 2017 CloudBees, Inc. All Rights Reserved. 35
Проблема
Windows Service Другое
© 2017 CloudBees, Inc. All Rights Reserved. 36
Новый Windows Service Wrapper
• Jenkins 2.50+
• Для новых агентов
•Авто-обновление агентов
•Runaway Process Killer
• Для старых – нужна настройка
https://github.com/kohsuke/winsw/
© 2017 CloudBees, Inc. All Rights Reserved. 37
Обновляем старые Windows-агенты
Обновили ядро или WinSW
Обновили slave.jar
Обновили jenkins-slave.xml
Руководство:
https://github.com/jenkinsci/windows-slave-installer-
module#upgrading-old-agents
© 2017 CloudBees, Inc. All Rights Reserved. 38
jenkins-slave.xml
<service>
<id>@ID@</id>
<name>Jenkins agent (@ID@)</name>
<description>This service runs an agent for Jenkins automation server.</description>
<executable>@JAVA@</executable>
<arguments>-Xrs @VMARGS@ -jar "%BASE%slave.jar" @ARGS@</arguments>
<logmode>rotate</logmode>
<onfailure action="restart" />
<download from="JENKINS_URL/jnlpJars/slave.jar" to="%BASE%slave.jar"/>
<extensions>
<extension id="killOnStartup" enabled="true” className="winsw.Plugins.
RunawayProcessKiller.RunawayProcessKillerExtension">
<pidfile>%BASE%jenkins_agent.pid</pidfile>
<stopTimeout>5000</stopTimeout>
<stopParentFirst>false</stopParentFirst>
</extension>
</extensions>
</service>
https://github.com/jenkinsci/windows-slave-installer-module/…
/src/main/resources/org/jenkinsci/modules/windows_slave_inst
aller/jenkins-slave.xml
© 2017 CloudBees, Inc. All Rights Reserved. 39
Итого…
Что делать?
© 2017 CloudBees, Inc. All Rights Reserved. 40
А что делать-то?
• Для Windows – LTS next-2.46.x
Обновляться на
последний LTS c
JNLP4
• TRetransmission < TPing
• PingThread отключать не стоит
Смотреть таймауты
(TCP Retransmission
+ Ping)
• Ждать Remoting 3.8 с
конфигурируемым JUL
Настраивать
логгирование
© 2017 CloudBees, Inc. All Rights Reserved. 41
Remoting. Планы…
© 2017 CloudBees, Inc. All Rights Reserved. 42
Сейчас
• Новый релиз – 3.8
• .../remoting/blob/master/CHANGELOG.md#38
• Документация
•https://github.com/jenkinsci/remoting/
• Рабочие директории в Remoting (JENKINS-44108)
• Логгирование агентов по-умолчанию (JENKINS-39369)
© 2017 CloudBees, Inc. All Rights Reserved. 43
Что дальше?
© 2017 CloudBees, Inc. All Rights Reserved. 44
В будущем
• TCP-free Remoting?
• Автообновление агентов? (JENKINS-44099)
• Автообновление Remoting в ядре?
© 2017 CloudBees, Inc. All Rights Reserved. 45
Итого
• Remoting – фактор риска в Jenkins
• Remoting не работает ”из коробки” на
больших инстансах
• Remoting можно стабилизировать
• Надо обновляться
• 75% проблем - инфраструктура
© 2017 CloudBees, Inc. All Rights Reserved. 46
Спасибо!
Контакты:
E-mail: onenashev@cloudbees.com
GitHub: oleg-nenashev
Twitter: @oleg_nenashev
Software at the speed of ideas
THANK YOU!
www.cloudbees.com

More Related Content

What's hot

Ловля сетями. Инструменты отладки сетевых запросов приложений / Дмитрий Рыбак...
Ловля сетями. Инструменты отладки сетевых запросов приложений / Дмитрий Рыбак...Ловля сетями. Инструменты отладки сетевых запросов приложений / Дмитрий Рыбак...
Ловля сетями. Инструменты отладки сетевых запросов приложений / Дмитрий Рыбак...Ontico
 
Scala, Play Framework и SBT для быстрого прототипирования и разработки веб-пр...
Scala, Play Framework и SBT для быстрого прототипирования и разработки веб-пр...Scala, Play Framework и SBT для быстрого прототипирования и разработки веб-пр...
Scala, Play Framework и SBT для быстрого прототипирования и разработки веб-пр...Magneta AI
 
"Redux: the best for isomorphic apps", Денис Измайлов, MoscowJS 25
"Redux: the best for isomorphic apps", Денис Измайлов, MoscowJS 25"Redux: the best for isomorphic apps", Денис Измайлов, MoscowJS 25
"Redux: the best for isomorphic apps", Денис Измайлов, MoscowJS 25MoscowJS
 
Максим Пугачев
Максим ПугачевМаксим Пугачев
Максим ПугачевCodeFest
 
Zero Downtime PHP Deployment with Envoyer And Forge
Zero Downtime PHP Deployment with Envoyer And ForgeZero Downtime PHP Deployment with Envoyer And Forge
Zero Downtime PHP Deployment with Envoyer And ForgeYehor Herasymchuk
 
DevOps-трансформация Альфа-Банка / Антон Исанин (Альфа-Банк)
DevOps-трансформация Альфа-Банка / Антон Исанин (Альфа-Банк)DevOps-трансформация Альфа-Банка / Антон Исанин (Альфа-Банк)
DevOps-трансформация Альфа-Банка / Антон Исанин (Альфа-Банк)Ontico
 
Puppet development kit and best practices
Puppet development kit and best practicesPuppet development kit and best practices
Puppet development kit and best practicesIgor Kurochkin
 
Caché github continuous intergration
Caché github continuous intergrationCaché github continuous intergration
Caché github continuous intergrationInterSystems
 
Приемы Сontinuous Integration при разработке приложений на Caché
Приемы Сontinuous Integration при разработке приложений на CachéПриемы Сontinuous Integration при разработке приложений на Caché
Приемы Сontinuous Integration при разработке приложений на CachéInterSystems CEE
 
CodeFest 2012. Курносова Т. и Баяндин А. — Selenium2: полевые испытания
CodeFest 2012. Курносова Т. и Баяндин А. — Selenium2: полевые испытанияCodeFest 2012. Курносова Т. и Баяндин А. — Selenium2: полевые испытания
CodeFest 2012. Курносова Т. и Баяндин А. — Selenium2: полевые испытанияCodeFest
 
Test driven development in net
Test driven development in netTest driven development in net
Test driven development in netAlex Tumanoff
 
Kubernetes
KubernetesKubernetes
KubernetesSQALab
 
Путь DevOps в «Parallels» / Константин Назаров (Parallels)
Путь DevOps в «Parallels» / Константин Назаров (Parallels)Путь DevOps в «Parallels» / Константин Назаров (Parallels)
Путь DevOps в «Parallels» / Константин Назаров (Parallels)Ontico
 
Sql server clr integration
Sql server clr integration Sql server clr integration
Sql server clr integration Alex Tumanoff
 
Continuous Delivery, или волшебная кнопка для релизов по запросу, Денис Яковл...
Continuous Delivery, или волшебная кнопка для релизов по запросу, Денис Яковл...Continuous Delivery, или волшебная кнопка для релизов по запросу, Денис Яковл...
Continuous Delivery, или волшебная кнопка для релизов по запросу, Денис Яковл...Ontico
 
Тестируем мобильное приложение в суровых реалиях Интернета
Тестируем мобильное приложение в суровых реалиях ИнтернетаТестируем мобильное приложение в суровых реалиях Интернета
Тестируем мобильное приложение в суровых реалиях ИнтернетаSQALab
 
Пряморукий DNS: делаем правильно / Лев Николаев (Макснет)
Пряморукий DNS: делаем правильно / Лев Николаев (Макснет)Пряморукий DNS: делаем правильно / Лев Николаев (Макснет)
Пряморукий DNS: делаем правильно / Лев Николаев (Макснет)Ontico
 
Алексей Романчук «Реактивное программирование»
Алексей Романчук «Реактивное программирование»Алексей Романчук «Реактивное программирование»
Алексей Романчук «Реактивное программирование»DevDay
 
Артем Маринов "Сегментируем 600 млн. пользователей в режиме реального времени...
Артем Маринов "Сегментируем 600 млн. пользователей в режиме реального времени...Артем Маринов "Сегментируем 600 млн. пользователей в режиме реального времени...
Артем Маринов "Сегментируем 600 млн. пользователей в режиме реального времени...Tanya Denisyuk
 

What's hot (19)

Ловля сетями. Инструменты отладки сетевых запросов приложений / Дмитрий Рыбак...
Ловля сетями. Инструменты отладки сетевых запросов приложений / Дмитрий Рыбак...Ловля сетями. Инструменты отладки сетевых запросов приложений / Дмитрий Рыбак...
Ловля сетями. Инструменты отладки сетевых запросов приложений / Дмитрий Рыбак...
 
Scala, Play Framework и SBT для быстрого прототипирования и разработки веб-пр...
Scala, Play Framework и SBT для быстрого прототипирования и разработки веб-пр...Scala, Play Framework и SBT для быстрого прототипирования и разработки веб-пр...
Scala, Play Framework и SBT для быстрого прототипирования и разработки веб-пр...
 
"Redux: the best for isomorphic apps", Денис Измайлов, MoscowJS 25
"Redux: the best for isomorphic apps", Денис Измайлов, MoscowJS 25"Redux: the best for isomorphic apps", Денис Измайлов, MoscowJS 25
"Redux: the best for isomorphic apps", Денис Измайлов, MoscowJS 25
 
Максим Пугачев
Максим ПугачевМаксим Пугачев
Максим Пугачев
 
Zero Downtime PHP Deployment with Envoyer And Forge
Zero Downtime PHP Deployment with Envoyer And ForgeZero Downtime PHP Deployment with Envoyer And Forge
Zero Downtime PHP Deployment with Envoyer And Forge
 
DevOps-трансформация Альфа-Банка / Антон Исанин (Альфа-Банк)
DevOps-трансформация Альфа-Банка / Антон Исанин (Альфа-Банк)DevOps-трансформация Альфа-Банка / Антон Исанин (Альфа-Банк)
DevOps-трансформация Альфа-Банка / Антон Исанин (Альфа-Банк)
 
Puppet development kit and best practices
Puppet development kit and best practicesPuppet development kit and best practices
Puppet development kit and best practices
 
Caché github continuous intergration
Caché github continuous intergrationCaché github continuous intergration
Caché github continuous intergration
 
Приемы Сontinuous Integration при разработке приложений на Caché
Приемы Сontinuous Integration при разработке приложений на CachéПриемы Сontinuous Integration при разработке приложений на Caché
Приемы Сontinuous Integration при разработке приложений на Caché
 
CodeFest 2012. Курносова Т. и Баяндин А. — Selenium2: полевые испытания
CodeFest 2012. Курносова Т. и Баяндин А. — Selenium2: полевые испытанияCodeFest 2012. Курносова Т. и Баяндин А. — Selenium2: полевые испытания
CodeFest 2012. Курносова Т. и Баяндин А. — Selenium2: полевые испытания
 
Test driven development in net
Test driven development in netTest driven development in net
Test driven development in net
 
Kubernetes
KubernetesKubernetes
Kubernetes
 
Путь DevOps в «Parallels» / Константин Назаров (Parallels)
Путь DevOps в «Parallels» / Константин Назаров (Parallels)Путь DevOps в «Parallels» / Константин Назаров (Parallels)
Путь DevOps в «Parallels» / Константин Назаров (Parallels)
 
Sql server clr integration
Sql server clr integration Sql server clr integration
Sql server clr integration
 
Continuous Delivery, или волшебная кнопка для релизов по запросу, Денис Яковл...
Continuous Delivery, или волшебная кнопка для релизов по запросу, Денис Яковл...Continuous Delivery, или волшебная кнопка для релизов по запросу, Денис Яковл...
Continuous Delivery, или волшебная кнопка для релизов по запросу, Денис Яковл...
 
Тестируем мобильное приложение в суровых реалиях Интернета
Тестируем мобильное приложение в суровых реалиях ИнтернетаТестируем мобильное приложение в суровых реалиях Интернета
Тестируем мобильное приложение в суровых реалиях Интернета
 
Пряморукий DNS: делаем правильно / Лев Николаев (Макснет)
Пряморукий DNS: делаем правильно / Лев Николаев (Макснет)Пряморукий DNS: делаем правильно / Лев Николаев (Макснет)
Пряморукий DNS: делаем правильно / Лев Николаев (Макснет)
 
Алексей Романчук «Реактивное программирование»
Алексей Романчук «Реактивное программирование»Алексей Романчук «Реактивное программирование»
Алексей Романчук «Реактивное программирование»
 
Артем Маринов "Сегментируем 600 млн. пользователей в режиме реального времени...
Артем Маринов "Сегментируем 600 млн. пользователей в режиме реального времени...Артем Маринов "Сегментируем 600 млн. пользователей в режиме реального времени...
Артем Маринов "Сегментируем 600 млн. пользователей в режиме реального времени...
 

Similar to SPb Jenkins Meetup #6. Тёмная сторона Jenkins. Стабилизируем Remoting

SPb Jenkins Meetup #5. Jenkins in da Cloud. Внутренности
SPb Jenkins Meetup #5. Jenkins in da Cloud. ВнутренностиSPb Jenkins Meetup #5. Jenkins in da Cloud. Внутренности
SPb Jenkins Meetup #5. Jenkins in da Cloud. ВнутренностиOleg Nenashev
 
Jenkins 2.0: Организуем тестирование в составе Continuous Delivery
Jenkins 2.0: Организуем тестирование в составе Continuous DeliveryJenkins 2.0: Организуем тестирование в составе Continuous Delivery
Jenkins 2.0: Организуем тестирование в составе Continuous DeliverySQALab
 
Net core and linux in production
Net core and linux in productionNet core and linux in production
Net core and linux in productionAnatoly Popov
 
Как мы собираем проекты в выделенном окружении в Windows Docker
Как мы собираем проекты в выделенном окружении в Windows DockerКак мы собираем проекты в выделенном окружении в Windows Docker
Как мы собираем проекты в выделенном окружении в Windows DockerPositive Hack Days
 
A popular DNS security overview
A popular DNS security overviewA popular DNS security overview
A popular DNS security overviewPhilipp Kulin
 
Moscow Jenkins Meetup #1. Pipeline для инженеров. Обзор экосистемы
Moscow Jenkins Meetup #1. Pipeline для инженеров. Обзор экосистемыMoscow Jenkins Meetup #1. Pipeline для инженеров. Обзор экосистемы
Moscow Jenkins Meetup #1. Pipeline для инженеров. Обзор экосистемыOleg Nenashev
 
«Механизмы обновления платформы и окружений пользователей в Jelastic»
«Механизмы обновления платформы и окружений пользователей в Jelastic»«Механизмы обновления платформы и окружений пользователей в Jelastic»
«Механизмы обновления платформы и окружений пользователей в Jelastic»Nata_Churda
 
Building deployment pipeline - DevOps way
Building deployment pipeline - DevOps wayBuilding deployment pipeline - DevOps way
Building deployment pipeline - DevOps wayAndrey Rebrov
 
Переезжаем с Zabbix на Prometheus / Василий Озеров (fevlake)
Переезжаем с Zabbix на Prometheus / Василий Озеров (fevlake)Переезжаем с Zabbix на Prometheus / Василий Озеров (fevlake)
Переезжаем с Zabbix на Prometheus / Василий Озеров (fevlake)Ontico
 
Эксплуатация container-based-инфраструктур / Николай Сивко (okmeter.io)
Эксплуатация container-based-инфраструктур / Николай Сивко (okmeter.io)Эксплуатация container-based-инфраструктур / Николай Сивко (okmeter.io)
Эксплуатация container-based-инфраструктур / Николай Сивко (okmeter.io)Ontico
 
Управление облачной инфраструктурой
Управление облачной инфраструктуройУправление облачной инфраструктурой
Управление облачной инфраструктуройdddpaul
 
"How to build powerful CI / CD based on GitLab and Docker", Aleksandr Matkovs...
"How to build powerful CI / CD based on GitLab and Docker", Aleksandr Matkovs..."How to build powerful CI / CD based on GitLab and Docker", Aleksandr Matkovs...
"How to build powerful CI / CD based on GitLab and Docker", Aleksandr Matkovs...Provectus
 
Что нового в nginx? / Максим Дунин (Nginx, Inc.)
Что нового в nginx? / Максим Дунин (Nginx, Inc.)Что нового в nginx? / Максим Дунин (Nginx, Inc.)
Что нового в nginx? / Максим Дунин (Nginx, Inc.)Ontico
 
Эволюция процесса деплоя в проекте / Денис Яковлев (2ГИС)
Эволюция процесса деплоя в проекте / Денис Яковлев (2ГИС)Эволюция процесса деплоя в проекте / Денис Яковлев (2ГИС)
Эволюция процесса деплоя в проекте / Денис Яковлев (2ГИС)Ontico
 
Эволюция процесса деплоя в проекте — Денис Яковлев, 2ГИС
Эволюция процесса деплоя в проекте — Денис Яковлев, 2ГИСЭволюция процесса деплоя в проекте — Денис Яковлев, 2ГИС
Эволюция процесса деплоя в проекте — Денис Яковлев, 2ГИС2ГИС Технологии
 
"Девопс - это не только для программистов. Практические примеры из жизни одно...
"Девопс - это не только для программистов. Практические примеры из жизни одно..."Девопс - это не только для программистов. Практические примеры из жизни одно...
"Девопс - это не только для программистов. Практические примеры из жизни одно...it-people
 
обзор архитектуры и подсистем деплоя и мониторинга
обзор архитектуры и подсистем деплоя и мониторингаобзор архитектуры и подсистем деплоя и мониторинга
обзор архитектуры и подсистем деплоя и мониторингаКонстантин Никифоров
 
Обзор архитектуры и подсистем деплоя и мониторинга. Как инженеры делают систе...
Обзор архитектуры и подсистем деплоя и мониторинга. Как инженеры делают систе...Обзор архитектуры и подсистем деплоя и мониторинга. Как инженеры делают систе...
Обзор архитектуры и подсистем деплоя и мониторинга. Как инженеры делают систе...Ontico
 
Микросервисный фронтенд
Микросервисный фронтендМикросервисный фронтенд
Микросервисный фронтендViacheslav Slinko
 

Similar to SPb Jenkins Meetup #6. Тёмная сторона Jenkins. Стабилизируем Remoting (20)

SPb Jenkins Meetup #5. Jenkins in da Cloud. Внутренности
SPb Jenkins Meetup #5. Jenkins in da Cloud. ВнутренностиSPb Jenkins Meetup #5. Jenkins in da Cloud. Внутренности
SPb Jenkins Meetup #5. Jenkins in da Cloud. Внутренности
 
Jenkins 2.0: Организуем тестирование в составе Continuous Delivery
Jenkins 2.0: Организуем тестирование в составе Continuous DeliveryJenkins 2.0: Организуем тестирование в составе Continuous Delivery
Jenkins 2.0: Организуем тестирование в составе Continuous Delivery
 
Sivko
SivkoSivko
Sivko
 
Net core and linux in production
Net core and linux in productionNet core and linux in production
Net core and linux in production
 
Как мы собираем проекты в выделенном окружении в Windows Docker
Как мы собираем проекты в выделенном окружении в Windows DockerКак мы собираем проекты в выделенном окружении в Windows Docker
Как мы собираем проекты в выделенном окружении в Windows Docker
 
A popular DNS security overview
A popular DNS security overviewA popular DNS security overview
A popular DNS security overview
 
Moscow Jenkins Meetup #1. Pipeline для инженеров. Обзор экосистемы
Moscow Jenkins Meetup #1. Pipeline для инженеров. Обзор экосистемыMoscow Jenkins Meetup #1. Pipeline для инженеров. Обзор экосистемы
Moscow Jenkins Meetup #1. Pipeline для инженеров. Обзор экосистемы
 
«Механизмы обновления платформы и окружений пользователей в Jelastic»
«Механизмы обновления платформы и окружений пользователей в Jelastic»«Механизмы обновления платформы и окружений пользователей в Jelastic»
«Механизмы обновления платформы и окружений пользователей в Jelastic»
 
Building deployment pipeline - DevOps way
Building deployment pipeline - DevOps wayBuilding deployment pipeline - DevOps way
Building deployment pipeline - DevOps way
 
Переезжаем с Zabbix на Prometheus / Василий Озеров (fevlake)
Переезжаем с Zabbix на Prometheus / Василий Озеров (fevlake)Переезжаем с Zabbix на Prometheus / Василий Озеров (fevlake)
Переезжаем с Zabbix на Prometheus / Василий Озеров (fevlake)
 
Эксплуатация container-based-инфраструктур / Николай Сивко (okmeter.io)
Эксплуатация container-based-инфраструктур / Николай Сивко (okmeter.io)Эксплуатация container-based-инфраструктур / Николай Сивко (okmeter.io)
Эксплуатация container-based-инфраструктур / Николай Сивко (okmeter.io)
 
Управление облачной инфраструктурой
Управление облачной инфраструктуройУправление облачной инфраструктурой
Управление облачной инфраструктурой
 
"How to build powerful CI / CD based on GitLab and Docker", Aleksandr Matkovs...
"How to build powerful CI / CD based on GitLab and Docker", Aleksandr Matkovs..."How to build powerful CI / CD based on GitLab and Docker", Aleksandr Matkovs...
"How to build powerful CI / CD based on GitLab and Docker", Aleksandr Matkovs...
 
Что нового в nginx? / Максим Дунин (Nginx, Inc.)
Что нового в nginx? / Максим Дунин (Nginx, Inc.)Что нового в nginx? / Максим Дунин (Nginx, Inc.)
Что нового в nginx? / Максим Дунин (Nginx, Inc.)
 
Эволюция процесса деплоя в проекте / Денис Яковлев (2ГИС)
Эволюция процесса деплоя в проекте / Денис Яковлев (2ГИС)Эволюция процесса деплоя в проекте / Денис Яковлев (2ГИС)
Эволюция процесса деплоя в проекте / Денис Яковлев (2ГИС)
 
Эволюция процесса деплоя в проекте — Денис Яковлев, 2ГИС
Эволюция процесса деплоя в проекте — Денис Яковлев, 2ГИСЭволюция процесса деплоя в проекте — Денис Яковлев, 2ГИС
Эволюция процесса деплоя в проекте — Денис Яковлев, 2ГИС
 
"Девопс - это не только для программистов. Практические примеры из жизни одно...
"Девопс - это не только для программистов. Практические примеры из жизни одно..."Девопс - это не только для программистов. Практические примеры из жизни одно...
"Девопс - это не только для программистов. Практические примеры из жизни одно...
 
обзор архитектуры и подсистем деплоя и мониторинга
обзор архитектуры и подсистем деплоя и мониторингаобзор архитектуры и подсистем деплоя и мониторинга
обзор архитектуры и подсистем деплоя и мониторинга
 
Обзор архитектуры и подсистем деплоя и мониторинга. Как инженеры делают систе...
Обзор архитектуры и подсистем деплоя и мониторинга. Как инженеры делают систе...Обзор архитектуры и подсистем деплоя и мониторинга. Как инженеры делают систе...
Обзор архитектуры и подсистем деплоя и мониторинга. Как инженеры делают систе...
 
Микросервисный фронтенд
Микросервисный фронтендМикросервисный фронтенд
Микросервисный фронтенд
 

SPb Jenkins Meetup #6. Тёмная сторона Jenkins. Стабилизируем Remoting

  • 1. Тёмная сторона Jenkins. Стабилизируем Remoting Олег Ненашев CloudBees, Inc. St. Petersburg Jenkins Meetup 11 мая 2017
  • 2. © 2017 CloudBees, Inc. All Rights Reserved. 2 Обо мне @oleg_nenashev oleg-nenashev
  • 3. © 2017 CloudBees, Inc. All Rights Reserved. 3 Oleg’s “Hall of Shame”(c) • Jenkins Core • Windows Service Wrapper • Плагины • Remoting
  • 4. © 2017 CloudBees, Inc. All Rights Reserved. 4 • Распределенная система – ключ к успеху Hudson • Remoting – движок под капотом Hudson/Jenkins • “Свой велосипед” Что такое Remoting?
  • 5. © 2017 CloudBees, Inc. All Rights Reserved. 5 Кто видел ТАКОЕ?
  • 6. © 2017 CloudBees, Inc. All Rights Reserved. 6 А ТАКОЕ?
  • 7. © 2017 CloudBees, Inc. All Rights Reserved. 7 Что делает? • Исполняемый файл агентов (slave.jar) • Протоколы работы с мастером • Classloading • Удаленные потоки ввода-вывода • Мониторинг агентов
  • 8. © 2017 CloudBees, Inc. All Rights Reserved. 8 Олег и Remoting • Боролся с Remoting в Intel/Sitronics • Патчил Remoting в Synopsys, свой форк • Стал ментейнером Remoting в CloudBees • Поддерживаю Remoting в рабочее (и не очень) время • Поддержка/консалтинг
  • 9. © 2017 CloudBees, Inc. All Rights Reserved. 9 üКАК РАБОТАЕТ REMOTING? üЧТО ДЕЛАТЬ, КОГДА ОН НЕ РАБОТАЕТ? О чём доклад?
  • 10. © 2017 CloudBees, Inc. All Rights Reserved. 10 Disclaimer • Презентация отражает личное мнение докладчика • Личное мнение докладчика может не совпадать с позицией сообщества Jenkins или компании CloudBees • Презентация не является тренингом • Обсуждение Remoting на афтерпати может содержать ненормативную лексику
  • 11. © 2017 CloudBees, Inc. All Rights Reserved. 11 Как работает сборка в Jenkins? Мастер АгентRPC вызовы Вызов системной команды RemoteInputStream/ RemoteOutputStream Недостающие классы
  • 12. © 2017 CloudBees, Inc. All Rights Reserved. 12 Использование Remoting • Мастер <=> Агенты • 4 протокола • Мастер ó CLI (Deprecated) • https://jenkins.io/blog/2017/04/11/new-cli/ • Агент ó Maven в Maven Project Plugin • Через Maven Interceptors • CloudBees Jenkins Enterprise: • Client master ó CloudBees Jenkins Operations Center
  • 13. © 2017 CloudBees, Inc. All Rights Reserved. 13 Протоколы Remoting • JNLP1 – устаревший протокол • JNLP2 – NIO, нет шифрования • JNLP3 – нет NIO, шифрование, нестабилен • JNLP4 – NIO, шифрование через TLS • CLI1 – нет шифрования • CLI2 – с шифрованием • Ping – тестовый протокол
  • 14. © 2017 CloudBees, Inc. All Rights Reserved. 14 Настройка протоколов • До 2.19.1 – Через System Property • После – Настройки безопасности
  • 15. © 2017 CloudBees, Inc. All Rights Reserved. 15 Рекомендованная конфигурация • JNLP1 – устаревший протокол • JNLP2 – NIO, нет шифрования • JNLP3 – нет NIO, шифрование, нестабилен • JNLP4 – NIO, шифрование через TLS • CLI1 - нет шифрования • CLI2 – с шифрованием • Ping – тестовый протокол 2.32+ 2.54+
  • 16. © 2017 CloudBees, Inc. All Rights Reserved. 16 JNLP-агент JVM мастера JVM агента HTTP/HTTPS /tcpAgentListener remoting.jarjenkins.war JNLP-протокол • Docker: jenkinsci/jnlp-slave • Swarm Plugin: собственный JAR
  • 17. © 2017 CloudBees, Inc. All Rights Reserved. 17 SSH агент Jenkins JVM мастера JVM агента SSH-Сервер jenkins.war JNLP-протокол • SSH Slaves Plugin • CloudBees NIO SSH Slaves Plugin • Docker: jenkinsci/ssh-slave SSH-connect SSH JRE/JDK remoting.jar Настройки • Авто-обновление Remoting с мастера
  • 18. © 2017 CloudBees, Inc. All Rights Reserved. 18 JNLP-агент + Windows Service • Windows Agent Installer Module в ядре • Бонус - Windows Agents Plugin (установка через DCOM) JVM мастера Агент HTTP/HTTPS /tcpAgentListener JVM + slave.jar jenkins.war JNLP-протокол HTTPS/HTTP remoting.jar WinSW (jenkins-slave.exe) jenkins-slave.exe • Обновление Remoting • Логгирование по-умолчанию • Failover
  • 19. © 2017 CloudBees, Inc. All Rights Reserved. 19 ТОП-5 Проблем Remoting Зависит от TCP “Убегающие” процессы в Windows Нет авто-обновления Remoting Логи не пишутся на диск по- умолчанию Приоритизация трафика
  • 20. © 2017 CloudBees, Inc. All Rights Reserved. 20 Проблемы: разрыв соединения Разрыв TCP- соединения PingThread Мониторинг агентов • Использование диска • Версия Remoting Баг Remoting
  • 21. © 2017 CloudBees, Inc. All Rights Reserved. 21 Баги Remoting • Плохая диагностика до Jenkins 2.37Общее • Баги в управлении сессиями • RejectedExecutionEx в ExecutorService убивает ВСЕ соединения (.../remoting/pull/156 ) JNLP1/JNLP2 • Скорее не работает… • Errata: .../remoting/blob/master/docs/protocols.md - jnlp3-connect-errata JNLP3 • Пока не замечено • Jenkins 2.27+JNLP4
  • 22. © 2017 CloudBees, Inc. All Rights Reserved. 22 PingThread – что за зверь?
  • 23. © 2017 CloudBees, Inc. All Rights Reserved. 23 •Вызывает Ping с таймаутом в 4 минуты? Remoting PingThread
  • 24. © 2017 CloudBees, Inc. All Rights Reserved. 24 •Что он делает? •Вызывает Ping с таймаутом в 4 минуты? Remoting PingThread
  • 25. © 2017 CloudBees, Inc. All Rights Reserved. 25 Ping Thread Пустой RPC-запрос на агент Пересылка запроса через сеть Ожидание в очереди агента Исполнение в ThreadPool Доставка результата
  • 26. © 2017 CloudBees, Inc. All Rights Reserved. 26 •“Давайте отключим PingThread” Famous Last Words
  • 27. © 2017 CloudBees, Inc. All Rights Reserved. 27 •Почему он может отвалиться? TCP…
  • 28. © 2017 CloudBees, Inc. All Rights Reserved. 28 7 Кругов Виртуализации https://www.slideshare.net/OlegNenashev/ spb-jenkins-meetup-5-jenkins-in-da-cloud Какое-то железо vSphere/AWS/… ОС *nix Docker ОС *nix JVM
  • 29. © 2017 CloudBees, Inc. All Rights Reserved. 29 Какое-то железо vSphere/AWS/… ОС *nix Docker ОС *nix JVM 7 Кругов Виртуализации
  • 30. © 2017 CloudBees, Inc. All Rights Reserved. 30 Какое-то железо vSphere/AWS/… ОС *nix Docker ОС *nix JVM А ТАК ? Какое-то железо vSphere/AWS/… ОС *nix Docker ОС *nix JVM Какая-то сеть (роутеры, VPN, dial-up, proxy…) TCP
  • 31. © 2017 CloudBees, Inc. All Rights Reserved. 31 Боремся с Tcp TCP Retransmission timeout • *nix: https://unix.stackexchange.com/questions/210367/changing- the-tcp-rto-value-in-linux • Windows: https://support.microsoft.com/en-us/help/170359/how- to-modify-the-tcp-ip-maximum-retransmission-time-out Конфигурация сети • Внешний мониторинг • Разделение management- и storage- сетей • Мастер ó Агент – в отдельную сеть
  • 32. © 2017 CloudBees, Inc. All Rights Reserved. 32 Проблема JENKINS-23271 • ”Слишком умный” Garbage Collector в Java 8 • RemoteInvocationHandler => command.start().join() • Jenkins 2.35+
  • 33. © 2017 CloudBees, Inc. All Rights Reserved. 33 Проблема: Старый Remoting на агентах • ОбновляютсяSSH агенты • НЕ обновляются до Jenkins 2.50Windows Service агенты • НЕ обновляютсяJNLP-агенты • Фиксы не доходят • Нет новых протоколов (JNLP4) • Хуже диагностика • Возможные проблемы совместимости с мастером
  • 34. © 2017 CloudBees, Inc. All Rights Reserved. 34 Как проверить версию Remoting? • System Information на страничке агента • Version Column Plugin: https://plugins.jenkins.io/versioncolumn
  • 35. © 2017 CloudBees, Inc. All Rights Reserved. 35 Проблема Windows Service Другое
  • 36. © 2017 CloudBees, Inc. All Rights Reserved. 36 Новый Windows Service Wrapper • Jenkins 2.50+ • Для новых агентов •Авто-обновление агентов •Runaway Process Killer • Для старых – нужна настройка https://github.com/kohsuke/winsw/
  • 37. © 2017 CloudBees, Inc. All Rights Reserved. 37 Обновляем старые Windows-агенты Обновили ядро или WinSW Обновили slave.jar Обновили jenkins-slave.xml Руководство: https://github.com/jenkinsci/windows-slave-installer- module#upgrading-old-agents
  • 38. © 2017 CloudBees, Inc. All Rights Reserved. 38 jenkins-slave.xml <service> <id>@ID@</id> <name>Jenkins agent (@ID@)</name> <description>This service runs an agent for Jenkins automation server.</description> <executable>@JAVA@</executable> <arguments>-Xrs @VMARGS@ -jar "%BASE%slave.jar" @ARGS@</arguments> <logmode>rotate</logmode> <onfailure action="restart" /> <download from="JENKINS_URL/jnlpJars/slave.jar" to="%BASE%slave.jar"/> <extensions> <extension id="killOnStartup" enabled="true” className="winsw.Plugins. RunawayProcessKiller.RunawayProcessKillerExtension"> <pidfile>%BASE%jenkins_agent.pid</pidfile> <stopTimeout>5000</stopTimeout> <stopParentFirst>false</stopParentFirst> </extension> </extensions> </service> https://github.com/jenkinsci/windows-slave-installer-module/… /src/main/resources/org/jenkinsci/modules/windows_slave_inst aller/jenkins-slave.xml
  • 39. © 2017 CloudBees, Inc. All Rights Reserved. 39 Итого… Что делать?
  • 40. © 2017 CloudBees, Inc. All Rights Reserved. 40 А что делать-то? • Для Windows – LTS next-2.46.x Обновляться на последний LTS c JNLP4 • TRetransmission < TPing • PingThread отключать не стоит Смотреть таймауты (TCP Retransmission + Ping) • Ждать Remoting 3.8 с конфигурируемым JUL Настраивать логгирование
  • 41. © 2017 CloudBees, Inc. All Rights Reserved. 41 Remoting. Планы…
  • 42. © 2017 CloudBees, Inc. All Rights Reserved. 42 Сейчас • Новый релиз – 3.8 • .../remoting/blob/master/CHANGELOG.md#38 • Документация •https://github.com/jenkinsci/remoting/ • Рабочие директории в Remoting (JENKINS-44108) • Логгирование агентов по-умолчанию (JENKINS-39369)
  • 43. © 2017 CloudBees, Inc. All Rights Reserved. 43 Что дальше?
  • 44. © 2017 CloudBees, Inc. All Rights Reserved. 44 В будущем • TCP-free Remoting? • Автообновление агентов? (JENKINS-44099) • Автообновление Remoting в ядре?
  • 45. © 2017 CloudBees, Inc. All Rights Reserved. 45 Итого • Remoting – фактор риска в Jenkins • Remoting не работает ”из коробки” на больших инстансах • Remoting можно стабилизировать • Надо обновляться • 75% проблем - инфраструктура
  • 46. © 2017 CloudBees, Inc. All Rights Reserved. 46 Спасибо! Контакты: E-mail: onenashev@cloudbees.com GitHub: oleg-nenashev Twitter: @oleg_nenashev
  • 47. Software at the speed of ideas THANK YOU! www.cloudbees.com