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

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

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

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

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