Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Кирилл Толкачёв, Александр Тарасов — Jenkins Pi...

Кирилл Толкачёв, Александр Тарасов — Jenkins Pipeline. Плохой, Хороший, Декларативный

С недавних пор Jenkins поддерживает декларативное описание для Pipeline. Совместно со слушателями мы попробуем перенести обычные Pipeline на декларативное описание. Поговорим о типовых проблемах и о том, в каких случая стоит такую миграцию проводить.

Avatar for Moscow JUG

Moscow JUG

July 27, 2017
Tweet

More Decks by Moscow JUG

Other Decks in Programming

Transcript

  1. DISCLAIMER Наше мнение может не совпадать с официальной позицией наших

    работодателей, начальников, коллег или других специалистов. Мы не претендуем на роль последней инстанции в вопросах использования той или иной технологии. Все представленные решения вы можете использовать на свой страх и риск. За все ваши действия ответственность несёте только вы сами. Все персонажи вымышлены, совпадения случайны.
  2. План • Что такое декларативный пайплайн? • Почему его стоит

    попробовать? • Немного теории • Демо • Делаем выводы
  3. Agent agent any • any • none • label •

    node (like label but with advanced options) • docker • dockerfile 17
  4. 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
  5. When → expression expression { return readFile('pom.xml') .contains('mycomponent') } expression

    { return A || B } anyOf { branch 'master'; branch 'staging' } } 24
  6. 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
  7. 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
  8. Wait until stage('deploy-test') { waitUntil { try { build 'yourJob'

    true } catch(error) { input "Retry the job ?" currentBuild.result = 'SUCCESS' 29
  9. Script script { def browsers = ['chrome', 'firefox'] for (int

    i = 0; i < browsers.size(); ++i) { echo "Testing the ${browsers[i]} browser" } } 31
  10. Declarative Pipeline. Demo • перепишем всё используя новые знания •

    when { waitForQualityGate() ... } → steps { error '...' } • script and shared args 32
  11. Императивный → Просто работает → Легко настраивается → → Pipeline

    Hell → Нет структуры → CPS Декларативный → Сложнее сломать* → Легче поддерживать → И распространять → За рамками дозволенного действовать сложно → Документация пока страдает → Нет “простых” точек расширения
  12. Материалы 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