SlideShare a Scribd company logo
Continuous Integration and Automated
Deployments for Symfony-based projects
Symfony 2 under control
PHP Minsk User Group
INTRODUCTION
2
Max Romanovsky
maxromanovsky.com
max.romanovsky@gmail.com
Maxim_Romanovsky@epam.com
Twitter, LinkedIn, SensioLabs Connect,
MoiKrug: maxromanovsky
Who am I
3
Continuous integration (CI) is the practice, in
software engineering, of merging all
developer working copies with a shared
mainline several times a day.
http://en.wikipedia.org/wiki/Continuous_integr
ation
http://www.martinfowler.com/articles/continuo
usIntegration.html
What is Continuous Integration?
4
• Improve quality of application
• Understand current situation on project
• Automate your checklists & verifications
• Notify different people on different events
– Build broken? – Developers
– New build deployed to QA? – QA engineers
– New build deployed to UAT/Production? –
Customers
How could it help you?
5
Dependencies
• Composer
• Platform
packages
• Phar
• Pear
• Pecl
Build
• Phing
• phpqatools.org
Continuous
Integration
• Jenkins CI
• Additional PHP-
related & general
plugins
• Git
Deployment
• Package with
vendors
• Capifony
• Doctrine
Migrations
Our proposal for Symfony-based projects
6
DEPENDENCIES
7
Manages 3rd party
dependencies
required at runtime*
• Bundles
• PHP libraries
• JS/CSS libraries
• *Phpunit for hphpa
8
Composer
getcomposer.org
Checklist
• stability
• lib-*, ext-*
• install vs update
• require
• version masks
• Keep composer.phar
under VCS
• Satis for private
packages
9
Composer
github.com/composer/satis
lib-*, ext-*: goo.gl/Z8dFal
Phar
• Only for CLI libraries used for development and build
• Composer, php-cs-fixer
Pear
• Build tools
• Phing, phpunit*, phpqatools
Pecl
• For PHP extensions missing in platform packages
Platform packages (apt, yum, ports)
• Use it for all purposes if you can (PHP, extensions etc.)
Other tools
10
What to update?
• Composer dependencies
• PHARs
• PEARs
• PECLs
• Platform packages
Keep in mind
• Update at the beginning of the
iteration
• Read changelogs
• Subscribe to news feeds
• Use * as Composer dependency
version to receive all updates
• Not for Symfony itself 
Dev
QA
Staging
• Performance testing
• Check logs
Production
11
Don’t forget about updates!
BUILD
12
Ant
• From Java world
• XML declarative config
• Can run tasks in parallel
• No PHP-specific tasks
• Could be extended (Java)
• IDE support
Phing
• Written in PHP
• Ant config syntax
• All tasks by default are running
in the single PHP process
• Could be extended (PHP)
• IDE support
Pake
• Written in PHP
• Not so popular
• PHP-based config
• github.com/indeyets/pake/wiki
Build tools
13
build-symfony-
ci.xml
• Default workflow
build.xml
• Overwrites for current
project
build.properties.dist
• Default configuration
build.properties
• Project configuration
14
Phing
phing.info
Target
• A set of tasks
• Could depend
on other targets
• phing
<target_name>
Task
• Action
executed as a
part of target
• Custom tasks
can be
implemented
Types
• Reference
• FileSet
• Property
• Other
• FileList
• Filters
Phing Terminology
15
build
• for dev
environment
• outputs to
the console
build-ci
• for CI
environment
• outputs to
XML files
package
• generates
artifacts for
deployment
• tar.gz
archive
• SQL
schema
dump
deploy
• deploys
tar.gz
archive to
the
environment
Main Phing Targets
16
Special clean
prepare
build-tools-self-update
Composer-
specific
composer-validate
dependencies-install
dependencies-list-updates update –dry-run
symfony-security-checker security.sensiolabs.org
Phing Targets (1/6)
17
General phplint
php -l
phploc
pdepend
charts
phpmd
+ custom config
phpcs/phpcs-js
+ custom config (PSR-1&2, no
var_dump(). console.log() etc)
phpcpd
Phing Targets (2/6)
18
General apidoc
PHPDoc
projectdoc
rst2html
phpunit
via exec
phpcb
PHP_CodeBrowser UI
php-cs-fixer
hphpa
HipHop static analysis
No target for KPHP yet 
Phing Targets (3/6)
19
Symfony-
specific
copy-configs-ci parameters.yml for CI
cache:warmup app/cache is removed
during build
twig:lint for Bundles and
app/Resources
assets:install
assetic:dump YUICompressor, Google
Closure Compressor,
lessphp
Phing Targets (4/6)
20
Symfony-
specific
doctrine:database:drop
doctrine:database:create
doctrine:migrations:migrate
doctrine:fixtures:load
doctrine:schema:validate
doctrine:schema:dump –
dump-sql
for DDL schema
artifact
Phing Targets (5/6)
21
Package package-version version.txt
package-db-schema schema.sql
package-archive
Deployment deploy-maintenance- enable/disable
deploy-backup-db
deploy-clear-doctrine-cache Only if not in APC
deploy-cleanup-old-releases
deploy-artifact artifact name provided via CLI
argument
Phing Targets (6/6)
22
CONTINUOUS
INTEGRATION
23
CruiseControl
• +PHP Under
Control
TeamCity
• Commercial
Travis CI
• SaaS
Scrutinizer CI
• SaaS
• PHP-oriented
Jenkins CI
• ex-Hudson CI
CI servers
24
• Open-source
• Enterprise
• Lot of plugins
• PHP Template from Sebastian
Bergmann
• IDE Integration
• RESTful API
25
Jenkins CI overview
jenkins-ci.org
• No comments git
• green & red signs for buildsgreenballs
• parameterized builds
parameterized-
trigger
• git tag selector for builds
• disable internal tagging!
git-parameter
• copy artifact from one job to
anothercopyartifact
• sends emails on successful builds
• useful for deployment jobs
email-ext
26
Jenkins Plugins (common)
goo.gl/IZ2gKE
phing
• phpcs
• hphpacheckstyle
• phpcpddry
• php_dependjdepend
• phploc using CSV filesplot
• phpmdpmd
• aggregates info from phpcs, hphpa,
phpmd, phpcpdviolations
• phpunitxunit
• HTML artifactshtmlpublisher
27
Jenkins Plugins (PHP-specific)
jenkins-php.org
Master
• Bleeding edge
• For completed features
Feature
branch
• Merge to master on completion
• After code review
• Developer executes phing build at least before code review
Tag
• Stable version from master
Bugfix &
develop?
• Sprint branch
• Master branch
• Merge feature branches to sprint branch
• Jenkins job for sprint branch
Git workflow
28
• Builds specific branch (master)
• Features are verified after merge
build-<branchname>
• Parameterized
• Produces .tar.gz artifact from specific
Git tag
build-package-tag
Jenkins Jobs for build
29
• Produces .tar.gz artifact from latest revision of branch
• Deploys to QA
• Not recommended to have more than one such job
(issues with migrations)
• Workaround: multiple QA or complete DB purge on deploy
deploy-qa-<branchname>
• Deploys specific package from build-package-tag to
specified environment
• Ability to enable/disable maintenance mode and error
message
• Email after deployment
deploy-package-tag
Jenkins Jobs for deployment
30
Deployed .tar.gz archive
• <tag>.<build#>
• v0.0.3.26
• <branchname>-<build#>-<revision>-SNAPSHOT
• master-12-7c041a90366ce9d958760094c763d809ffbc629e-
SNAPSHOT
Previous deployed version
DB dump before deployment
Doctrine Migrations info
DB schema
Jenkins Jobs for deployment. Artifacts
31
DEPLOYMENT
32
Capistrano
• from Ruby world
Capifony
• Based on
Capistrano
Shell script
• VCS update
• Rsync
Phar
• Don’t use WebPhar
• Silex does not use
it anymore
Zend Server
package
• No support for
vanilla PHP
PaaS
• AWS Elastic
Beanstalk
• PagodaBox
Deployment tools
33
Based on Capistrano
• Supports Capistrano plugins
Symfony 1&2 deployment
Multistage
• qa, staging, uat, production
Maintenance mode
Clustered environments
34
Capifony
capifony.org
Directories
• releases/
• current/ (symlink)
• shared/
Shared
• app/config/parameters.yml
• app/cache
• app/logs
• web/uploads
Shared files & dirs are
symlink’ed
Shared files & dirs are
not shared across
nodes
Directory structure for Capistrano projects
35
`-- /var/www/my-app.com
|-- current → /var/www/my-app.com/releases/20100512131539
|-- releases
| `-- 20100512131539
| `-- 20100509150741
| `-- 20100509145325
`-- shared
|-- web
| `-- uploads
|-- log
`-- config
`-- databases.yml
Directory structure example
36
All you need is package
• capistrano-deploy-strategy-archive
Github not available?
• Goodbye, vendors!
Decreases deployment time
• Lot of vendors
• Slow internet connection
Reproducible
• You know what you deploy
• You can deploy exactly the same package to multiple
environments
Deployment via SCM vs package
37
.tar.gz
Optimized
autoloader
Contains only
necessary
dirs & files
assets:install assetic:dump
version.txt &
db-
schema.sql
Packaging with Phing
38
DBDeploy Liquibase
Doctrine
Migrations
Doctrine
Fixtures
Database Migrations
39
User
• Triggers job on Jenkins CI
• Choose options (env, maintenance mode)
Jenkins
• Executes single phing target with additional
command-line arguments
Phing
• Executes several Capifony commands
according to command-line arguments
Capifony
• Performs actions on remote machines
Capifony & Jenkins CI
40
Enables Maintenance mode
• maintenance.html in webroot
Backups DB
Clears Doctrine cache
• Not for APC cache
Downloads previous deploy metadata
• package version
• Doctrine Migrations info
Deploys tar.gz archive
Capifony & Phing (1/2)
41
Restarts services
• php-fpm or Apache
• Doctrine APC cache is cleared
Symfony-specific tasks
• copy app/config/parameters.yml
• doctrine:migrations:migrate
• cache:warmup
Disables Maintenance mode
Performs cleanup for old releases
Capifony & Phing (2/2)
42
Semi-
automatical
• from
deployment
server
• usually CI
server
Enable
Maintenance
• manually via
phing
Manually backup
for analysis
• DB
• current version
• Doctrine
Migrations
status
• codebase
Rollback (1/2)
43
Switch to
previous release
• Manually via
capifony CLI
• Recover DB
• Rollback
Doctrine
Migrations
• Restore DB
dump
• Custom
Additional tasks
• Restore web
server config
• Restart service
• cache:warmup
Disable
Maintenance
• Manually via
phing
Rollback (2/2)
44
Write rollback guide
• Step-by-step
• Verify it periodically
Enable monitoring on prod
• Zabbix
• Munin
• New Relic
• Pinba
• Graylog2
Rollback tips
45
SUMMARY
46
• Currently not available online 
• Planning to release in 1-2 months on
GitHub
Where to download?
47
Deployment
•Cronjob / CLI script handling
•Web server (Apache, nginx)
config manipulations
•Ext- and lib- dependency
verification via Composer
What is not implemented yet
48
Questions?

More Related Content

PPTX
Performance tips for Symfony2 & PHP
PPTX
Symfony Under Control by Maxim Romanovsky
PPTX
Symfony 2 under control
PDF
Jenkins to Gitlab - Intelligent Build-Pipelines
PDF
Gitlab - Creating C++ applications with Gitlab CI
PDF
Brujug Jenkins pipeline scalability
PPTX
Pipeline as code - new feature in Jenkins 2
PDF
JCConf 2015 workshop 動手玩 Java 專案建置工具
Performance tips for Symfony2 & PHP
Symfony Under Control by Maxim Romanovsky
Symfony 2 under control
Jenkins to Gitlab - Intelligent Build-Pipelines
Gitlab - Creating C++ applications with Gitlab CI
Brujug Jenkins pipeline scalability
Pipeline as code - new feature in Jenkins 2
JCConf 2015 workshop 動手玩 Java 專案建置工具

What's hot (20)

PDF
Ci For The Web 2.0 Guy Or Gal
KEY
Perlbrew
PDF
(Declarative) Jenkins Pipelines
PDF
7 Habits of Highly Effective Jenkins Users
PPTX
Jenkins days workshop pipelines - Eric Long
PDF
Drone CI/CD Platform
PPTX
Docker - Demo on PHP Application deployment
PPTX
7 Habits of Highly Effective Jenkins Users
PDF
Pragmatic Monolith-First, easy to decompose, clean architecture
PDF
sed.pdf
PDF
An Open-Source Chef Cookbook CI/CD Implementation Using Jenkins Pipelines
PPTX
PHP and FastCGI Performance Optimizations
PDF
Codecoon - A technical Case Study
PDF
Docker 導入:障礙與對策
PDF
Scalable Cloud-Native Masterless Puppet, with PuppetDB and Bolt, Craig Watson...
PDF
Test-Driven Infrastructure with Chef
PDF
"Wix Serverless from inside", Mykola Borozdin
PPTX
PHP Dependency Management with Composer
PDF
Conan a C/C++ Package Manager
PDF
perlbrew yapcasia 2010
Ci For The Web 2.0 Guy Or Gal
Perlbrew
(Declarative) Jenkins Pipelines
7 Habits of Highly Effective Jenkins Users
Jenkins days workshop pipelines - Eric Long
Drone CI/CD Platform
Docker - Demo on PHP Application deployment
7 Habits of Highly Effective Jenkins Users
Pragmatic Monolith-First, easy to decompose, clean architecture
sed.pdf
An Open-Source Chef Cookbook CI/CD Implementation Using Jenkins Pipelines
PHP and FastCGI Performance Optimizations
Codecoon - A technical Case Study
Docker 導入:障礙與對策
Scalable Cloud-Native Masterless Puppet, with PuppetDB and Bolt, Craig Watson...
Test-Driven Infrastructure with Chef
"Wix Serverless from inside", Mykola Borozdin
PHP Dependency Management with Composer
Conan a C/C++ Package Manager
perlbrew yapcasia 2010
Ad

Viewers also liked (20)

PDF
Intégration Continue PHP avec Jenkins CI
PDF
Building and deploying PHP applications with Phing
PPTX
BDD con Behat y Mink en Symfony2
PDF
The Art of Doctrine Migrations
PPTX
CRC cards / Minsk PHP MeetUp #8
PPTX
SymfonyCon Berlin 2016 Jenkins Deployment Pipelines
PDF
Introduction à l'intégration continue en PHP
PPTX
Держим руку на пульсе проекта. Мониторинг PHP-приложений
PPTX
Dependency injection with Symfony 2
PDF
Building and Deploying PHP Apps Using phing
PDF
Juc boston2014.pptx
PDF
Build & deploy PHP application (intro level)
PDF
Dependency Injection
PDF
Deploying PHP applications with Phing
PDF
Microservice architecture
PDF
Acceptance & Functional Testing with Codeception - SunshinePHP 2016
PPTX
Dependency injection - the right way
PDF
Symfony in microservice architecture
PDF
Impact Analysis - LoopConf
PDF
Dependency injection in PHP 5.3/5.4
Intégration Continue PHP avec Jenkins CI
Building and deploying PHP applications with Phing
BDD con Behat y Mink en Symfony2
The Art of Doctrine Migrations
CRC cards / Minsk PHP MeetUp #8
SymfonyCon Berlin 2016 Jenkins Deployment Pipelines
Introduction à l'intégration continue en PHP
Держим руку на пульсе проекта. Мониторинг PHP-приложений
Dependency injection with Symfony 2
Building and Deploying PHP Apps Using phing
Juc boston2014.pptx
Build & deploy PHP application (intro level)
Dependency Injection
Deploying PHP applications with Phing
Microservice architecture
Acceptance & Functional Testing with Codeception - SunshinePHP 2016
Dependency injection - the right way
Symfony in microservice architecture
Impact Analysis - LoopConf
Dependency injection in PHP 5.3/5.4
Ad

Similar to Symfony under control. Continuous Integration and Automated Deployments in Symfony-based projects (20)

PDF
Continuous Integration at Mollie
PPTX
Fluo CICD OpenStack Summit
PPTX
Symfony2 for legacy app rejuvenation: the eZ Publish case study
PPTX
Modern Web-site Development Pipeline
PDF
Version your build process as you version your code
PDF
Enterprise Griffon
PPTX
Tribal Nova Docker feedback
PDF
Apache Continuum Build, Test, and Release
PDF
Drupal 8 - Quick bites
PPTX
Cloud Foundry Roadmap Update - OSCON - May 2017
PDF
Writing Services with ZF2
PDF
From XPages Hero to OSGi Guru: Taking the Scary out of Building Extension Lib...
PDF
Preparing your dockerised application for production deployment
PPTX
Introduction to jenkins
PDF
Nginx conference 2015
PDF
Magento Continuous Integration & Continuous Delivery @MM17HR
PDF
ZF2: Writing Service Components
PPTX
Automatize everything
PPTX
(WPF + WinForms) * .NET Core = Modern Desktop
KEY
Automating Web Application Deployment
Continuous Integration at Mollie
Fluo CICD OpenStack Summit
Symfony2 for legacy app rejuvenation: the eZ Publish case study
Modern Web-site Development Pipeline
Version your build process as you version your code
Enterprise Griffon
Tribal Nova Docker feedback
Apache Continuum Build, Test, and Release
Drupal 8 - Quick bites
Cloud Foundry Roadmap Update - OSCON - May 2017
Writing Services with ZF2
From XPages Hero to OSGi Guru: Taking the Scary out of Building Extension Lib...
Preparing your dockerised application for production deployment
Introduction to jenkins
Nginx conference 2015
Magento Continuous Integration & Continuous Delivery @MM17HR
ZF2: Writing Service Components
Automatize everything
(WPF + WinForms) * .NET Core = Modern Desktop
Automating Web Application Deployment

Recently uploaded (20)

PDF
Adobe Illustrator 28.6 Crack My Vision of Vector Design
PDF
Design an Analysis of Algorithms I-SECS-1021-03
PPTX
Agentic AI Use Case- Contract Lifecycle Management (CLM).pptx
PPTX
Operating system designcfffgfgggggggvggggggggg
PDF
Adobe Premiere Pro 2025 (v24.5.0.057) Crack free
PDF
Digital Strategies for Manufacturing Companies
PDF
Addressing The Cult of Project Management Tools-Why Disconnected Work is Hold...
PDF
Nekopoi APK 2025 free lastest update
PDF
Flood Susceptibility Mapping Using Image-Based 2D-CNN Deep Learnin. Overview ...
PDF
Claude Code: Everyone is a 10x Developer - A Comprehensive AI-Powered CLI Tool
PDF
Audit Checklist Design Aligning with ISO, IATF, and Industry Standards — Omne...
PPTX
Odoo POS Development Services by CandidRoot Solutions
PDF
How to Migrate SBCGlobal Email to Yahoo Easily
PDF
top salesforce developer skills in 2025.pdf
PPTX
Introduction to Artificial Intelligence
PDF
Raksha Bandhan Grocery Pricing Trends in India 2025.pdf
PPTX
Reimagine Home Health with the Power of Agentic AI​
PPTX
Agentic AI : A Practical Guide. Undersating, Implementing and Scaling Autono...
PPTX
Oracle E-Business Suite: A Comprehensive Guide for Modern Enterprises
PDF
SAP S4 Hana Brochure 3 (PTS SYSTEMS AND SOLUTIONS)
Adobe Illustrator 28.6 Crack My Vision of Vector Design
Design an Analysis of Algorithms I-SECS-1021-03
Agentic AI Use Case- Contract Lifecycle Management (CLM).pptx
Operating system designcfffgfgggggggvggggggggg
Adobe Premiere Pro 2025 (v24.5.0.057) Crack free
Digital Strategies for Manufacturing Companies
Addressing The Cult of Project Management Tools-Why Disconnected Work is Hold...
Nekopoi APK 2025 free lastest update
Flood Susceptibility Mapping Using Image-Based 2D-CNN Deep Learnin. Overview ...
Claude Code: Everyone is a 10x Developer - A Comprehensive AI-Powered CLI Tool
Audit Checklist Design Aligning with ISO, IATF, and Industry Standards — Omne...
Odoo POS Development Services by CandidRoot Solutions
How to Migrate SBCGlobal Email to Yahoo Easily
top salesforce developer skills in 2025.pdf
Introduction to Artificial Intelligence
Raksha Bandhan Grocery Pricing Trends in India 2025.pdf
Reimagine Home Health with the Power of Agentic AI​
Agentic AI : A Practical Guide. Undersating, Implementing and Scaling Autono...
Oracle E-Business Suite: A Comprehensive Guide for Modern Enterprises
SAP S4 Hana Brochure 3 (PTS SYSTEMS AND SOLUTIONS)

Symfony under control. Continuous Integration and Automated Deployments in Symfony-based projects

  • 1. Continuous Integration and Automated Deployments for Symfony-based projects Symfony 2 under control PHP Minsk User Group
  • 4. Continuous integration (CI) is the practice, in software engineering, of merging all developer working copies with a shared mainline several times a day. http://en.wikipedia.org/wiki/Continuous_integr ation http://www.martinfowler.com/articles/continuo usIntegration.html What is Continuous Integration? 4
  • 5. • Improve quality of application • Understand current situation on project • Automate your checklists & verifications • Notify different people on different events – Build broken? – Developers – New build deployed to QA? – QA engineers – New build deployed to UAT/Production? – Customers How could it help you? 5
  • 6. Dependencies • Composer • Platform packages • Phar • Pear • Pecl Build • Phing • phpqatools.org Continuous Integration • Jenkins CI • Additional PHP- related & general plugins • Git Deployment • Package with vendors • Capifony • Doctrine Migrations Our proposal for Symfony-based projects 6
  • 8. Manages 3rd party dependencies required at runtime* • Bundles • PHP libraries • JS/CSS libraries • *Phpunit for hphpa 8 Composer getcomposer.org
  • 9. Checklist • stability • lib-*, ext-* • install vs update • require • version masks • Keep composer.phar under VCS • Satis for private packages 9 Composer github.com/composer/satis lib-*, ext-*: goo.gl/Z8dFal
  • 10. Phar • Only for CLI libraries used for development and build • Composer, php-cs-fixer Pear • Build tools • Phing, phpunit*, phpqatools Pecl • For PHP extensions missing in platform packages Platform packages (apt, yum, ports) • Use it for all purposes if you can (PHP, extensions etc.) Other tools 10
  • 11. What to update? • Composer dependencies • PHARs • PEARs • PECLs • Platform packages Keep in mind • Update at the beginning of the iteration • Read changelogs • Subscribe to news feeds • Use * as Composer dependency version to receive all updates • Not for Symfony itself  Dev QA Staging • Performance testing • Check logs Production 11 Don’t forget about updates!
  • 13. Ant • From Java world • XML declarative config • Can run tasks in parallel • No PHP-specific tasks • Could be extended (Java) • IDE support Phing • Written in PHP • Ant config syntax • All tasks by default are running in the single PHP process • Could be extended (PHP) • IDE support Pake • Written in PHP • Not so popular • PHP-based config • github.com/indeyets/pake/wiki Build tools 13
  • 14. build-symfony- ci.xml • Default workflow build.xml • Overwrites for current project build.properties.dist • Default configuration build.properties • Project configuration 14 Phing phing.info
  • 15. Target • A set of tasks • Could depend on other targets • phing <target_name> Task • Action executed as a part of target • Custom tasks can be implemented Types • Reference • FileSet • Property • Other • FileList • Filters Phing Terminology 15
  • 16. build • for dev environment • outputs to the console build-ci • for CI environment • outputs to XML files package • generates artifacts for deployment • tar.gz archive • SQL schema dump deploy • deploys tar.gz archive to the environment Main Phing Targets 16
  • 18. General phplint php -l phploc pdepend charts phpmd + custom config phpcs/phpcs-js + custom config (PSR-1&2, no var_dump(). console.log() etc) phpcpd Phing Targets (2/6) 18
  • 19. General apidoc PHPDoc projectdoc rst2html phpunit via exec phpcb PHP_CodeBrowser UI php-cs-fixer hphpa HipHop static analysis No target for KPHP yet  Phing Targets (3/6) 19
  • 20. Symfony- specific copy-configs-ci parameters.yml for CI cache:warmup app/cache is removed during build twig:lint for Bundles and app/Resources assets:install assetic:dump YUICompressor, Google Closure Compressor, lessphp Phing Targets (4/6) 20
  • 22. Package package-version version.txt package-db-schema schema.sql package-archive Deployment deploy-maintenance- enable/disable deploy-backup-db deploy-clear-doctrine-cache Only if not in APC deploy-cleanup-old-releases deploy-artifact artifact name provided via CLI argument Phing Targets (6/6) 22
  • 24. CruiseControl • +PHP Under Control TeamCity • Commercial Travis CI • SaaS Scrutinizer CI • SaaS • PHP-oriented Jenkins CI • ex-Hudson CI CI servers 24
  • 25. • Open-source • Enterprise • Lot of plugins • PHP Template from Sebastian Bergmann • IDE Integration • RESTful API 25 Jenkins CI overview jenkins-ci.org
  • 26. • No comments git • green & red signs for buildsgreenballs • parameterized builds parameterized- trigger • git tag selector for builds • disable internal tagging! git-parameter • copy artifact from one job to anothercopyartifact • sends emails on successful builds • useful for deployment jobs email-ext 26 Jenkins Plugins (common) goo.gl/IZ2gKE
  • 27. phing • phpcs • hphpacheckstyle • phpcpddry • php_dependjdepend • phploc using CSV filesplot • phpmdpmd • aggregates info from phpcs, hphpa, phpmd, phpcpdviolations • phpunitxunit • HTML artifactshtmlpublisher 27 Jenkins Plugins (PHP-specific) jenkins-php.org
  • 28. Master • Bleeding edge • For completed features Feature branch • Merge to master on completion • After code review • Developer executes phing build at least before code review Tag • Stable version from master Bugfix & develop? • Sprint branch • Master branch • Merge feature branches to sprint branch • Jenkins job for sprint branch Git workflow 28
  • 29. • Builds specific branch (master) • Features are verified after merge build-<branchname> • Parameterized • Produces .tar.gz artifact from specific Git tag build-package-tag Jenkins Jobs for build 29
  • 30. • Produces .tar.gz artifact from latest revision of branch • Deploys to QA • Not recommended to have more than one such job (issues with migrations) • Workaround: multiple QA or complete DB purge on deploy deploy-qa-<branchname> • Deploys specific package from build-package-tag to specified environment • Ability to enable/disable maintenance mode and error message • Email after deployment deploy-package-tag Jenkins Jobs for deployment 30
  • 31. Deployed .tar.gz archive • <tag>.<build#> • v0.0.3.26 • <branchname>-<build#>-<revision>-SNAPSHOT • master-12-7c041a90366ce9d958760094c763d809ffbc629e- SNAPSHOT Previous deployed version DB dump before deployment Doctrine Migrations info DB schema Jenkins Jobs for deployment. Artifacts 31
  • 33. Capistrano • from Ruby world Capifony • Based on Capistrano Shell script • VCS update • Rsync Phar • Don’t use WebPhar • Silex does not use it anymore Zend Server package • No support for vanilla PHP PaaS • AWS Elastic Beanstalk • PagodaBox Deployment tools 33
  • 34. Based on Capistrano • Supports Capistrano plugins Symfony 1&2 deployment Multistage • qa, staging, uat, production Maintenance mode Clustered environments 34 Capifony capifony.org
  • 35. Directories • releases/ • current/ (symlink) • shared/ Shared • app/config/parameters.yml • app/cache • app/logs • web/uploads Shared files & dirs are symlink’ed Shared files & dirs are not shared across nodes Directory structure for Capistrano projects 35
  • 36. `-- /var/www/my-app.com |-- current → /var/www/my-app.com/releases/20100512131539 |-- releases | `-- 20100512131539 | `-- 20100509150741 | `-- 20100509145325 `-- shared |-- web | `-- uploads |-- log `-- config `-- databases.yml Directory structure example 36
  • 37. All you need is package • capistrano-deploy-strategy-archive Github not available? • Goodbye, vendors! Decreases deployment time • Lot of vendors • Slow internet connection Reproducible • You know what you deploy • You can deploy exactly the same package to multiple environments Deployment via SCM vs package 37
  • 38. .tar.gz Optimized autoloader Contains only necessary dirs & files assets:install assetic:dump version.txt & db- schema.sql Packaging with Phing 38
  • 40. User • Triggers job on Jenkins CI • Choose options (env, maintenance mode) Jenkins • Executes single phing target with additional command-line arguments Phing • Executes several Capifony commands according to command-line arguments Capifony • Performs actions on remote machines Capifony & Jenkins CI 40
  • 41. Enables Maintenance mode • maintenance.html in webroot Backups DB Clears Doctrine cache • Not for APC cache Downloads previous deploy metadata • package version • Doctrine Migrations info Deploys tar.gz archive Capifony & Phing (1/2) 41
  • 42. Restarts services • php-fpm or Apache • Doctrine APC cache is cleared Symfony-specific tasks • copy app/config/parameters.yml • doctrine:migrations:migrate • cache:warmup Disables Maintenance mode Performs cleanup for old releases Capifony & Phing (2/2) 42
  • 43. Semi- automatical • from deployment server • usually CI server Enable Maintenance • manually via phing Manually backup for analysis • DB • current version • Doctrine Migrations status • codebase Rollback (1/2) 43
  • 44. Switch to previous release • Manually via capifony CLI • Recover DB • Rollback Doctrine Migrations • Restore DB dump • Custom Additional tasks • Restore web server config • Restart service • cache:warmup Disable Maintenance • Manually via phing Rollback (2/2) 44
  • 45. Write rollback guide • Step-by-step • Verify it periodically Enable monitoring on prod • Zabbix • Munin • New Relic • Pinba • Graylog2 Rollback tips 45
  • 47. • Currently not available online  • Planning to release in 1-2 months on GitHub Where to download? 47
  • 48. Deployment •Cronjob / CLI script handling •Web server (Apache, nginx) config manipulations •Ext- and lib- dependency verification via Composer What is not implemented yet 48