SlideShare a Scribd company logo
Continuous Integration and Automated
Deployments for Symfony-based projects
Symfony 2 under control
Whois
2
INTRODUCTION
3
Batteries ARE Included 
4
For standard
projects
Phing
Jenkins CI Capifony
Quick facts
5
Open Source
Bundle
Quick facts
6
What is Continuous Integration?
7
Improve
quality
Understand
current
situation
Automate
checklists
Notify
colleagues
How could it help you?
8
composer require "epam/ci-
bundle=1.0.*"
//update AppKernel
app/console epam-ci:init
"Acme Demo Project"
How to use?
9
•Tweak configuration
•Install tools on envs
•…
•Profit!
How to use?
10
BUILD
11
Mmm… Build!
12
Ant Phing Pake
Build tools
13
Target
•Set of
tasks
Task
•Action
Types
•Data
types
Phing Terminology
14
build-epam-ci.xml
•Default workflow
build.xml
•Overwrites
Phing build files
15
build.properties.dist
•Project config
build.properties
•Environment config
Phing config files
16
build
•dev env
•console
build-ci
•CI env
•XML
Main Phing Targets
17
package
• tar.gz package
• DDL dump
deploy
• packageenv
Main Phing Targets
18
All Phing targets?
19
Phing. Want more?
20
clean
prepare
build-tools-self-update
Phing Targets. Special
21
validate
install
list-updates
security-checker
Phing Targets. Composer
22
phplint pdepend
phpmd
Phing Targets. Static analysis
23
apidoc phpcs php-cs-fixer
Phing Target. General
24
Phing Targets. General, by Sebastian Bergmann
25
Regular build workflow
DB tasks
twig:lint
Phing Targets. Symfony-specific
26
Package
Deployment
Phing Targets. Deployment
27
CONTINUOUS
INTEGRATION
28
CI servers
29
Open-source
Enterprise
Jenkins CI overview
30
Tons of plugins
PHP Template by
Sebastian Bergmann
Jenkins CI overview
31
IDE Integration
RESTful API
Jenkins CI overview
32
Jenkins CI RESTful API
http://habrahabr.ru/post/169097/ 33
git greenballs
parameterized-
trigger
copyartifact email-ext
Jenkins Plugins (common)
34
phing checkstyle dry
jdepend plot pmd
violations xunit htmlpublisher
Jenkins Plugins (PHP-specific)
35
build-<branchname>
build-package-tag
Jenkins Jobs for build
36
deploy-qa-<branchname>
deploy-package-tag
Jenkins Jobs for deployment
37
Deployed .tar.gz
archive
Previous
deployed version
DB dump before
deployment
Doctrine
Migrations info
DB schema
Jenkins Jobs for deployment. Artifacts
Icons by http://dryicons.com 38
DEPLOYMENT
39
Deployment strategy
40
Custom Zend Server
package
PaaS
Deployment tools
41
Phar
Capistrano Capifony
Deployment tools
42
Based on Capistrano
Symfony 1 & 2
Capifony
43
Multistage
Maintenance mode
Clustered environments
Capifony
44
Directory structure
45
releases/
current/ (symlink)
shared/
Directory structure
46
app/config/parameters.yml
app/logs
web/uploads
Directory structure / Shared
47
ln -s
not shared across nodes
Directory structure / Shared
48
`-- /var/www/my-app.com
|-- current → /var/www/my-app.com/releases/20100512131539
|-- releases
| `-- 20100512131539
| `-- 20100509150741
| `-- 20100509145325
`-- shared
|-- web
| `-- uploads
|-- logs
`-- config
`-- parameters.yml
Directory structure example
from http://capifony.org/#4_setup_server 49
All you need is
package
capistrano-deploy-
strategy-archive
Deployment via SCM vs package
50
Deployment via SCM vs package: Github not
available? Goodbye, vendors!
51
Decreases
deployment time
Increases build time
Deployment via SCM vs package
52
Reproducible
Quick fixes not
available
Deployment via SCM vs package
53
.tar.gz
Optimized autoloader
only necessary dirs & files
Package contents
54
assets:install
assetic:dump
version.txt & db-schema.sql
Package contents
55
DBDeploy Liquibase
Doctrine
Migrations
Doctrine
Fixtures
Database Migrations
56
Deployment: Maintenance mode
57
User Jenkins Phing Capifony
Capifony & Jenkins CI
58
Maintenance mode on
Backup DB
Clear Doctrine cache
Download previous build
metadata
Capifony & Phing. Deployment preparations
59
Deploy tar.gz
package
Restart services
Symfony-specific
tasks
Capifony & Phing. Deployment
60
Maintenance
mode off
Housekeeping
Capifony & Phing. Post-deployment steps
61
Broken build???
62
Enable Maintenance
Manually backup for
analysis
Rollback is semi-automatic
63
Switch to previous release
Additional tasks
Disable Maintenance
Rollback
64
Write rollback guide
Enable monitoring
on prod
Rollback tips
65
P.S.
66
Build
• Static analysis via HHVM
• Actually was implemented, but hphpa changed a
lot (now it’s
https://github.com/sebastianbergmann/hhvm-
wrapper)
Deployment
• Cronjob / CLI script handling
• Web server (Apache, nginx) config manipulations
• Ext- and lib- dependency verification via Composer
• Custom script execution during deployment
What is not implemented yet
67
Questions?

More Related Content

What's hot (19)

PDF
Jenkins to Gitlab - Intelligent Build-Pipelines
Christian Münch
 
PDF
Monitoring Akka with Kamon 1.0
Steffen Gebert
 
PDF
perlbrew yapcasia 2010
Kang-min Liu
 
KEY
Perlbrew
Kang-min Liu
 
PDF
7 Habits of Highly Effective Jenkins Users
Jules Pierre-Louis
 
PPTX
Delivery Pipeline as Code: using Jenkins 2.0 Pipeline
Slawa Giterman
 
PDF
Jenkins vs. AWS CodePipeline (AWS User Group Berlin)
Steffen Gebert
 
PPTX
Eclipse DemoCamp Bucharest 2014 - Continuous Integration Jenkins/Hudson
VladLica
 
PPTX
Continuous Integration and Delivery using TeamCity and Jenkins
Mahmoud Ali
 
PDF
(Declarative) Jenkins Pipelines
Steffen Gebert
 
PPTX
Jenkins pipeline as code
Mohammad Imran Ansari
 
PPTX
Introduce fuego
s60030
 
PDF
An Open-Source Chef Cookbook CI/CD Implementation Using Jenkins Pipelines
Steffen Gebert
 
PPTX
Continuous integration with teamcity
Eugene Sheretov
 
PPTX
Jenkins days workshop pipelines - Eric Long
ericlongtx
 
PDF
Using TeamCity Inside JetBrains
Evgeniy Koshkin
 
PPTX
Jenkins
penetration Tester
 
PDF
Continuous Integration with Cloud Foundry Concourse and Docker on OpenPOWER
Indrajit Poddar
 
PPTX
Jenkins presentation
Valentin Buryakov
 
Jenkins to Gitlab - Intelligent Build-Pipelines
Christian Münch
 
Monitoring Akka with Kamon 1.0
Steffen Gebert
 
perlbrew yapcasia 2010
Kang-min Liu
 
Perlbrew
Kang-min Liu
 
7 Habits of Highly Effective Jenkins Users
Jules Pierre-Louis
 
Delivery Pipeline as Code: using Jenkins 2.0 Pipeline
Slawa Giterman
 
Jenkins vs. AWS CodePipeline (AWS User Group Berlin)
Steffen Gebert
 
Eclipse DemoCamp Bucharest 2014 - Continuous Integration Jenkins/Hudson
VladLica
 
Continuous Integration and Delivery using TeamCity and Jenkins
Mahmoud Ali
 
(Declarative) Jenkins Pipelines
Steffen Gebert
 
Jenkins pipeline as code
Mohammad Imran Ansari
 
Introduce fuego
s60030
 
An Open-Source Chef Cookbook CI/CD Implementation Using Jenkins Pipelines
Steffen Gebert
 
Continuous integration with teamcity
Eugene Sheretov
 
Jenkins days workshop pipelines - Eric Long
ericlongtx
 
Using TeamCity Inside JetBrains
Evgeniy Koshkin
 
Continuous Integration with Cloud Foundry Concourse and Docker on OpenPOWER
Indrajit Poddar
 
Jenkins presentation
Valentin Buryakov
 

Similar to Symfony 2 under control (20)

PPTX
Symfony under control. Continuous Integration and Automated Deployments in Sy...
Max Romanovsky
 
PDF
Build & deploy PHP application (intro level)
Anton Babenko
 
ODP
Continuous deployment-at-flipkart
Pankaj Kaushal
 
PDF
Using Capifony for Symfony apps deployment.
Žilvinas Kuusas
 
PDF
Symfony Live NYC 2014 - Rock Solid Deployment of Symfony Apps
Pablo Godel
 
PDF
SymfonyCon Madrid 2014 - Rock Solid Deployment of Symfony Apps
Pablo Godel
 
PDF
Deploying Symfony | symfony.cat
Pablo Godel
 
PDF
Using Capifony for Symfony apps deployment (updated)
Žilvinas Kuusas
 
PDF
Adopt DevOps philosophy on your Symfony projects (Symfony Live 2011)
Fabrice Bernhard
 
PDF
Continous delivery with Jenkins and Chef
defrag2
 
PDF
Pipeline as code for your infrastructure as Code
Kris Buytaert
 
PDF
Continuous Integration: How I stopped guessing if that merge was bad
Joe Ferguson
 
PPTX
Automated Deployment Pipeline using Jenkins, Puppet, Mcollective and AWS
Bamdad Dashtban
 
PDF
Symfony Deployment with Capifony #symfony_ja
Tak Nishikori
 
PDF
Groovy there's a docker in my application pipeline
Kris Buytaert
 
PDF
OSMC 2017 | Groovy There is a Docker in my Dashing Pipeline by Kris Buytaert
NETWAYS
 
PDF
Rock Solid Deployment of Web Applications
Pablo Godel
 
ODP
Capifony. Minsk PHP MeetUp #11
Yury Pliashkou
 
PDF
Deploying software at Scale
Kris Buytaert
 
Symfony under control. Continuous Integration and Automated Deployments in Sy...
Max Romanovsky
 
Build & deploy PHP application (intro level)
Anton Babenko
 
Continuous deployment-at-flipkart
Pankaj Kaushal
 
Using Capifony for Symfony apps deployment.
Žilvinas Kuusas
 
Symfony Live NYC 2014 - Rock Solid Deployment of Symfony Apps
Pablo Godel
 
SymfonyCon Madrid 2014 - Rock Solid Deployment of Symfony Apps
Pablo Godel
 
Deploying Symfony | symfony.cat
Pablo Godel
 
Using Capifony for Symfony apps deployment (updated)
Žilvinas Kuusas
 
Adopt DevOps philosophy on your Symfony projects (Symfony Live 2011)
Fabrice Bernhard
 
Continous delivery with Jenkins and Chef
defrag2
 
Pipeline as code for your infrastructure as Code
Kris Buytaert
 
Continuous Integration: How I stopped guessing if that merge was bad
Joe Ferguson
 
Automated Deployment Pipeline using Jenkins, Puppet, Mcollective and AWS
Bamdad Dashtban
 
Symfony Deployment with Capifony #symfony_ja
Tak Nishikori
 
Groovy there's a docker in my application pipeline
Kris Buytaert
 
OSMC 2017 | Groovy There is a Docker in my Dashing Pipeline by Kris Buytaert
NETWAYS
 
Rock Solid Deployment of Web Applications
Pablo Godel
 
Capifony. Minsk PHP MeetUp #11
Yury Pliashkou
 
Deploying software at Scale
Kris Buytaert
 
Ad

Recently uploaded (20)

PPTX
Foundations of Marketo Engage - Powering Campaigns with Marketo Personalization
bbedford2
 
PDF
TheFutureIsDynamic-BoxLang witch Luis Majano.pdf
Ortus Solutions, Corp
 
PDF
4K Video Downloader Plus Pro Crack for MacOS New Download 2025
bashirkhan333g
 
PDF
AOMEI Partition Assistant Crack 10.8.2 + WinPE Free Downlaod New Version 2025
bashirkhan333g
 
PDF
ERP Consulting Services and Solutions by Contetra Pvt Ltd
jayjani123
 
PDF
Download Canva Pro 2025 PC Crack Full Latest Version
bashirkhan333g
 
PDF
Everything you need to know about pricing & licensing Microsoft 365 Copilot f...
Q-Advise
 
PPTX
prodad heroglyph crack 2.0.214.2 Full Free Download
cracked shares
 
PDF
Technical-Careers-Roadmap-in-Software-Market.pdf
Hussein Ali
 
PPTX
Comprehensive Risk Assessment Module for Smarter Risk Management
EHA Soft Solutions
 
PDF
Empower Your Tech Vision- Why Businesses Prefer to Hire Remote Developers fro...
logixshapers59
 
PPTX
From spreadsheets and delays to real-time control
SatishKumar2651
 
PDF
SAP Firmaya İade ABAB Kodları - ABAB ile yazılmıl hazır kod örneği
Salih Küçük
 
PDF
Generic or Specific? Making sensible software design decisions
Bert Jan Schrijver
 
PDF
IObit Driver Booster Pro 12.4.0.585 Crack Free Download
henryc1122g
 
PDF
Meet in the Middle: Solving the Low-Latency Challenge for Agentic AI
Alluxio, Inc.
 
PDF
MiniTool Partition Wizard Free Crack + Full Free Download 2025
bashirkhan333g
 
PPTX
Get Started with Maestro: Agent, Robot, and Human in Action – Session 5 of 5
klpathrudu
 
PPTX
AEM User Group: India Chapter Kickoff Meeting
jennaf3
 
PPTX
Agentic Automation: Build & Deploy Your First UiPath Agent
klpathrudu
 
Foundations of Marketo Engage - Powering Campaigns with Marketo Personalization
bbedford2
 
TheFutureIsDynamic-BoxLang witch Luis Majano.pdf
Ortus Solutions, Corp
 
4K Video Downloader Plus Pro Crack for MacOS New Download 2025
bashirkhan333g
 
AOMEI Partition Assistant Crack 10.8.2 + WinPE Free Downlaod New Version 2025
bashirkhan333g
 
ERP Consulting Services and Solutions by Contetra Pvt Ltd
jayjani123
 
Download Canva Pro 2025 PC Crack Full Latest Version
bashirkhan333g
 
Everything you need to know about pricing & licensing Microsoft 365 Copilot f...
Q-Advise
 
prodad heroglyph crack 2.0.214.2 Full Free Download
cracked shares
 
Technical-Careers-Roadmap-in-Software-Market.pdf
Hussein Ali
 
Comprehensive Risk Assessment Module for Smarter Risk Management
EHA Soft Solutions
 
Empower Your Tech Vision- Why Businesses Prefer to Hire Remote Developers fro...
logixshapers59
 
From spreadsheets and delays to real-time control
SatishKumar2651
 
SAP Firmaya İade ABAB Kodları - ABAB ile yazılmıl hazır kod örneği
Salih Küçük
 
Generic or Specific? Making sensible software design decisions
Bert Jan Schrijver
 
IObit Driver Booster Pro 12.4.0.585 Crack Free Download
henryc1122g
 
Meet in the Middle: Solving the Low-Latency Challenge for Agentic AI
Alluxio, Inc.
 
MiniTool Partition Wizard Free Crack + Full Free Download 2025
bashirkhan333g
 
Get Started with Maestro: Agent, Robot, and Human in Action – Session 5 of 5
klpathrudu
 
AEM User Group: India Chapter Kickoff Meeting
jennaf3
 
Agentic Automation: Build & Deploy Your First UiPath Agent
klpathrudu
 
Ad

Symfony 2 under control

Editor's Notes

  • #5: Speech includes not only slides and copy-paste from manual, but also a real practice P.S. A lot of well-known demotivators and gags are included)
  • #8: практика разработки программного обеспечения, которая заключается в выполнении частых автоматизированных сборок проекта для скорейшего выявления и решения интеграционных проблем
  • #11: envs: dev/ci/qa/staging/uat/production
  • #13: What to build? Install vendors Perform static analysis& validation Prepare assets Run tests Compress into archive
  • #14: 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 Quiz: which tool is used by audience?
  • #15: Target: Could depend on other targets, phing <taskname> Task: Custom tasks can be implemented, examples Types: Reference, FileSet, Property, FileList, Filters
  • #23: list-updates = composer update –dry-run security-checker = security.sensiolabs.org
  • #25: phpcs with custom configs for php & javascript
  • #27: Regular: Copy config for CI server, warmup cache, install assets & dump them via Assetic DB-related: drop & re-create DB, run Doctrine Migrations, load fixtures, validate DB schema. dump schema to DDL file twig:lint for Bundles and app/Resources
  • #28: Package: Add version to text file, add DDL schema schema.sql, package app, src, vendors, web to tar.gz Deployment (for specific Capifony subtasks: maintenance mode, backup DB, cleat Doctrine cache, cleanup old releases, deploy artifact)
  • #30: Jenkins CI – ex-Hudson CI CruiseControl + PHP Under Control TeamCity, Bamboo: commercial Travis CI, Scrutinizer CI: SAAS Quiz: which tool is used by audience?
  • #35: git: disable internal tagging! copyartifact: copy artifact from one job to another email-ext: sends emails on successful builds, useful for deployment jobs
  • #36: phing checkstyle phpcs, hphpa dry phpcpd jdepend php_depend plot phploc using CSV files pmd phpmd violations aggregates info from phpcs, hphpa, phpmd, phpcpd xunit phpunit htmlpublisher HTML artifacts
  • #37: build-<branchname>: Builds specific branch (master), Features are verified after merge build-package-tag: Parameterizedm Produces .tar.gz artifact from specific Git tag
  • #38: deploy-qa-<branchname>: tar.gz 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-package-tag: Deploys specific package from build-package-tag to specified environment, Ability to enable/disable maintenance mode and error message via parameters, Email after deployment
  • #39: Previous deployed version examples: <tag>.<build#> = v0.0.3.26, <branchname>-<build#>-<revision>-SNAPSHOT = master-12-7c041a90366ce9d958760094c763d809ffbc629e-SNAPSHOT
  • #42: Capistrano: from Ruby world Capifony: Based on Capistrano, Implemented in liip/symfony-rad-edition Custom: deb, rpm / VCS update / Rsync, FTP, SCP / Shell script Phar: Don’t use WebPhar, Silex does not use it anymore Zend Server package: No support for vanilla PHP, Zend Continuous Delivery Blueprint PaaS: AWS Elastic Beanstalk, PagodaBox Quiz: which tool is used by audience?
  • #43: Capistrano: from Ruby world Capifony: Based on Capistrano, Implemented in liip/symfony-rad-edition Custom: deb, rpm / VCS update / Rsync, FTP, SCP / Shell script Phar: Don’t use WebPhar, Silex does not use it anymore Zend Server package: No support for vanilla PHP, Zend Continuous Delivery Blueprint PaaS: AWS Elastic Beanstalk, PagodaBox Quiz: which tool is used by audience?
  • #44: Based on Capistrano: Supports Capistrano plugins
  • #52: Sometimes there is no access to internet due to security limitations
  • #53: Decreases deployment time: Lot of vendors, Slow internet connection
  • #54: Reproducible: You know what you deploy, You can deploy exactly the same package to multiple environments Quick fixes (git commit + git pull) not available
  • #58: pros / contras of maintenance mode 24x7 + users always have good UX (some functionality could be disabled / read only), ~99.999% uptime $$$ (implementation, testing, support & maintenance, hardware resources) complexity
  • #59: User Triggers job on Jenkins CI, Choose options (env, maintenance mode) Jenkins Executes phing target with additional CLI arguments Phing Executes several Capifony commands according to command-line arguments Capifony Performs actions on remote machines
  • #60: Maintenance mode maintenance.html in webroot Clear Doctrine cache Not for APC cache Downloads previous deploy metadata package version, Doctrine Migrations info
  • #61: Restarts services: php-fpm or Apache, Doctrine APC cache is cleared Symfony-specific tasks: copy app/config/parameters.yml, doctrine:migrations:migrate, cache:warmup
  • #62: Housekeeping: Perform cleanup for old releases
  • #64: Semi-automatical: from deployment server, usually CI server Enable Maintenance: manually via phing Manually backup for analysis: DB, current version, Doctrine Migrations status, codebase
  • #65: 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
  • #66: Write rollback guide: Step-by-step, Verify it periodically Enable monitoring on prod: Zabbix, Pinba, Munin, New Relic, Graylog2