SlideShare a Scribd company logo
Jenkins Cloud
Jenkins in Docker in Mesos in...
@tolkv
2
@lavcraft
Jenkins Cloud
● Amazon EC2
Jenkins Cloud
● Amazon EC2
● Eucalyptus
Jenkins Cloud
● Amazon EC2
● Eucalyptus
● Docker
● Mesos
Jenkins Cloud
● Amazon EC2
● Eucalyptus
● Docker
● Mesos
Jenkins Cloud
● Amazon EC2
● Eucalyptus
● Docker
● Mesos
Что дает:
● Jenkins Master в каждый дом(проект)
● Shared Slaves
● = Jenkins as a Service
Предпосылки
● Jenkins Master – не самый стабильный
Предпосылки
● Jenkins Master – не самый стабильный
● Каждый хочет установить свой плагин
Предпосылки
● Jenkins Master – не самый стабильный
● Каждый хочет установить свой плагин
● И настроить “правильно”
Предпосылки
● Jenkins Master – не самый стабильный
● Каждый хочет установить свой плагин
● И настроить “правильно”
● И вообще сделать всео “по уму”
Хитрость
● Гды вы запускаете Jenkins?
Хитрость
● Гды вы запускаете Jenkins?
● На каких серверах запускать jenkins slave?
Проект $
Ресурсы на проект
Prod
App1
App2
App3
Db1
Db2
Db3
Проект $
Ресурсы на проект
Prod
App1
App2
App3
Db1
Db2
Db3
Dev
App1
App2
Db1
Проект $
Ресурсы на проект
Prod
App1
App2
App3
Db1
Db2
Db3
Dev
App1
App2
Db1
Infra
Mon1
Mon2
Проект $
Ресурсы на проект
Prod Dev Infra
Mon1
Mon2
Проект $
Ресурсы на проект
Prod Dev Infra
Mon1
Mon2
Jenkins
Resources
Проект $
Ресурсы на проект
Prod Dev Infra
Mon1
Mon2
Jenkins
Resources
Хитрость
● Гды вы запускаете Jenkins?
● На каких серверах запускать jenkins slave?
● А почему бы не запускать билды на разработческих стендах?
Jenkins в docker in mesos in ...
С чего начать
* Что каждый может сделать придя домой
Подходы
Раш
Подходы
Рациональный подход
Подходы
VS
Подходы
Подходы
Что имеется
● Docker
Что имеется
● Docker
● Mesos
Что имеется
● Docker
● Mesos
● Maratrhon
Что имеется
● Docker
● Mesos
● Maratrhon
● zookeeper …
● …
Jenkins
Jenkins
Jenkins Master
Jenkins
Jenkins Master Jenkins Slave
Запихаем в Docker
Запихаем в Docker
● Уже есть оффициальный на docker hub
https://hub.docker.com/_/jenkins/
● Отлично! Запускаем!
docker run -p 8080:8080 -it jenkins
Запихаем в Docker
● Уже есть оффициальный на docker hub
https://hub.docker.com/_/jenkins/
● Отлично! Запускаем!
docker run -p 8080:8080 -it jenkins
● А как же плагины? Давайте разбираться!
Начнем с Docker
https://github.com/jenkinsci/docker/blob/master/README.md#preinstalling-plugins
Dockerfile
FROM jenkins:2.32.1
COPY plugins.txt /usr/share/jenkins/ref/
RUN /usr/local/bin/plugins.sh /usr/share/jenkins/ref/plugins.txt
Dockerfile
FROM jenkins:2.32.1
COPY plugins.txt /usr/share/jenkins/ref/
RUN /usr/local/bin/plugins.sh /usr/share/jenkins/ref/plugins.txt
Начнем с Docker
$ docker build .
Начнем с Docker
$ cat plugins.txt
handlebars:1.1.1
icon-shim:2.0.3
ivy:1.27.1
jackson2-api:2.7.3
javadoc:1.4
jquery-detached:1.2.1
junit:1.19
ldap:1.14
mailer:1.18
mapdb-api:1.0.9.0
marathon:1.4.0
matrix-auth:1.4
matrix-project:1.8
maven-plugin:2.14
mesos:0.14.0
metrics:3.1.2.9
momentjs:1.1.1
pam-auth:1.3
pipeline-build-step:2.4
pipeline-graph-analysis:1.3
pipeline-input-step:2.5
Где взять plugins.txt
$ cd $JENKINS_HOME/plugins
Где взять plugins.txt
$ cd $JENKINS_HOME/plugins
$ tree
├── <PLUGIN_NAME>
│ ├── META-INF
│ │ ├── MANIFEST.MF
Где взять plugins.txt
$ cd $JENKINS_HOME/plugins
$ tree
├── <PLUGIN_NAME>
│ ├── META-INF
│ │ ├── MANIFEST.MF
Где взять plugins.txt
$ cd $JENKINS_HOME/plugins
$ tree
├── <PLUGIN_NAME>
│ ├── META-INF
│ │ ├── MANIFEST.MF
$ cat <PLUGIN_NAME>/META-INF/MANIFEST.MF
Где взять plugins.txt
$ cd $JENKINS_HOME/plugins
$ tree
├── <PLUGIN_NAME>
│ ├── META-INF
│ │ ├── MANIFEST.MF
$ cat <PLUGIN_NAME>/META-INF/MANIFEST.MF
Manifest-Version: 1.0
Archiver-Version: Plexus Archiver
Url:
https://wiki.jenkins-ci.org/display/JENKINS/Pipeline+API+Plugin
Plugin-Version: 2.8
…
Где взять plugins.txt
$ cd $JENKINS_HOME/plugins
$ tree
├── <PLUGIN_NAME>
│ ├── META-INF
│ │ ├── MANIFEST.MF
$ cat <PLUGIN_NAME>/META-INF/MANIFEST.MF
Manifest-Version: 1.0
Archiver-Version: Plexus Archiver
Url:
https://wiki.jenkins-ci.org/display/JENKINS/Pipeline+API+Plugi
n
Plugin-Version: 2.8
…
Где взять plugins.txt
for i in `MANIFEST.MF for all plugins`;
do
done
Где взять plugins.txt
for i in `find -d $JENKINS_HOME/plugins -name "MANIFEST.MF"`;
do
done
Где взять plugins.txt
for i in `find -d $JENKINS_HOME/plugins -name "MANIFEST.MF"`;
do
# Plugin-Version: 2.8
v=EXTRACT VERSION FROM FILE <plugin>/META-INF/MANIFEST.MF
done
Где взять plugins.txt
for i in `find -d $JENKINS_HOME/plugins -name "MANIFEST.MF"`;
do
# Plugin-Version: 2.8
v=$(cat $i| grep Plugin-Ver | cut -d':' -f2 | tr -d ' ');
done
Где взять plugins.txt
for i in `find -d $JENKINS_HOME/plugins -name "MANIFEST.MF"`;
do
# Plugin-Version: 2.8
v=$(cat $i| grep Plugin-Ver | cut -d':' -f2 | tr -d ' ');
done
Где взять plugins.txt
for i in `find -d $JENKINS_HOME/plugins -name "MANIFEST.MF"`;
do
# Plugin-Version: 2.8
v=$(cat $i| grep Plugin-Ver | cut -d':' -f2 | tr -d ' ');
done
Где взять plugins.txt
for i in `find -d $JENKINS_HOME/plugins -name "MANIFEST.MF"`;
do
# Plugin-Version: 2.8
v=$(cat $i| grep Plugin-Ver | cut -d':' -f2 | tr -d ' ');
done
Где взять plugins.txt
for i in `find -d $JENKINS_HOME/plugins -name "MANIFEST.MF"`;
do
v=$(cat $i| grep Plugin-Ver | cut -d':' -f2 | tr -d ' ');
# $i = ./workflow-api/META-INF/MANIFEST.MF
done
Где взять plugins.txt
for i in `find -d $JENKINS_HOME/plugins -name "MANIFEST.MF"`;
do
v=$(cat $i| grep Plugin-Ver | cut -d':' -f2 | tr -d ' ');
# ./workflow-api/META-INF/MANIFEST.MF
mod=EXTRACT PLUGIN NAME
done
Где взять plugins.txt
for i in `find -d $JENKINS_HOME/plugins -name "MANIFEST.MF"`;
do
v=$(cat $i| grep Plugin-Ver | cut -d':' -f2 | tr -d ' ');
# ./workflow-api/META-INF/MANIFEST.MF
mod=$(echo $i | cut -d'/' -f2);
done
Где взять plugins.txt
for i in `find -d $JENKINS_HOME/plugins -name "MANIFEST.MF"`;
do
v=$(cat $i| grep Plugin-Ver | cut -d':' -f2 | tr -d ' ');
# ./workflow-api/META-INF/MANIFEST.MF
mod=$(echo $i | cut -d'/' -f2);
done
Где взять plugins.txt
for i in `find -d $JENKINS_HOME/plugins -name "MANIFEST.MF"`;
do
v=$(cat $i| grep Plugin-Ver | cut -d':' -f2 | tr -d ' ');
mod=$(echo $i | cut -d'/' -f2);
done
Где взять plugins.txt
cd $JENKINS_HOME/plugins
for i in `find -d . -name "MANIFEST.MF"`;
do
v=$(cat $i| grep Plugin-Ver | cut -d':' -f2 | tr -d ' ');
mod=$(echo $i | cut -d'/' -f2);
echo $mod:$v; # pluginname:version
done
Инициализируем jenkins_home
● Запускаем Jenkins и монтируем JENKINS_HOME
docker run 
$PWD/jenkins_home:/var/jenkins_home 
-p 8080:8080 
-it jenkins
● Теперь у нас в jenkins_home все нужные плагины
Теперь у нас есть jenkins в Docker?
НЕТ
Теперь у нас есть jenkins в Docker?
Задеплоим Jenkins-Master
Mesos + Marathon + Marathon-LB
Деплоим Jenkins
Marathon
Manifest [Json]
Jenkins
Master
Деплоим Jenkins
Marathon
Manifest [Json]
Jenkins
Master
POST
Деплоим Jenkins
Marathon
Manifest [Json]
Jenkins
Master
POST EVENT
Reload
Деплоим Jenkins
Marathon
Manifest [Json]
Jenkins
Master
POST EVENT
Reload
ANNOUNCE
Деплоим Jenkins
Marathon
Manifest [Json]
Jenkins
Master
POST EVENT
Reload
ANNOUNCE
OPEN
UI
Деплоим Jenkins
Marathon
Manifest [Json]
Jenkins
Master
{"id": "/my_project/jenkins",
"cmd": "...",
"cpus": 2,
"mem": 2048,
"instances": 1,
"container": {
"type": "DOCKER",
"docker": { "image": "docker.moscow.alfaintra.net/jenkins:2.32.1-mesos", } },
"healthChecks": [ {
"path": "/proxy/raw/jenkins/passport/login",
"protocol": "HTTP",
"portIndex": 0,
...
} ],
"portDefinitions": [ {
"port": 11102,
"protocol": "tcp",
"name": "jenkinshttp",
},{
"port": 11103,
"protocol": "tcp",
"name": "jenkinsjnlp",
"labels": {}
},
{
"port": 11104,
"protocol": "tcp",
"name": "mesoslibprocess",
"labels": {}
} ] }
Публикуем по http
Marathon
Manifest [Json]
Jenkins
Master
{"id": "/my_project/jenkins",
...
"labels": {
"HAPROXY_DEPLOYMENT_GROUP": "cd_my_project_jenkins",
"HAPROXY_GROUP": "cd_my_project_jenkins",
"HAPROXY_0_PATH": "/proxy/raw/jenkins/my_project",
"HAPROXY_0_VHOST": "my_project.jenkins.cd"
},
…
}
Marathon LB
Marathon
Manifest [Json]
Jenkins
Master
{"id": "/my_project/jenkins",
...
"labels": {
"HAPROXY_DEPLOYMENT_GROUP": "cd_my_project_jenkins",
"HAPROXY_GROUP": "cd_my_project_jenkins",
"HAPROXY_0_PATH": "/proxy/raw/jenkins/my_project",
"HAPROXY_0_VHOST": "my_project.jenkins.cd"
"HAPROXY_0_HTTP_FRONTEND_ACL_WITH_PATH": " acl host_{cleanedUpHostname} hdr(host) -i
{hostname}n acl path_{backend} path_beg {path}n use_backend {backend} if path_{backend}n",
},
…
}
Marathon
Marathon
Manifest [Json]
Jenkins
Master
Marathon
Marathon
Manifest [Json]
Jenkins
Master
Открываем
● VHOST + PATH если есть DNS
Открываем
● VHOST + PATH если есть DNS
● Иначе кастомизируем Haproxy acl для варианта только с PATH
Открываем
● VHOST + PATH если есть DNS
● Иначе кастомизируем Haproxy acl для варианта только с PATH
● curl http://jenkins.my_project.mesosdev/
● curl http://any_nodehostname/proxy/raw/jenkins/my_project
Открываем
● VHOST + PATH если есть DNS
● Иначе кастомизируем Haproxy acl для варианта только с PATH
● curl http://jenkins.my_project.mesosdev/
● curl http://any_nodehostname/proxy/raw/jenkins/my_project
Открываем
● VHOST + PATH если есть DNS
● Иначе кастомизируем Haproxy acl для варианта только с PATH
● curl http://jenkins.my_project.mesosdev/
● curl http://any_nodehostname/proxy/raw/jenkins/my_project
● Jenkins не поддерживает X-Forwarded
ну или у меня не получилось завести...
Открываем
● VHOST + PATH если есть DNS
● Иначе кастомизируем Haproxy acl для варианта только с PATH
● curl http://jenkins.my_project.mesosdev/
● curl http://any_nodehostname/proxy/raw/jenkins/my_project
● Jenkins не поддерживает X-Forwarded
ну или у меня не получилось завести...
● см --prefix=/proxy/raw/jenkins/my_project
Проверим jenkins-mesos плагин
Jenkins Mesos Plugin
$JENKINS_URL/manage → $JENKINS_URL/configure
Jenkins Mesos Plugin
$JENKINS_URL/manage → $JENKINS_URL/configure
→
Jenkins Mesos Plugin
$JENKINS_URL/manage → $JENKINS_URL/configure
→
Mesos Hostname
Mesos native library path
APPLY
Не найден mesos.so
APPLY
Как это должно работать?
Jenkins
Master
Jenkins
SlaveJenkins
SlaveJenkins
SlaveJenkins
Slave
Как это должно работать?
Mesos
Master
Agent
Agent
Agent
AgentJenkins
Master
Jenkins
SlaveJenkins
SlaveJenkins
SlaveJenkins
Slave
Как это должно работать?
Mesos
Master
Agent
Agent
Agent
AgentJenkins
Master
Jenkins
SlaveJenkins
SlaveJenkins
SlaveJenkins
Slave
Как это должно работать?
Как это должно работать?
Jenkins
Master
Mesos
Master
Mesos
MasterMesos
Master
Agent
Agent
Agent
Agent
Jenkins
Slave
Mesos Native
$ docker build .
Dockerfile
FROM jenkins:2.32.1
ARG MESOS_VERSION
ARG MESOS_VERSION_DEB
ENV MESOS_VERSION ${MESOS_VERSION:-1.1.0}
ENV MESOS_VERSION_DEB ${MESOS_VERSION_DEB:-2.0.107.debian81}
ENV TMP_DIR=/tmp/mesos
USER root
RUN apt-key adv --keyserver keyserver.ubuntu.com --recv E56151BF && 
echo "deb http://repos.mesosphere.com/debian jessie main" > /etc/apt/sources.list.d/mesosphere.list && 
apt-get update && 
apt-get install -y --no-install-recommends mesos=$MESOS_VERSION-$MESOS_VERSION_DEB && 
rm -rf /var/lib/apt/lists/*
USER jenkins
COPY plugins.txt /usr/share/jenkins/ref/
RUN /usr/local/bin/plugins.sh /usr/share/jenkins/ref/plugins.txt
Mesos Native
Dockerfile
FROM jenkins:2.32.1
...
USER root
RUN apt-key adv --keyserver keyserver.ubuntu.com --recv E56151BF && 
echo "deb http://repos.mesosphere.com/debian jessie main" >
/etc/apt/sources.list.d/mesosphere.list && 
apt-get update && 
apt-get install -y --no-install-recommends 
mesos=$MESOS_VERSION-$MESOS_VERSION_DEB && 
rm -rf /var/lib/apt/lists/*
USER jenkins
COPY plugins.txt /usr/share/jenkins/ref/
RUN /usr/local/bin/plugins.sh /usr/share/jenkins/ref/plugins.txt
$ docker build .
Что там в Mesos?
Что там в Mesos?
Что там в Mesos?
Что там в Mesos?
Mesos Hostname
Specifies the hostname:port of the Mesos master.
● node1:zk_port,node2:zk_port,node3:zk_port
Mesos Hostname
Specifies the hostname:port of the Mesos master.
● node1:zk_port,node2:zk_port,node3:zk_port
● http://node1:2181/api/v1/scheduler
Mesos Hostname
Specifies the hostname:port of the Mesos master.
● node1:zk_port,node2:zk_port,node3:zk_port
● http://node1:2181/api/v1/scheduler
● zk://node1:2181,node2:2181,node3:2181
Mesos Hostname
Specifies the hostname:port of the Mesos master.
● node1:zk_port,node2:zk_port,node3:zk_port
● http://node1:2181/api/v1/scheduler
● zk://node1:2181,node2:2181,node3:2181
● zk://node1:2181,node2:2181,node3:2181/mesos
Mesos Hostname
Specifies the hostname:port of the Mesos master.
● node1:zk_port,node2:zk_port,node3:zk_port
● http://node1:2181/api/v1/scheduler
● zk://node1:2181,node2:2181,node3:2181
● zk://node1:2181,node2:2181,node3:2181/mesos
А теперь что в Mesos?
А теперь что в Mesos?
А теперь что в Mesos?
Разберемся
Разберемся
CLI
JNLP
HTTP
MESOS
Jenkins in
Docker
Разберемся
CLI_PORT
JNLP_PORT
HTTP_PORT
CLI_ADVERTIZED_PORT
MESOS_PORT
HTTP_ADVERTIZED_PORT
JNLP_ADVERTIZED_PORT
MESOS_ADVERTIZED_PORT
Внутри
контейнера
Внутренние
порты Внешние
порты
Jenkins in
Docker
Во вне
Как лечим
● -Dhudson.TcpSlaveAgentListener.port=$PORT1
● JENKINS_SLAVE_AGENT_PORT=$PORT1
● --httpPort=$PORT0
Разберемся
CLI_ADVERTIZED_PORT
HTTP_ADVERTIZED_PORT
JNLP_ADVERTIZED_PORT
MESOS_ADVERTIZED_PORT
Внутренние
порты Внешние
порты
Jenkins in
Docker
Mesos
Master
LIBPROCESS_ADVERTIZED_PORT
LIBPROCESS_ADVERTIZED_IP
CL_PORT
JNLP_PORT
HTTP_PORT
CLI_ADVERTIZED_PORT
MESOS_PORT
HTTP_ADVERTIZED_PORT
JNLP_ADVERTIZED_PORT
MESOS_ADVERTIZED_PORT
Внутри
контейнера
Во вне
Как лечим
● -Dhudson.TcpSlaveAgentListener.port=$PORT1
● JENKINS_SLAVE_AGENT_PORT=$PORT1
● --httpPort=$PORT0
● LIBPROCESS_PORT=$PORT2
Как лечим
● -Dhudson.TcpSlaveAgentListener.port=$PORT1
● JENKINS_SLAVE_AGENT_PORT=$PORT1
● --httpPort=$PORT0
● LIBPROCESS_PORT=$PORT2
Build Now
Что еще можно потюнить?
Соберём что нибудь
Набор инструментов
● Jenkins Tools
○ M3
○ Docker
○ Gradle
○ ...
Набор инструментов
● Jenkins Tools
○ M3
○ Docker
○ Gradle
○ …
● Docker image per task type
Jenkins Jobs. Pipeline
node('mesos-jendev'){
...
}
Jenkins Jobs. Pipeline
node('mesos-jendev'){
...
}
Название Jenkins Cloud
Jenkins Jobs. Pipeline. Custom image
node('mesos-jendev'){
...
}
node('mesos-jendev:jenkins-slave:java-with-curl'){
...
}
Название Jenkins Cloud в котором
будет запущен таск
Название образа в котором
будет запущен новый
jenkins-slave
Jenkins Jobs. Pipeline. Dind Image
node('mesos-jendev:jenkins-slave:java-dind'){
...
}
Docker client конфликт версий
● Официальный dind образ для docker 1.12+
Docker client конфликт версий
● Официальный dind образ для docker 1.12+
● Docker на сервере 1.10 – 1.12
Docker client конфликт версий
● Официальный dind образ для docker 1.12+
● Docker на сервере 1.10 – 1.12
● Клиент 1.12 не работает с сервером 1.10
Docker client конфликт версий
● Официальный dind образ для docker 1.12+
● Docker на сервере 1.10 – 1.12
● Клиент 1.12 не работает с сервером 1.10
● Сделаем свой?
Docker client конфликт версий
● Официальный dind образ для docker 1.12+
● Docker на сервере 1.10 – 1.12
● Клиент 1.12 не работает с сервером 1.10
● Сделаем свой?
● Нет, обновим Docker
Jenkins Jobs. Pipeline. Custom image
node('mesos-jendev:jenkins-slave:java-with-curl'){
stage('fetch'){
checkout scm
}
stage('build'){
...
}
}
node('mesos-jendev:jenkins-slave:java-with-curl'){
stage('fetch'){
checkout scm
}
stage('build'){
def server = Artifactory.server 'alfa-laboratory'
def rtGradle = Artifactory.newGradleBuild()
def buildInfo = Artifactory.newBuildInfo()
rtGradle.run tasks: 'snapshot', buildInfo: buildInfo
}
}
Jenkins Jobs. Pipeline. Custom image
Jenkins Job in Mesos Cluster in Docker
Jenkins Slaves под нашим контролем
● jenkins home persistence – требует mesos 1.0.1 + (Incubating API)
● работа с Network BRIDGE – боль
○ jenkins jnlp4 handshake
○ advertized ports
○ mesos LIBPROCESS
● build cache and incremental builds
● gradle cache problems gradle/851
● link to MESOS_SANDBOX from builds
Немного проблем
Резюме
● Jenkins`a стоит бояться
● Jenkins Cloud для энтузиастов
Резюме
● Jenkins`a стоит бояться
● Jenkins Cloud для энтузиастов
● Подумайте 3 раза нужно ли вам это
● Если не нужно не используйте
Резюме
● Jenkins`a стоит бояться
● Jenkins Cloud для энтузиастов
● Подумайте 3 раза нужно ли вам это
● Если не нужно не используйте
● Можно упороться и заставить работать Jenkins Cloud
node('mesos-jendev:jenkins-slave:java-with-httpie'){
echo '1'
deployTo()
echo '5'
}
@NonCps
def deployTo() {
echo '2'
isExistInCluster()
echo '4'
}
def isExistInCluster() {
echo '3'
Pipeline прямиком из ада
Pipeline прямиком из ада
> 1
> 2
> 3
> 5
> End Stage
> End Pipline
node('mesos-jendev:jenkins-slave:java-with-httpie'){
echo '1'
deployTo()
echo '5'
}
@NonCps
def deployTo() {
echo '2'
isExistInCluster()
echo '4' // < ---- SKIPED
}
def isExistInCluster() {
echo '3'
Pipeline прямиком из ада
Заходите на чай
https://goo.gl/HjfOz5
QA

More Related Content

PDF
SPb Jenkins Meetup #5. Jenkins in da Cloud. Внутренности
PPTX
Процесс разработки и тестирования с Docker + gitlab ci
PDF
Docker контейнерная революция
PDF
Михаил Боднарчук "Docker для PHP разработчиков"
PDF
Лучшие практики Continuous Delivery с Docker / Дмитрий Столяров (Флант)
PPTX
Самоорганизующаяся сервисная инфраструктура на базе Docker / Данила Штань (То...
PDF
CD with Jenkins. Lessons Learned
PDF
Legacy в коробочке. Dev-среда на базе Kubernetes / Илья Сауленко (Avito)
SPb Jenkins Meetup #5. Jenkins in da Cloud. Внутренности
Процесс разработки и тестирования с Docker + gitlab ci
Docker контейнерная революция
Михаил Боднарчук "Docker для PHP разработчиков"
Лучшие практики Continuous Delivery с Docker / Дмитрий Столяров (Флант)
Самоорганизующаяся сервисная инфраструктура на базе Docker / Данила Штань (То...
CD with Jenkins. Lessons Learned
Legacy в коробочке. Dev-среда на базе Kubernetes / Илья Сауленко (Avito)

What's hot (20)

PDF
Moscow Jenkins Meetup #1. Pipeline для инженеров. Обзор экосистемы
PDF
Проникновение в Docker с примерами
PPTX
Что такое Docker
PPT
Движение по хрупкому дну / Сергей Караткевич (servers.ru)
PDF
Доклад "Docker в Badoo: от восторгов к внедрению" на DevOps Meetup
PDF
Управление секретами в кластере Kubernetes при помощи Hashicorp Vault / Серге...
PDF
Docker - счастье для хомячка или ника?
PDF
TК°Conf. Микросервисы и Docker. Глеб Паньшин.
PDF
Docker for JS people
PDF
Депрокрастинируем Docker: контейнеры здесь и сейчас
PDF
Автоматизируй это. Кирилл Тихонов ➠ CoreHard Autumn 2019
PPTX
Elasticsearch(java) fluentbit(c++) fluentd(ruby) kibana(javascript)
PPTX
Docker в работе: взгляд на использование в Badoo через год
PDF
Продуктовые проблемы при создании очередной Docker PaaS / Владимир Ярцев (Cas...
PDF
Release management with Gradle #JokerConf2016
PPTX
Введение в Docker
PDF
Docker: from understanding to production
PDF
Andrii Medvedchuk "Kubernetes and Docker Basics for Running Web Apps"
PPT
Docker - быстро, просто, наглядно
Moscow Jenkins Meetup #1. Pipeline для инженеров. Обзор экосистемы
Проникновение в Docker с примерами
Что такое Docker
Движение по хрупкому дну / Сергей Караткевич (servers.ru)
Доклад "Docker в Badoo: от восторгов к внедрению" на DevOps Meetup
Управление секретами в кластере Kubernetes при помощи Hashicorp Vault / Серге...
Docker - счастье для хомячка или ника?
TК°Conf. Микросервисы и Docker. Глеб Паньшин.
Docker for JS people
Депрокрастинируем Docker: контейнеры здесь и сейчас
Автоматизируй это. Кирилл Тихонов ➠ CoreHard Autumn 2019
Elasticsearch(java) fluentbit(c++) fluentd(ruby) kibana(javascript)
Docker в работе: взгляд на использование в Badoo через год
Продуктовые проблемы при создании очередной Docker PaaS / Владимир Ярцев (Cas...
Release management with Gradle #JokerConf2016
Введение в Docker
Docker: from understanding to production
Andrii Medvedchuk "Kubernetes and Docker Basics for Running Web Apps"
Docker - быстро, просто, наглядно
Ad

Viewers also liked (15)

PDF
Дикие микросервисы на JUG Екатеринбург
PDF
The Butler is still young – applying modern Jenkins features to the Embedded ...
PDF
Master's Project -- Andrew W. Szmurlo
PDF
Hintergrundpapier zu verringerten ausbauzielen für erneuerbare energien
DOCX
Exe learning arbol de contenidos-uch
ODP
Charla Debian en Servidores
PPTX
Presentación computación
PDF
I sistemi di Web Content Filtering
PDF
Comarch Paiement Mobile
PDF
Slide of the Month - Payment cards in Nigeria
PPTX
DevOps+Data: Working with Source Control
PDF
Соревнования по анализу данных: история, тактика, простые методы
PDF
Минимизация булевых функций с малым числом нулей в классе нормальных форм
PDF
Устранение шума в анализе твитов, связь смежности и модулярности при разбиени...
PPTX
CI/CD/DevOps 使用 travis ci 服務
Дикие микросервисы на JUG Екатеринбург
The Butler is still young – applying modern Jenkins features to the Embedded ...
Master's Project -- Andrew W. Szmurlo
Hintergrundpapier zu verringerten ausbauzielen für erneuerbare energien
Exe learning arbol de contenidos-uch
Charla Debian en Servidores
Presentación computación
I sistemi di Web Content Filtering
Comarch Paiement Mobile
Slide of the Month - Payment cards in Nigeria
DevOps+Data: Working with Source Control
Соревнования по анализу данных: история, тактика, простые методы
Минимизация булевых функций с малым числом нулей в классе нормальных форм
Устранение шума в анализе твитов, связь смежности и модулярности при разбиени...
CI/CD/DevOps 使用 travis ci 服務
Ad

Similar to Jenkins в docker in mesos in ... (20)

PDF
Устройство фреймворка symfony 2 (http://frontend-dev.ru)
PDF
Леонид Васильев "Python в инфраструктуре поиска"
PDF
2017-03-11 01 Игорь Родионов. Docker swarm vs Kubernetes
PDF
Истинный DevOps. Секрет 42.
PDF
GitLab, Prometheus и Grafana с Kubernetes
PPT
Easy authcache 2 кеширование для pro родионов игорь
PPTX
Docker в development окружение
PDF
Антон Каляев — Быстрое развертывание среды с Vagrant
PDF
#3 "Webpack и Vue.JS: Создание больших приложений и их расширение" Кирилл Кай...
PDF
Леонид Васильев "Python в инфраструктуре поиска"
PPT
Easy authcache 2 кэширование для pro. Родионов Игорь
PDF
PDF
От Make к Ansible
PDF
Instalarea DSpace
PDF
Виртуализация как инструмент разработчика
PDF
Виртуализация как инструмент разработчика
PDF
Docker с чем едят и для чего используют
PDF
IT-инфраструктура. FAQ для разработчика
PDF
Андрей Михайлов. Vagrant. Быстрое развертывание среды
PDF
Erlang tasty & useful stuff
Устройство фреймворка symfony 2 (http://frontend-dev.ru)
Леонид Васильев "Python в инфраструктуре поиска"
2017-03-11 01 Игорь Родионов. Docker swarm vs Kubernetes
Истинный DevOps. Секрет 42.
GitLab, Prometheus и Grafana с Kubernetes
Easy authcache 2 кеширование для pro родионов игорь
Docker в development окружение
Антон Каляев — Быстрое развертывание среды с Vagrant
#3 "Webpack и Vue.JS: Создание больших приложений и их расширение" Кирилл Кай...
Леонид Васильев "Python в инфраструктуре поиска"
Easy authcache 2 кэширование для pro. Родионов Игорь
От Make к Ansible
Instalarea DSpace
Виртуализация как инструмент разработчика
Виртуализация как инструмент разработчика
Docker с чем едят и для чего используют
IT-инфраструктура. FAQ для разработчика
Андрей Михайлов. Vagrant. Быстрое развертывание среды
Erlang tasty & useful stuff

More from Кирилл Толкачёв (10)

PDF
Curse of spring boot test [VRN]
PDF
Wild microservices and imaginary DevOps
PDF
Jenkins Imperative Pipeline vs Declarative Pipeline
PDF
Spring Boot Ripper
PDF
Gradle in Enterprise, Is it possible?
PDF
Curse of spring boot test
PDF
Spring Boot Test horror
PDF
Эволюционный дизайн. Joker Students Day 2016
PDF
Java Day Minsk 2016 Keynote about Microservices in real world
PDF
Joker 2015 Wild microSERVICES
Curse of spring boot test [VRN]
Wild microservices and imaginary DevOps
Jenkins Imperative Pipeline vs Declarative Pipeline
Spring Boot Ripper
Gradle in Enterprise, Is it possible?
Curse of spring boot test
Spring Boot Test horror
Эволюционный дизайн. Joker Students Day 2016
Java Day Minsk 2016 Keynote about Microservices in real world
Joker 2015 Wild microSERVICES

Jenkins в docker in mesos in ...