Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.
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
надежная сериализация
строгие правила расширения
порог входа и ско...
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?'
)
}
...
Parallel
parallel (
linux: {
build job: 'full-build-linux',
parameters: [string(name: 'GIT_BRANCH_NAME',
value: GIT_BRANCH...
When → expression
expression {
return readFile('pom.xml')
.contains('mycomponent')
}
expression { return A || B }
anyOf { ...
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')...
Options
● retry
● timestamps
● disableConcurrentBuilds
● timeout
27
Retry
stage('deploy-test') {
try {
build 'yourJob'
} catch(error) {
echo "First build failed, let's retry"
retry(2) {
inpu...
Wait until
stage('deploy-test') {
waitUntil {
try {
build 'yourJob'
true
} catch(error) {
input "Retry the job ?"
currentB...
Хватит п***ть давай демо
DP
30
Script
script {
def browsers = ['chrome', 'firefox']
for (int i = 0; i < browsers.size(); ++i) {
echo "Testing the ${brows...
Declarative Pipeline. Demo
● перепишем всё используя новые знания
● when { waitForQualityGate() ... } → steps { error '......
Императивный
→ Просто работает
→ Легко настраивается
→
→ Pipeline Hell
→ Нет структуры
→ CPS
Декларативный
→ Сложнее слома...
Материалы
Jenkins Handbook
Jenkins Blog
Cloudbees Documentation
34
Jenkins Area Meetup JAM
Jenkins Moscow Meetup
@jenkins_...
https://alfalab.design/vacancies/java-razrabotchik
https://alfalab.design/vacancies/
Минутка маркетинга
Спасибо! Готовы ответить на ваши вопросы
@tolkv
@aatarasoff
@lavcraft
@aatarasoff
Jenkins Imperative Pipeline vs Declarative Pipeline
Upcoming SlideShare
Loading in …5
×

Jenkins Imperative Pipeline vs Declarative Pipeline

1,504 views

Published on

Презентация со встерчи JUG MSK про Groovy DSL
Проводитили сравнение новой фичи Jenkins – Declarative Pipelines путем попытки переписать уже существующий пайплайн по доставке ПО на декларативный. Описали подводные камни и обсудили проблемы.
Видео можно будет найти тут https://vk.com/jugmsk или тут https://plus.google.com/communities/115981831554057619568

Published in: Technology
  • Be the first to comment

Jenkins Imperative Pipeline vs Declarative Pipeline

  1. 1. Jenkins Pipeline Плохой, Хороший, Декларативный
  2. 2. @tolkv @lavcraft @aatarasoff @aatarasoff tolk.kv@gmail.com aatarasoff@gmail.com 2
  3. 3. DISCLAIMER Наше мнение может не совпадать с официальной позицией наших работодателей, начальников, коллег или других специалистов. Мы не претендуем на роль последней инстанции в вопросах использования той или иной технологии. Все представленные решения вы можете использовать на свой страх и риск. За все ваши действия ответственность несёте только вы сами. Все персонажи вымышлены, совпадения случайны.
  4. 4. 5 Что делает Jenkins на JUG?
  5. 5. План ● Что такое декларативный пайплайн? ● Почему его стоит попробовать? ● Немного теории ● Демо ● Делаем выводы
  6. 6. 7 Jenkins Pipeline
  7. 7. Предпосылки к Declarative
  8. 8. Структура
  9. 9. Условные(conditional) функции
  10. 10. Вариативность
  11. 11. Declarative Pipeline 1.0 Февраль 2017
  12. 12. Declarative Pipeline 1.0 Февраль 2017 Далее кратко – DP
  13. 13. BlueOcean и DP = ❤
  14. 14. Declarative Pipeline durability supportability velocity надежная сериализация строгие правила расширения порог входа и скорость изменений 15
  15. 15. pipeline location and declaration pipeline { … } 16
  16. 16. Agent agent any ● any ● none ● label ● node (like label but with advanced options) ● docker ● dockerfile 17
  17. 17. Stages and steps stages { stage('Example') { steps { echo 'Hello World' } } } 18
  18. 18. Environment environment { MYKEY = credentials('my-prefined-secret-text') } steps { sh 'printenv' } 19
  19. 19. Post → after steps post { success { junit 'target/surefire-reports/**/*.xml' } } 20
  20. 20. Post ● always ● success ● failure ● unstable ● changed 21
  21. 21. Parameters parameters { string( name: 'PERSON', defaultValue: 'Mr Jenkins', description: 'Who should I say hello to?' ) } 22
  22. 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
  23. 23. When → expression expression { return readFile('pom.xml') .contains('mycomponent') } expression { return A || B } anyOf { branch 'master'; branch 'staging' } } 24
  24. 24. When → expression when { branch 'production' environment name: 'DEPLOY_TO', value: 'production' } 25
  25. 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
  26. 26. Options ● retry ● timestamps ● disableConcurrentBuilds ● timeout 27
  27. 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
  28. 28. Wait until stage('deploy-test') { waitUntil { try { build 'yourJob' true } catch(error) { input "Retry the job ?" currentBuild.result = 'SUCCESS' 29
  29. 29. Хватит п***ть давай демо DP 30
  30. 30. Script script { def browsers = ['chrome', 'firefox'] for (int i = 0; i < browsers.size(); ++i) { echo "Testing the ${browsers[i]} browser" } } 31
  31. 31. Declarative Pipeline. Demo ● перепишем всё используя новые знания ● when { waitForQualityGate() ... } → steps { error '...' } ● script and shared args 32
  32. 32. Императивный → Просто работает → Легко настраивается → → Pipeline Hell → Нет структуры → CPS Декларативный → Сложнее сломать* → Легче поддерживать → И распространять → За рамками дозволенного действовать сложно → Документация пока страдает → Нет “простых” точек расширения
  33. 33. Материалы 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
  34. 34. https://alfalab.design/vacancies/java-razrabotchik https://alfalab.design/vacancies/ Минутка маркетинга
  35. 35. Спасибо! Готовы ответить на ваши вопросы @tolkv @aatarasoff @lavcraft @aatarasoff

×