SlideShare a Scribd company logo
Continuous Integration/
Continuous Delivery веб-приложения
Evgeniy Kuzmin, CTO Smart Gamma
Agile attributes
- Continuous integration with codebase
- Development with autotests
- Continuous feedback
- Bugfix first
- Feature planning & releases
Goals
- Increase development speed
- Increase product quality
- Decrease risk
- Improve feedback
- Increase time-to-market
Goal
Use CI/CD not only for big
teams
Initial Conditions
- workstationhealth.com
- Laravel framework
- 3 in house devs
- AWS
- Jira
- bitbucket
- QA/DevOps consulting
CI/CD Journey
Trunc-based flow - “pure” CI
Feature / task branching GIT flow
Is this CI?
- small team
- short-lived branches
- force integration with develop in the
task branch “in-progress” state
Requirements
Force developers for faster integration
Docker local development
docker-compose.yml
docker-compose-local.yml
https://gist.github.com/Evgenas/c6da523eb2462d848d93505ef
603208b
$ docker-compose -f docker-compose.yml -f docker-compose.local.yml up
Or use Makefile
$ make up
Required setup
T2.xlarge – 4 vCores/8GB RAM
Tools
Jenkins
Selenium
Mailhog
Subdomains
jenkins.
stage.
end2end.
preprod.
mail.
Auto-testing
“Одним только тестированием качества не
добиться. Рецепт получения высокого качества:
смешивайте разработку и тестирование в
блендере, пока они не станут единой
субстанцией.”
“Вся ответственность за качество лежит на
плечах тех, кто пишет код. Разработчик
отвечает за качество всего кода, к которому он
прикасается: пишет, исправляет или вносит
изменения.”
Роли: разработчик, разработчик в тестировании, инженер по тестированию
Типы тестов: лёгкие, средние, долгие, супердолгие
100% покрытие vs избирательное тестирование
Модульные тесты (лёгкие)
dependencies
amount
Algorithmic
complexity
Mediators
бизнес-логика
Простой код
без
зависимостей
God Object /
Spaghetti
Функциональные тесты (средние)
Attributes
Database connection
Request modeling
Response assertion
Database assertion
Goals
API layer stability
Business logic
Testing code coverage (over unit
testing coverage)
Laravel pros
Easy HOW TO START documentation
Phpunit wrapper
Transaction support “from the box”
Continuous integration / continuous delivery
Continuous integration / continuous delivery
Continuous integration / continuous delivery
Testing code coverage
phpdbg – allows get test code coverage faster then
xdebug
find tests/ -name '*Test.php' |
./vendor/liuggio/fastest/fastest -o -p 4 -x phpunit.xml
'phpdbg -qrr ./vendor/phpunit/phpunit/phpunit {}
--coverage-php ./tests/_reports/logs/{n}.cov;'
phpcov – allows merge test coverage from threads
phpdbg -qrr ./vendor/bin/phpcov merge tests/_reports/logs/
--clover tests/_reports/logs/clover.xml
Etalon Datas
Data loading variation:
- Inline in each test
- Preload before suite
Laravel:
- Seeds / factories
- Organize domain data builders
- Transactions
Domain Data Builders
Transactions in phpunit
Restore DB to the initial state after each test is completed
How to get faster feedback?
Goal-keep Limits:
- 5 mins for unit/functional tests
- 20 mins for UI tests
Benchmark for 1 thread
Tests: 632, Assertions: 6765:
5 minutes 21 seconds
Optimizations:
- tests multithreading execution
- seeds reload optimization
- selective build code coverage
(only in development branch)
Multithreading tests
Tool:
Fastest - https://github.com/liuggio/fastest
find tests/ -name '*Test.php' |
./vendor/liuggio/fastest/fastest
-o -p 4 -x phpunit.xml 'phpdbg -qrr
./vendor/phpunit/phpunit/phpunit {} --coverage-php
./tests/_reports/logs/{n}.cov;'
Seeds reload optimization
Optimization result
5 minutes 52 seconds vs 59 seconds
Continuous integration / continuous delivery
Phing - build automation tool
Goal: One step build
Tool: https://www.phing.info/
Sample: https://gist.github.com/Evgenas/97fc0bfb
Continuous integration / continuous delivery
Jenkins
Trigger light tests suite build (ergoblitz-build-minimal)
BitBucket Plugin: https://plugins.jenkins.io/bitbucket
Bitbucket Pullrequest Builder: https://plugins.jenkins.io/bitbucket-pullrequest-builder
Continuous integration / continuous delivery
Phing Plugin:
https://plugins.jenkins.io/phing
Tests feedback notifications
Slack Notification Plugin: https://plugins.jenkins.io/slack
Trigger next level tests
Parameterized Trigger Plugin:
https://plugins.jenkins.io/parameterized-trigger
Continuous integration / continuous delivery
UI/User Stories testing automation - end2end tests
Behat - what is inside?
BDD or not BDD?
Continuous integration / continuous delivery
Continuous integration / continuous delivery
Continuous integration / continuous delivery
Continuous integration / continuous delivery
Jenkins behat job config
Run upstream behat job from build-ci-minimal job
Jenkins behat job config
Clean up end2end. environment
Reseed / redeploy before testing
Run tests with fastest for multithreading
Success result
Trace failed tests
Linked screenshot
Continuous integration / continuous delivery
Jira releases
Jenkins prepare release job
How to stick Jenkins build to Jira release
Jira Plugin: https://plugins.jenkins.io/jira
Continuous integration / continuous delivery
Continuous integration / continuous delivery
Merge develop to master
Prepare docker images for production
Amazon ECR
Jenkins Docker build
DockerCommon Plugin:
https://plugins.jenkins.io/docker-commons
CloudBees Docker Build and Publish Plugin:
https://plugins.jenkins.io/docker-build-publish
Amazon ECR Plugin:
https://plugins.jenkins.io/amazon-ecr
Preproduction
deployment
Amazon Elastic Beanstalk
Multicontainer Docker Environment
Beanstalk Environments
Continuous integration / continuous delivery
Blue/Green deploy
BlueGreen
deploy settings
AWS Elastic Beanstalk Plugin: https://plugins.jenkins.io/awseb-deployment-plugin
How to connect Jenkins and AWS Beanstalk
Continuous integration / continuous delivery
AWS Beanstalk configuration files
App deployment: /Dockerrun.aws.json
DB Migrations: ./ebextensions/my-scripts.config
Cron: ./ebextensions/cronjob.config
https://gist.github.com/Evgenas/8bdf43a1
Dockerrun.aws.json
Cronjob setup on deploy
Run migration on deploy
Blue-Green Deployment execution
Migrations rules for blue-green deployments
https://wiki.openstack.org/wiki/DBMigrationBestPractices
Continuous integration / continuous delivery
Continuous integration / continuous delivery
Additional preproduction auto-testing with BrowserStack
Deploy to production
Production / preproduction errors monitoring with Slack
evgeniy.k@smart-gamma.com
https://www.linkedin.com/in/evgeniy-kuzmin-03816a52/

More Related Content

PPTX
Continuous Integration/ Continuous Delivery of web applications
PPTX
Continuous integration / continuous delivery of web applications, Eugen Kuzmi...
PPTX
Symfony 2 under control
PDF
Changing application demands: What developers need to know
PDF
Gradle - From minutes to seconds: minimizing build times
PPTX
Continuous integration using atlassian bamboo
PPTX
FAST for SharePoint Deep Dive
PDF
Developer Experience Cloud Native - Become Efficient and Achieve Parity
Continuous Integration/ Continuous Delivery of web applications
Continuous integration / continuous delivery of web applications, Eugen Kuzmi...
Symfony 2 under control
Changing application demands: What developers need to know
Gradle - From minutes to seconds: minimizing build times
Continuous integration using atlassian bamboo
FAST for SharePoint Deep Dive
Developer Experience Cloud Native - Become Efficient and Achieve Parity

What's hot (20)

PDF
How to integrate front end tool via gruntjs
PPTX
Continuous Testing using Shippable and Docker
PPTX
Speed up your build pipeline for faster feedback
PPTX
Infrastructure as Code for Network
PDF
Automated acceptance test
PDF
はじめての JFrog Artifactory
PPTX
Symfony Under Control by Maxim Romanovsky
PDF
Unleashing Docker with Pipelines in Bitbucket Cloud
PDF
Jenkins to Gitlab - Intelligent Build-Pipelines
PPTX
Дмитрий Лемешко. Comaqa Spring 2018. Continuous mobile automation in build pi...
PDF
JCConf 2015 workshop 動手玩 Java 專案建置工具
PDF
Jenkins Pipeline Tutorial | Continuous Delivery Pipeline Using Jenkins | DevO...
PDF
Jenkins Pipeline @ Scale. Building Automation Frameworks for Systems Integration
PDF
Monitoring Akka with Kamon 1.0
PPTX
SkyBase - a Devops Platform for Hybrid Cloud
PDF
Continuous Performance Testing: The New Standard
PPT
Continuous Integration (CI) and Continuous Delivery (CD) using Jenkins & Docker
PDF
Continuous Delivery with Jenkins Workflow
PDF
Your own kubernetes castle
PDF
7 Habits of Highly Effective Jenkins Users
How to integrate front end tool via gruntjs
Continuous Testing using Shippable and Docker
Speed up your build pipeline for faster feedback
Infrastructure as Code for Network
Automated acceptance test
はじめての JFrog Artifactory
Symfony Under Control by Maxim Romanovsky
Unleashing Docker with Pipelines in Bitbucket Cloud
Jenkins to Gitlab - Intelligent Build-Pipelines
Дмитрий Лемешко. Comaqa Spring 2018. Continuous mobile automation in build pi...
JCConf 2015 workshop 動手玩 Java 專案建置工具
Jenkins Pipeline Tutorial | Continuous Delivery Pipeline Using Jenkins | DevO...
Jenkins Pipeline @ Scale. Building Automation Frameworks for Systems Integration
Monitoring Akka with Kamon 1.0
SkyBase - a Devops Platform for Hybrid Cloud
Continuous Performance Testing: The New Standard
Continuous Integration (CI) and Continuous Delivery (CD) using Jenkins & Docker
Continuous Delivery with Jenkins Workflow
Your own kubernetes castle
7 Habits of Highly Effective Jenkins Users
Ad

Similar to Continuous integration / continuous delivery (20)

PDF
Automated testing DrupalCamp in Asheville
PDF
Developing PHP Applications Faster
PPTX
Continuous Delivery - Automate & Build Better Software with Travis CI
PDF
Enabling Agile Testing Through Continuous Integration Agile2009
PPTX
Test-Driven-Development for Networking: Making CI Work for You by Colin McNam...
KEY
Continuous Integration, the minimum viable product
PPTX
Functional Continuous Integration with Selenium and Hudson
PDF
The road to continuous deployment (DomCode September 2016)
PPTX
Continuous integration
PDF
DPE Summit - A More Integrated Build and CI to Accelerate Builds at Netflix
PPTX
Continuous Test Automation via CI (CodeMash 2012) - Automating the Agile way
PDF
What is Continuous Integration_ - A Comprehensive Guide.pdf
PDF
DevOps & DevEx
PDF
Automate your way to agility
PPTX
Developing apps faster
PDF
The road to continuous deployment (PHPCon Poland 2016)
PDF
Continuous Quality Assurance using Selenium WebDriver
PDF
Continuous Quality Assurance using Selenium WebDriver
 
PDF
Continuous Deployment – Nextdoor.fi released every day at Scan-Agile 2011
Automated testing DrupalCamp in Asheville
Developing PHP Applications Faster
Continuous Delivery - Automate & Build Better Software with Travis CI
Enabling Agile Testing Through Continuous Integration Agile2009
Test-Driven-Development for Networking: Making CI Work for You by Colin McNam...
Continuous Integration, the minimum viable product
Functional Continuous Integration with Selenium and Hudson
The road to continuous deployment (DomCode September 2016)
Continuous integration
DPE Summit - A More Integrated Build and CI to Accelerate Builds at Netflix
Continuous Test Automation via CI (CodeMash 2012) - Automating the Agile way
What is Continuous Integration_ - A Comprehensive Guide.pdf
DevOps & DevEx
Automate your way to agility
Developing apps faster
The road to continuous deployment (PHPCon Poland 2016)
Continuous Quality Assurance using Selenium WebDriver
Continuous Quality Assurance using Selenium WebDriver
 
Continuous Deployment – Nextdoor.fi released every day at Scan-Agile 2011
Ad

More from EatDog (20)

PDF
Классифицируем текст в iOS без CoreML: как и зачем?
PDF
macOS app development for iOS devs: expand your horizons
PPTX
Dependency Injections in Kotlin
PDF
Быстрый в имплементации и в работе мониторинг с использованием ELK
PDF
Как мы экспериментируем в больших микросервисных системах
PDF
Отказоустойчивый Redis кластер
PDF
Кодстайл и насилие.
PDF
Refactor to Reactive With Spring 5 and Project Reactor
PDF
GraphQL: APIs the New Way.
PPTX
Большие проекты, архитектура и фреймворки.
PDF
Microservices in a Wild.
PDF
Dependency Rejection and TDD without Mocks
PPTX
Стероиды для Дотнетчика
PPTX
Domain Driven Design – просто о сложном.
PDF
OWASP: безопасное программирование на PHP.
PDF
Принципы Solid на практике
PDF
Mapbox GL: как работают современные векторные карты
PDF
Нельзя просто так взять и сделать версионирование API
PDF
API в SAAS, с облаком и без: ресурсы, SLA, балансировка, расширяемость
PDF
Выжить с помощью ООП. Максим Гопей
Классифицируем текст в iOS без CoreML: как и зачем?
macOS app development for iOS devs: expand your horizons
Dependency Injections in Kotlin
Быстрый в имплементации и в работе мониторинг с использованием ELK
Как мы экспериментируем в больших микросервисных системах
Отказоустойчивый Redis кластер
Кодстайл и насилие.
Refactor to Reactive With Spring 5 and Project Reactor
GraphQL: APIs the New Way.
Большие проекты, архитектура и фреймворки.
Microservices in a Wild.
Dependency Rejection and TDD without Mocks
Стероиды для Дотнетчика
Domain Driven Design – просто о сложном.
OWASP: безопасное программирование на PHP.
Принципы Solid на практике
Mapbox GL: как работают современные векторные карты
Нельзя просто так взять и сделать версионирование API
API в SAAS, с облаком и без: ресурсы, SLA, балансировка, расширяемость
Выжить с помощью ООП. Максим Гопей

Recently uploaded (20)

PDF
Building Integrated photovoltaic BIPV_UPV.pdf
PDF
MIND Revenue Release Quarter 2 2025 Press Release
PDF
Diabetes mellitus diagnosis method based random forest with bat algorithm
PDF
A comparative study of natural language inference in Swahili using monolingua...
PDF
Profit Center Accounting in SAP S/4HANA, S4F28 Col11
PDF
Accuracy of neural networks in brain wave diagnosis of schizophrenia
PDF
Architecting across the Boundaries of two Complex Domains - Healthcare & Tech...
PPTX
SOPHOS-XG Firewall Administrator PPT.pptx
PPTX
cloud_computing_Infrastucture_as_cloud_p
PDF
Advanced methodologies resolving dimensionality complications for autism neur...
PDF
A comparative analysis of optical character recognition models for extracting...
PDF
Build a system with the filesystem maintained by OSTree @ COSCUP 2025
PDF
Mobile App Security Testing_ A Comprehensive Guide.pdf
PDF
TokAI - TikTok AI Agent : The First AI Application That Analyzes 10,000+ Vira...
PDF
Mushroom cultivation and it's methods.pdf
PDF
Agricultural_Statistics_at_a_Glance_2022_0.pdf
PDF
Reach Out and Touch Someone: Haptics and Empathic Computing
PPT
Teaching material agriculture food technology
PPTX
1. Introduction to Computer Programming.pptx
PDF
gpt5_lecture_notes_comprehensive_20250812015547.pdf
Building Integrated photovoltaic BIPV_UPV.pdf
MIND Revenue Release Quarter 2 2025 Press Release
Diabetes mellitus diagnosis method based random forest with bat algorithm
A comparative study of natural language inference in Swahili using monolingua...
Profit Center Accounting in SAP S/4HANA, S4F28 Col11
Accuracy of neural networks in brain wave diagnosis of schizophrenia
Architecting across the Boundaries of two Complex Domains - Healthcare & Tech...
SOPHOS-XG Firewall Administrator PPT.pptx
cloud_computing_Infrastucture_as_cloud_p
Advanced methodologies resolving dimensionality complications for autism neur...
A comparative analysis of optical character recognition models for extracting...
Build a system with the filesystem maintained by OSTree @ COSCUP 2025
Mobile App Security Testing_ A Comprehensive Guide.pdf
TokAI - TikTok AI Agent : The First AI Application That Analyzes 10,000+ Vira...
Mushroom cultivation and it's methods.pdf
Agricultural_Statistics_at_a_Glance_2022_0.pdf
Reach Out and Touch Someone: Haptics and Empathic Computing
Teaching material agriculture food technology
1. Introduction to Computer Programming.pptx
gpt5_lecture_notes_comprehensive_20250812015547.pdf

Continuous integration / continuous delivery