SlideShare a Scribd company logo
Konstantin Krivlenia - "Continuous integration for frontend"
goo.gl/2fXwj1
git pull origin master
Konstantin Krivlenia - "Continuous integration for frontend"
Как избежать
npm test
/ci/cool-module.js:3
return myCoolFunction();
^
ReferenceError: myCoolFunction is not defined
...
01.
02.
03.
04.
05.
const coolModule = require('../cool-module')
const assert = require('assert')
describe('test cool module', () => {
it(`Answer to the Ultimate Question of Life,
the Universe, and Everything`, () => {
assert.equal(42, coolModule.doSomething())
})
})
Konstantin Krivlenia - "Continuous integration for frontend"
error no-tabs
error
Как избежать
npm run lint
/ci/cool-module.js
6:2 Unexpected tab character
6:3 Expected indentation of 4 spaces but found 2 tabs
✖ 2 problems (2 errors, 0 warnings)
01.
02.
03.
04.
Размер сборки
Имя файла Размер до Размер после
bundle.js 72.1 kB 340 kB
Изменения
const $ = require('jquery');
$('someId').hide();
01.
02.
Как избежать
npm run check-file-size
Size of bundle is huge. Expected 100 but actual 102
Git Hooks
.git/pre-commit
npm test
npm run lint
npm run check-file-size
01.
02.
03.
nlf/precommit-hook
...
"pre-commit": ["lint", "test"]
01.
02.
Отключаем pre-commit hook
git commit --no-verify -m "Я знаю, что я делаю"
Setup CI
.travis.yml
language: node_js
node_js:
- "6"
script:
npm run travis
.package.json
{
…
"scripts": {
…
"travis": "npm run test && npm run lint && npm run check…"
…
}
Konstantin Krivlenia - "Continuous integration for frontend"
Konstantin Krivlenia - "Continuous integration for frontend"
Konstantin Krivlenia - "Continuous integration for frontend"
...
env:
matrix:
- TEST_TYPE=test
- TEST_TYPE=lint
- TEST_TYPE=size
script:
- |
if [ "$TEST_TYPE" = test ]; then
npm test
elif [ "$TEST_TYPE" = size ]; then
npm run check-file-size
elif [ "$TEST_TYPE" = lint ]; then
npm run lint
Konstantin Krivlenia - "Continuous integration for frontend"
Konstantin Krivlenia - "Continuous integration for frontend"
Jenkins
Konstantin Krivlenia - "Continuous integration for frontend"
Konstantin Krivlenia - "Continuous integration for frontend"
Konstantin Krivlenia - "Continuous integration for frontend"
pipeline {
agent {
dockerfile {
filename 'Dockerfile'
}
}
stages {
stage('build') {
steps {
sh 'npm install'
}
}
...
}
Konstantin Krivlenia - "Continuous integration for frontend"
Konstantin Krivlenia - "Continuous integration for frontend"
Konstantin Krivlenia - "Continuous integration for frontend"
Konstantin Krivlenia - "Continuous integration for frontend"
Konstantin Krivlenia - "Continuous integration for frontend"
docker run -d --name jenkins -p
8080:8080 -v $PWD/jenkins:/var/jenkins_home
-v /var/run/docker.sock:/var/run/docker.sock
-t logimethods/blueocean
Другие CI
• https://concourse.ci
• https://circleci.com
• teamcity
Бенефиты
Раннее выявление
багов
Избежание затяжных
релизов
Артефакты сборок
Прививание
дисциплины в
команде
Один шаг к непрерывной
доставке
Снятие метрик для
кода
Покрытие кода
Сложность кода
Недостатки
Настройка системы
Не всегда отображает
реальную ситуацию
Долгий отклик
Нестабильность
системы
Не информативность
Вопросы?

More Related Content

PDF
Making Scalable JavaScript Application
PDF
Делаем кроссбраузерные тесты поверх Webdriver
PDF
Многопоточность в браузере. Модель акторов — Константин Крамлих
PPTX
PDF
#2 "Распространённые ошибки в JavaScript" Денис Речкунов
PPTX
Михаил Щербаков "WinDbg сотоварищи"
PDF
Леонид Васильев "Python в инфраструктуре поиска"
PPTX
WinDbg со товарищи
Making Scalable JavaScript Application
Делаем кроссбраузерные тесты поверх Webdriver
Многопоточность в браузере. Модель акторов — Константин Крамлих
#2 "Распространённые ошибки в JavaScript" Денис Речкунов
Михаил Щербаков "WinDbg сотоварищи"
Леонид Васильев "Python в инфраструктуре поиска"
WinDbg со товарищи

What's hot (20)

PDF
TARS: Сделай уровень frontend-рутины 0% — Артём Малко, 2ГИС
PDF
Асинхронный JavaScript
PDF
Caching data outside Java Heap and using Shared Memory in Java
PPTX
WinDbg в руках .NET разработчика
PDF
Суперсилы Chrome developer tools
PDF
Встреча №8. NSIncrementalStore, или как заставить Core Data варить ваш собств...
PDF
Software Transactional Memory
PDF
«Изоморфные js приложения с использованием catberry.js», Денис Речкунов
PDF
Стажировка 2016-07-14 02 Евгений Тарасенко. JavaScript
PPT
Сергей Париев - "обработка дедлоков в MySql"
PDF
2014-11-01 03 Николай Линкер. Open your clojure
PDF
Вячеслав Олиянчук — Яндекс.Авто 2.0 на Node.js
ODP
Ice Php Framework Preview Release
PDF
Филипп Ковалев — Путь в npm
PDF
Базы данных. Hash & Cache
ODP
Boost.Algorithm: что, зачем и почему
PDF
Произвольная смена дизайна системного скроллбара
PPTX
Selenium grid. OK version
PDF
Clojure – есть ли жизнь после Java
PDF
Present saint-per3-by-pavel-vlasov
TARS: Сделай уровень frontend-рутины 0% — Артём Малко, 2ГИС
Асинхронный JavaScript
Caching data outside Java Heap and using Shared Memory in Java
WinDbg в руках .NET разработчика
Суперсилы Chrome developer tools
Встреча №8. NSIncrementalStore, или как заставить Core Data варить ваш собств...
Software Transactional Memory
«Изоморфные js приложения с использованием catberry.js», Денис Речкунов
Стажировка 2016-07-14 02 Евгений Тарасенко. JavaScript
Сергей Париев - "обработка дедлоков в MySql"
2014-11-01 03 Николай Линкер. Open your clojure
Вячеслав Олиянчук — Яндекс.Авто 2.0 на Node.js
Ice Php Framework Preview Release
Филипп Ковалев — Путь в npm
Базы данных. Hash & Cache
Boost.Algorithm: что, зачем и почему
Произвольная смена дизайна системного скроллбара
Selenium grid. OK version
Clojure – есть ли жизнь после Java
Present saint-per3-by-pavel-vlasov
Ad

Similar to Konstantin Krivlenia - "Continuous integration for frontend" (11)

PDF
Внутреннее устройство и оптимизация бандла webpack
PDF
Модель памяти C++ - Андрей Янковский, Яндекс
PPTX
Владимир Горбенко «Использование блоков в Objective-C»
PDF
По колено в Си++ г... коде
PDF
20130429 dynamic c_c++_program_analysis-alexey_samsonov
PDF
Семинар 5. Многопоточное программирование на OpenMP (часть 5)
PPTX
Статический анализ кода: Что? Как? Зачем?
PDF
Архитектура. Доступноять программных систем.
PDF
Александр Тармолов "БЭМ и JavaScript: Тестирование"
PDF
Михаил Давыдов "Масштабируемые JavaScript-приложения"
PPT
Юнит-тестирование и Google Mock. Влад Лосев, Google
Внутреннее устройство и оптимизация бандла webpack
Модель памяти C++ - Андрей Янковский, Яндекс
Владимир Горбенко «Использование блоков в Objective-C»
По колено в Си++ г... коде
20130429 dynamic c_c++_program_analysis-alexey_samsonov
Семинар 5. Многопоточное программирование на OpenMP (часть 5)
Статический анализ кода: Что? Как? Зачем?
Архитектура. Доступноять программных систем.
Александр Тармолов "БЭМ и JavaScript: Тестирование"
Михаил Давыдов "Масштабируемые JavaScript-приложения"
Юнит-тестирование и Google Mock. Влад Лосев, Google
Ad

More from IT Event (20)

PDF
Denis Radin - "Applying NASA coding guidelines to JavaScript or airspace is c...
PDF
Sara Harkousse - "Web Components: It's all rainbows and unicorns! Is it?"
PDF
Max Voloshin - "Organization of frontend development for products with micros...
PDF
Roman Romanovsky, Sergey Rak - "JavaScript в IoT "
PPTX
Illya Klymov - "Vue.JS: What did I swap React for in 2017 and why?"
PDF
Evgeny Gusev - "A circular firing squad: How technologies drag frontend down"
PDF
Vladimir Grinenko - "Dependencies in component web done right"
PDF
Dmitry Bartalevich - "How to train your WebVR"
PDF
Aleksey Bogachuk - "Offline Second"
PDF
James Allardice - "Building a better login with the credential management API"
PDF
Fedor Skuratov "Dark Social: as messengers change the market of social media ...
PPTX
Андрей Зайчиков "Архитектура распределенных кластеров NoSQL на AWS"
PPTX
Алексей Рагозин "Java и linux борьба за микросекунды"
PPTX
Volodymyr Lyubinets "Introduction to big data processing with Apache Spark"
PDF
Наш ответ Uber’у
PDF
Александр Крашенинников "Hadoop High Availability: опыт Badoo"
PDF
Leonid Vasilyev "Building, deploying and running production code at Dropbox"
PDF
Анатолий Пласковский "Миллионы карточных платежей за месяц, или как потерять ...
PDF
Mete Atamel "Resilient microservices with kubernetes"
PDF
Andrew Stain "User acquisition"
Denis Radin - "Applying NASA coding guidelines to JavaScript or airspace is c...
Sara Harkousse - "Web Components: It's all rainbows and unicorns! Is it?"
Max Voloshin - "Organization of frontend development for products with micros...
Roman Romanovsky, Sergey Rak - "JavaScript в IoT "
Illya Klymov - "Vue.JS: What did I swap React for in 2017 and why?"
Evgeny Gusev - "A circular firing squad: How technologies drag frontend down"
Vladimir Grinenko - "Dependencies in component web done right"
Dmitry Bartalevich - "How to train your WebVR"
Aleksey Bogachuk - "Offline Second"
James Allardice - "Building a better login with the credential management API"
Fedor Skuratov "Dark Social: as messengers change the market of social media ...
Андрей Зайчиков "Архитектура распределенных кластеров NoSQL на AWS"
Алексей Рагозин "Java и linux борьба за микросекунды"
Volodymyr Lyubinets "Introduction to big data processing with Apache Spark"
Наш ответ Uber’у
Александр Крашенинников "Hadoop High Availability: опыт Badoo"
Leonid Vasilyev "Building, deploying and running production code at Dropbox"
Анатолий Пласковский "Миллионы карточных платежей за месяц, или как потерять ...
Mete Atamel "Resilient microservices with kubernetes"
Andrew Stain "User acquisition"

Konstantin Krivlenia - "Continuous integration for frontend"