SlideShare uma empresa Scribd logo
1 de 36
Baixar para ler offline
Jenkins Pipeline
Плохой, Хороший, Декларативный
@tolkv
@lavcraft
@aatarasoff
@aatarasoff
tolk.kv@gmail.com
aatarasoff@gmail.com
2
DISCLAIMER
Наше мнение может не совпадать с официальной
позицией наших работодателей, начальников,
коллег или других специалистов.
Мы не претендуем на роль последней инстанции в
вопросах использования той или иной технологии.
Все представленные решения вы можете
использовать на свой страх и риск. За все ваши
действия ответственность несёте только вы сами.
Все персонажи вымышлены, совпадения случайны.
5
Что делает Jenkins на JUG?
План
● Что такое декларативный пайплайн?
● Почему его стоит попробовать?
● Немного теории
● Демо
● Делаем выводы
7
Jenkins Pipeline
Предпосылки к Declarative
Структура
Условные(conditional) функции
Вариативность
Declarative Pipeline 1.0
Февраль 2017
Declarative Pipeline 1.0
Февраль 2017 Далее кратко – DP
BlueOcean и DP = ❤
Declarative Pipeline
durability
supportability
velocity
надежная сериализация
строгие правила расширения
порог входа и скорость изменений
15
pipeline location and declaration
pipeline {
…
}
16
Agent
agent any
● any
● none
● label
● node (like label but with advanced options)
● docker
● dockerfile
17
Stages and steps
stages {
stage('Example') {
steps {
echo 'Hello World'
}
}
}
18
Environment
environment {
MYKEY = credentials('my-prefined-secret-text')
}
steps {
sh 'printenv'
}
19
Post → after steps
post {
success {
junit 'target/surefire-reports/**/*.xml'
}
}
20
Post
● always
● success
● failure
● unstable
● changed
21
Parameters
parameters {
string(
name: 'PERSON',
defaultValue: 'Mr Jenkins',
description: 'Who should I say hello to?'
)
}
22
Parallel
parallel (
linux: {
build job: 'full-build-linux',
parameters: [string(name: 'GIT_BRANCH_NAME',
value: GIT_BRANCH)]
},
windows: {
build job: 'full-build-windows',
parameters: [string(name: 'GIT_BRANCH_NAME',
value: GIT_BRANCH)]
},
failFast: false 23
When → expression
expression {
return readFile('pom.xml')
.contains('mycomponent')
}
expression { return A || B }
anyOf { branch 'master'; branch 'staging' } } 24
When → expression
when {
branch 'production'
environment name: 'DEPLOY_TO',
value: 'production'
}
25
When → expression
expression {
GIT_BRANCH = 'origin/' + sh(
returnStdout: true,
script: 'git rev-parse --abbrev-ref HEAD')
.trim()
return !(GIT_BRANCH == 'origin/master'
|| params.FORCE_FULL_BUILD)
}
} 26
Options
● retry
● timestamps
● disableConcurrentBuilds
● timeout
27
Retry
stage('deploy-test') {
try {
build 'yourJob'
} catch(error) {
echo "First build failed, let's retry"
retry(2) {
input 'Retry the job ?'
build 'yourJob' 28
Wait until
stage('deploy-test') {
waitUntil {
try {
build 'yourJob'
true
} catch(error) {
input "Retry the job ?"
currentBuild.result = 'SUCCESS'
29
Хватит п***ть давай демо
DP
30
Script
script {
def browsers = ['chrome', 'firefox']
for (int i = 0; i < browsers.size(); ++i) {
echo "Testing the ${browsers[i]} browser"
}
}
31
Declarative Pipeline. Demo
● перепишем всё используя новые знания
● when { waitForQualityGate() ... } → steps { error '...' }
● script and shared args
32
Императивный
→ Просто работает
→ Легко настраивается
→
→ Pipeline Hell
→ Нет структуры
→ CPS
Декларативный
→ Сложнее сломать*
→ Легче поддерживать
→ И распространять
→ За рамками дозволенного действовать
сложно
→ Документация пока страдает
→ Нет “простых” точек расширения
Материалы
Jenkins Handbook
Jenkins Blog
Cloudbees Documentation
34
Jenkins Area Meetup JAM
Jenkins Moscow Meetup
@jenkins_ru
#jenkinsci_ru
https://github.com/aatarasoff/Jenkins-pipeline-live-demo
https://github.com/aatarasoff/spring-boot-example-for-jenkins-pipeline
https://github.com/lavcraft/jenkins-pipeline-libs-example
https://alfalab.design/vacancies/java-razrabotchik
https://alfalab.design/vacancies/
Минутка маркетинга
Спасибо! Готовы ответить на ваши вопросы
@tolkv
@aatarasoff
@lavcraft
@aatarasoff

Mais conteúdo relacionado

Mais procurados

Codeception + Docker + Robo и что из этого вышло
Codeception + Docker + Robo и что из этого вышлоCodeception + Docker + Robo и что из этого вышло
Codeception + Docker + Robo и что из этого вышлоCOMAQA.BY
 
Никита Галкин "Testing in Node.js World"
Никита Галкин "Testing in Node.js World"Никита Галкин "Testing in Node.js World"
Никита Галкин "Testing in Node.js World"Fwdays
 
BDD girls Battle: Cucumber VS. JBehave
BDD girls Battle: Cucumber VS. JBehaveBDD girls Battle: Cucumber VS. JBehave
BDD girls Battle: Cucumber VS. JBehaveSQALab
 
"Prom.ua shopping cart workflow as a microfrontend", Danylo Kazymyrov
"Prom.ua shopping cart workflow as a microfrontend", Danylo Kazymyrov"Prom.ua shopping cart workflow as a microfrontend", Danylo Kazymyrov
"Prom.ua shopping cart workflow as a microfrontend", Danylo KazymyrovFwdays
 
Введение в maven
Введение в mavenВведение в maven
Введение в mavenDmitry Zinushin
 
Мастер класс- Maven + Jenkins
Мастер класс- Maven + JenkinsМастер класс- Maven + Jenkins
Мастер класс- Maven + JenkinsValentin Fedoskin
 
Jenkins 2.0: Организуем тестирование в составе Continuous Delivery
Jenkins 2.0: Организуем тестирование в составе Continuous DeliveryJenkins 2.0: Организуем тестирование в составе Continuous Delivery
Jenkins 2.0: Организуем тестирование в составе Continuous DeliverySQALab
 
Docker + Selenium Webdriver в рамках Continuous Integration
Docker + Selenium Webdriver в рамках Continuous IntegrationDocker + Selenium Webdriver в рамках Continuous Integration
Docker + Selenium Webdriver в рамках Continuous IntegrationSQALab
 
Selenium grid on-demand
Selenium grid on-demandSelenium grid on-demand
Selenium grid on-demandSQALab
 
Инструментация среды исполнения в арсенале тестировщика
Инструментация среды исполнения в арсенале тестировщикаИнструментация среды исполнения в арсенале тестировщика
Инструментация среды исполнения в арсенале тестировщикаSQALab
 
Продуктовые проблемы при создании очередной Docker PaaS / Владимир Ярцев (Cas...
Продуктовые проблемы при создании очередной Docker PaaS / Владимир Ярцев (Cas...Продуктовые проблемы при создании очередной Docker PaaS / Владимир Ярцев (Cas...
Продуктовые проблемы при создании очередной Docker PaaS / Владимир Ярцев (Cas...Ontico
 
TК°Conf. Микросервисы и Docker. Глеб Паньшин.
TК°Conf. Микросервисы и Docker. Глеб Паньшин.TК°Conf. Микросервисы и Docker. Глеб Паньшин.
TК°Conf. Микросервисы и Docker. Глеб Паньшин.TKConf
 
Никита Шультайс. "Система управления версиями git"
Никита Шультайс. "Система управления версиями git"Никита Шультайс. "Система управления версиями git"
Никита Шультайс. "Система управления версиями git"Egor Stremousov
 
Производительность open source решений
Производительность open source решенийПроизводительность open source решений
Производительность open source решенийVladimir Sitnikov
 
Быстрое развертывание среды разработки c Vagrant
Быстрое развертывание среды разработки c VagrantБыстрое развертывание среды разработки c Vagrant
Быстрое развертывание среды разработки c VagrantOlga Lavrentieva
 
JavaScript. Асинхронное программирование. Promise & Deferred
JavaScript. Асинхронное программирование. Promise & DeferredJavaScript. Асинхронное программирование. Promise & Deferred
JavaScript. Асинхронное программирование. Promise & Deferreddokhrimenko
 
Behat-trick: как мы внедряли BDD на наших проектах
Behat-trick: как мы внедряли BDD на наших проектахBehat-trick: как мы внедряли BDD на наших проектах
Behat-trick: как мы внедряли BDD на наших проектахSQALab
 
Python Development process in Yandex
Python Development process in YandexPython Development process in Yandex
Python Development process in Yandexaviatakz
 
Автоматизируй это. Кирилл Тихонов ➠ CoreHard Autumn 2019
Автоматизируй это. Кирилл Тихонов ➠  CoreHard Autumn 2019Автоматизируй это. Кирилл Тихонов ➠  CoreHard Autumn 2019
Автоматизируй это. Кирилл Тихонов ➠ CoreHard Autumn 2019corehard_by
 

Mais procurados (20)

Codeception + Docker + Robo и что из этого вышло
Codeception + Docker + Robo и что из этого вышлоCodeception + Docker + Robo и что из этого вышло
Codeception + Docker + Robo и что из этого вышло
 
Никита Галкин "Testing in Node.js World"
Никита Галкин "Testing in Node.js World"Никита Галкин "Testing in Node.js World"
Никита Галкин "Testing in Node.js World"
 
BDD girls Battle: Cucumber VS. JBehave
BDD girls Battle: Cucumber VS. JBehaveBDD girls Battle: Cucumber VS. JBehave
BDD girls Battle: Cucumber VS. JBehave
 
"Prom.ua shopping cart workflow as a microfrontend", Danylo Kazymyrov
"Prom.ua shopping cart workflow as a microfrontend", Danylo Kazymyrov"Prom.ua shopping cart workflow as a microfrontend", Danylo Kazymyrov
"Prom.ua shopping cart workflow as a microfrontend", Danylo Kazymyrov
 
Введение в maven
Введение в mavenВведение в maven
Введение в maven
 
Мастер класс- Maven + Jenkins
Мастер класс- Maven + JenkinsМастер класс- Maven + Jenkins
Мастер класс- Maven + Jenkins
 
Git for you
Git for youGit for you
Git for you
 
Jenkins 2.0: Организуем тестирование в составе Continuous Delivery
Jenkins 2.0: Организуем тестирование в составе Continuous DeliveryJenkins 2.0: Организуем тестирование в составе Continuous Delivery
Jenkins 2.0: Организуем тестирование в составе Continuous Delivery
 
Docker + Selenium Webdriver в рамках Continuous Integration
Docker + Selenium Webdriver в рамках Continuous IntegrationDocker + Selenium Webdriver в рамках Continuous Integration
Docker + Selenium Webdriver в рамках Continuous Integration
 
Selenium grid on-demand
Selenium grid on-demandSelenium grid on-demand
Selenium grid on-demand
 
Инструментация среды исполнения в арсенале тестировщика
Инструментация среды исполнения в арсенале тестировщикаИнструментация среды исполнения в арсенале тестировщика
Инструментация среды исполнения в арсенале тестировщика
 
Продуктовые проблемы при создании очередной Docker PaaS / Владимир Ярцев (Cas...
Продуктовые проблемы при создании очередной Docker PaaS / Владимир Ярцев (Cas...Продуктовые проблемы при создании очередной Docker PaaS / Владимир Ярцев (Cas...
Продуктовые проблемы при создании очередной Docker PaaS / Владимир Ярцев (Cas...
 
TК°Conf. Микросервисы и Docker. Глеб Паньшин.
TК°Conf. Микросервисы и Docker. Глеб Паньшин.TК°Conf. Микросервисы и Docker. Глеб Паньшин.
TК°Conf. Микросервисы и Docker. Глеб Паньшин.
 
Никита Шультайс. "Система управления версиями git"
Никита Шультайс. "Система управления версиями git"Никита Шультайс. "Система управления версиями git"
Никита Шультайс. "Система управления версиями git"
 
Производительность open source решений
Производительность open source решенийПроизводительность open source решений
Производительность open source решений
 
Быстрое развертывание среды разработки c Vagrant
Быстрое развертывание среды разработки c VagrantБыстрое развертывание среды разработки c Vagrant
Быстрое развертывание среды разработки c Vagrant
 
JavaScript. Асинхронное программирование. Promise & Deferred
JavaScript. Асинхронное программирование. Promise & DeferredJavaScript. Асинхронное программирование. Promise & Deferred
JavaScript. Асинхронное программирование. Promise & Deferred
 
Behat-trick: как мы внедряли BDD на наших проектах
Behat-trick: как мы внедряли BDD на наших проектахBehat-trick: как мы внедряли BDD на наших проектах
Behat-trick: как мы внедряли BDD на наших проектах
 
Python Development process in Yandex
Python Development process in YandexPython Development process in Yandex
Python Development process in Yandex
 
Автоматизируй это. Кирилл Тихонов ➠ CoreHard Autumn 2019
Автоматизируй это. Кирилл Тихонов ➠  CoreHard Autumn 2019Автоматизируй это. Кирилл Тихонов ➠  CoreHard Autumn 2019
Автоматизируй это. Кирилл Тихонов ➠ CoreHard Autumn 2019
 

Semelhante a Jenkins Imperative Pipeline vs Declarative Pipeline

Scala performance под капотом
Scala performance под капотомScala performance под капотом
Scala performance под капотомRoman Grebennikov
 
Профайлинг.
Профайлинг. Профайлинг.
Профайлинг. Nikita Romanov
 
Что нам стоит DAL построить? Акуляков Артём D2D Just.NET
Что нам стоит DAL построить? Акуляков Артём D2D Just.NETЧто нам стоит DAL построить? Акуляков Артём D2D Just.NET
Что нам стоит DAL построить? Акуляков Артём D2D Just.NETDev2Dev
 
Организация процесса регулярной обработки больших объемов данных
Организация процесса регулярной обработки больших объемов данныхОрганизация процесса регулярной обработки больших объемов данных
Организация процесса регулярной обработки больших объемов данныхCodeFest
 
TDD: когда нужно и, самое главное, когда не нужно / Павел Калашников (SimbirS...
TDD: когда нужно и, самое главное, когда не нужно / Павел Калашников (SimbirS...TDD: когда нужно и, самое главное, когда не нужно / Павел Калашников (SimbirS...
TDD: когда нужно и, самое главное, когда не нужно / Павел Калашников (SimbirS...Ontico
 
Plugin for plugin, or extending android new build system
Plugin for plugin, or extending android new build systemPlugin for plugin, or extending android new build system
Plugin for plugin, or extending android new build systemAnton Rutkevich
 
Артем Розуменко - "Как и зачем разрабатывать собственный фреймворк?"
Артем Розуменко - "Как и зачем разрабатывать собственный фреймворк?"Артем Розуменко - "Как и зачем разрабатывать собственный фреймворк?"
Артем Розуменко - "Как и зачем разрабатывать собственный фреймворк?"QA Dnepropetrovsk Community (Ukraine)
 
тихонов кв работа с прерываниями в микроконтроллерах в 21 веке
тихонов кв работа с прерываниями в микроконтроллерах в 21 векетихонов кв работа с прерываниями в микроконтроллерах в 21 веке
тихонов кв работа с прерываниями в микроконтроллерах в 21 векеKirill Tikhonov
 
От Make к Ansible
От Make к AnsibleОт Make к Ansible
От Make к AnsibleIvan Grishaev
 
Алексей Ильенко "In real-time with Apache Kafka"
Алексей Ильенко "In real-time with Apache Kafka"Алексей Ильенко "In real-time with Apache Kafka"
Алексей Ильенко "In real-time with Apache Kafka"Fwdays
 
Streaming replication in practice
Streaming replication in practiceStreaming replication in practice
Streaming replication in practiceAlexey Lesovsky
 
CodeFest 2012. Родионов А. — Тестирование Ruby (on Rails) приложений: стек, п...
CodeFest 2012. Родионов А. — Тестирование Ruby (on Rails) приложений: стек, п...CodeFest 2012. Родионов А. — Тестирование Ruby (on Rails) приложений: стек, п...
CodeFest 2012. Родионов А. — Тестирование Ruby (on Rails) приложений: стек, п...CodeFest
 
kranonit S11E01 Андрей Пономарёв: Тренинг по TDD в Java
kranonit S11E01 Андрей Пономарёв: Тренинг по TDD в Javakranonit S11E01 Андрей Пономарёв: Тренинг по TDD в Java
kranonit S11E01 Андрей Пономарёв: Тренинг по TDD в JavaKrivoy Rog IT Community
 
Groovy presentation.
Groovy presentation.Groovy presentation.
Groovy presentation.Infinity
 
GitLab, Prometheus и Grafana с Kubernetes
GitLab, Prometheus и Grafana с KubernetesGitLab, Prometheus и Grafana с Kubernetes
GitLab, Prometheus и Grafana с KubernetesVictor Login
 
Юлия Викторова; Александр Тарасов. DevOps без булшита.
Юлия Викторова; Александр Тарасов. DevOps без булшита.Юлия Викторова; Александр Тарасов. DevOps без булшита.
Юлия Викторова; Александр Тарасов. DevOps без булшита.ScrumTrek
 
Tdd webpack + testem + mocha + chai
Tdd webpack + testem + mocha + chaiTdd webpack + testem + mocha + chai
Tdd webpack + testem + mocha + chaiMichael Chernobrov
 
20160303 Hacking PostgreSQL Тема 02 Сообщество PostgreSQL и инструменты разра...
20160303 Hacking PostgreSQL Тема 02 Сообщество PostgreSQL и инструменты разра...20160303 Hacking PostgreSQL Тема 02 Сообщество PostgreSQL и инструменты разра...
20160303 Hacking PostgreSQL Тема 02 Сообщество PostgreSQL и инструменты разра...Rais Charipov
 
Тестирование серверной конфигурации
Тестирование серверной конфигурацииТестирование серверной конфигурации
Тестирование серверной конфигурацииTimur Batyrshin
 

Semelhante a Jenkins Imperative Pipeline vs Declarative Pipeline (20)

Scala performance под капотом
Scala performance под капотомScala performance под капотом
Scala performance под капотом
 
Профайлинг.
Профайлинг. Профайлинг.
Профайлинг.
 
Что нам стоит DAL построить? Акуляков Артём D2D Just.NET
Что нам стоит DAL построить? Акуляков Артём D2D Just.NETЧто нам стоит DAL построить? Акуляков Артём D2D Just.NET
Что нам стоит DAL построить? Акуляков Артём D2D Just.NET
 
Организация процесса регулярной обработки больших объемов данных
Организация процесса регулярной обработки больших объемов данныхОрганизация процесса регулярной обработки больших объемов данных
Организация процесса регулярной обработки больших объемов данных
 
TDD: когда нужно и, самое главное, когда не нужно / Павел Калашников (SimbirS...
TDD: когда нужно и, самое главное, когда не нужно / Павел Калашников (SimbirS...TDD: когда нужно и, самое главное, когда не нужно / Павел Калашников (SimbirS...
TDD: когда нужно и, самое главное, когда не нужно / Павел Калашников (SimbirS...
 
Plugin for plugin, or extending android new build system
Plugin for plugin, or extending android new build systemPlugin for plugin, or extending android new build system
Plugin for plugin, or extending android new build system
 
Артем Розуменко - "Как и зачем разрабатывать собственный фреймворк?"
Артем Розуменко - "Как и зачем разрабатывать собственный фреймворк?"Артем Розуменко - "Как и зачем разрабатывать собственный фреймворк?"
Артем Розуменко - "Как и зачем разрабатывать собственный фреймворк?"
 
тихонов кв работа с прерываниями в микроконтроллерах в 21 веке
тихонов кв работа с прерываниями в микроконтроллерах в 21 векетихонов кв работа с прерываниями в микроконтроллерах в 21 веке
тихонов кв работа с прерываниями в микроконтроллерах в 21 веке
 
От Make к Ansible
От Make к AnsibleОт Make к Ansible
От Make к Ansible
 
Алексей Ильенко "In real-time with Apache Kafka"
Алексей Ильенко "In real-time with Apache Kafka"Алексей Ильенко "In real-time with Apache Kafka"
Алексей Ильенко "In real-time with Apache Kafka"
 
Streaming replication in practice
Streaming replication in practiceStreaming replication in practice
Streaming replication in practice
 
CodeFest 2012. Родионов А. — Тестирование Ruby (on Rails) приложений: стек, п...
CodeFest 2012. Родионов А. — Тестирование Ruby (on Rails) приложений: стек, п...CodeFest 2012. Родионов А. — Тестирование Ruby (on Rails) приложений: стек, п...
CodeFest 2012. Родионов А. — Тестирование Ruby (on Rails) приложений: стек, п...
 
kranonit S11E01 Андрей Пономарёв: Тренинг по TDD в Java
kranonit S11E01 Андрей Пономарёв: Тренинг по TDD в Javakranonit S11E01 Андрей Пономарёв: Тренинг по TDD в Java
kranonit S11E01 Андрей Пономарёв: Тренинг по TDD в Java
 
Groovy presentation.
Groovy presentation.Groovy presentation.
Groovy presentation.
 
GitLab, Prometheus и Grafana с Kubernetes
GitLab, Prometheus и Grafana с KubernetesGitLab, Prometheus и Grafana с Kubernetes
GitLab, Prometheus и Grafana с Kubernetes
 
Юлия Викторова; Александр Тарасов. DevOps без булшита.
Юлия Викторова; Александр Тарасов. DevOps без булшита.Юлия Викторова; Александр Тарасов. DevOps без булшита.
Юлия Викторова; Александр Тарасов. DevOps без булшита.
 
Tdd webpack + testem + mocha + chai
Tdd webpack + testem + mocha + chaiTdd webpack + testem + mocha + chai
Tdd webpack + testem + mocha + chai
 
Deep Dive in Magento DI
Deep Dive in Magento DIDeep Dive in Magento DI
Deep Dive in Magento DI
 
20160303 Hacking PostgreSQL Тема 02 Сообщество PostgreSQL и инструменты разра...
20160303 Hacking PostgreSQL Тема 02 Сообщество PostgreSQL и инструменты разра...20160303 Hacking PostgreSQL Тема 02 Сообщество PostgreSQL и инструменты разра...
20160303 Hacking PostgreSQL Тема 02 Сообщество PostgreSQL и инструменты разра...
 
Тестирование серверной конфигурации
Тестирование серверной конфигурацииТестирование серверной конфигурации
Тестирование серверной конфигурации
 

Mais de Кирилл Толкачёв (9)

Curse of spring boot test [VRN]
Curse of spring boot test [VRN]Curse of spring boot test [VRN]
Curse of spring boot test [VRN]
 
Wild microservices and imaginary DevOps
Wild microservices and imaginary DevOpsWild microservices and imaginary DevOps
Wild microservices and imaginary DevOps
 
Spring Boot Ripper
Spring Boot RipperSpring Boot Ripper
Spring Boot Ripper
 
Curse of spring boot test
Curse of spring boot testCurse of spring boot test
Curse of spring boot test
 
Spring Boot Test horror
Spring Boot Test horrorSpring Boot Test horror
Spring Boot Test horror
 
Дикие микросервисы на JUG Екатеринбург
Дикие микросервисы на JUG ЕкатеринбургДикие микросервисы на JUG Екатеринбург
Дикие микросервисы на JUG Екатеринбург
 
Jenkins в docker in mesos in ...
Jenkins в docker in mesos in ...Jenkins в docker in mesos in ...
Jenkins в docker in mesos in ...
 
Java Day Minsk 2016 Keynote about Microservices in real world
Java Day Minsk 2016 Keynote about Microservices in real worldJava Day Minsk 2016 Keynote about Microservices in real world
Java Day Minsk 2016 Keynote about Microservices in real world
 
Joker 2015 Wild microSERVICES
Joker 2015 Wild microSERVICESJoker 2015 Wild microSERVICES
Joker 2015 Wild microSERVICES
 

Jenkins Imperative Pipeline vs Declarative Pipeline