SlideShare a Scribd company logo
Jenkins Pipeline
Плохой, Хороший, Декларативный
@tolkv
@lavcraft
@aatarasoff
@aatarasoff
tolk.kv@gmail.com
aatarasoff@gmail.com
2
DISCLAIMER
Наше мнение может не совпадать с официальной
позицией наших работодателей, начальников,
коллег или других специалистов.
Мы не претендуем на роль последней инстанции в
вопросах использования той или иной технологии.
Все представленные решения вы можете
использовать на свой страх и риск. За все ваши
действия ответственность несёте только вы сами.
Все персонажи вымышлены, совпадения случайны.
Jenkins Imperative Pipeline vs Declarative Pipeline
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

More Related Content

PDF
Gradle in Enterprise, Is it possible?
PDF
Moscow Jenkins Meetup #1. Pipeline для инженеров. Обзор экосистемы
PDF
CD with Jenkins. Lessons Learned
PDF
Continuous Delivery with Jenkins: Lessons Learned
PDF
Эволюционный дизайн. Joker Students Day 2016
PDF
Release management with Gradle #JokerConf2016
PPTX
Kubernetes
PDF
Артём Ерошенко «Рецепт приготовления облачных тестингов»
Gradle in Enterprise, Is it possible?
Moscow Jenkins Meetup #1. Pipeline для инженеров. Обзор экосистемы
CD with Jenkins. Lessons Learned
Continuous Delivery with Jenkins: Lessons Learned
Эволюционный дизайн. Joker Students Day 2016
Release management with Gradle #JokerConf2016
Kubernetes
Артём Ерошенко «Рецепт приготовления облачных тестингов»

What's hot (20)

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

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

PDF
Curse of spring boot test [VRN]
PDF
Wild microservices and imaginary DevOps
PDF
Spring Boot Ripper
PDF
Curse of spring boot test
PDF
Spring Boot Test horror
PDF
Дикие микросервисы на JUG Екатеринбург
PDF
Jenkins в docker in mesos in ...
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
Spring Boot Ripper
Curse of spring boot test
Spring Boot Test horror
Дикие микросервисы на JUG Екатеринбург
Jenkins в docker in mesos in ...
Java Day Minsk 2016 Keynote about Microservices in real world
Joker 2015 Wild microSERVICES
Ad

Jenkins Imperative Pipeline vs Declarative Pipeline