Symfony 2 under control

  • 747 views
Uploaded on

Symfony Camp 2013 UA. …

Symfony Camp 2013 UA.
Continuous Integration and Automated Deployments for Symfony-based projects

P.S. Original PPTX presentation contains a lot of notes

More in: Software , Technology
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Be the first to comment
No Downloads

Views

Total Views
747
On Slideshare
0
From Embeds
0
Number of Embeds
6

Actions

Shares
Downloads
6
Comments
0
Likes
2

Embeds 0

No embeds

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
    No notes for slide
  • 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)
  • практика разработки программного обеспечения, которая заключается в выполнении частых автоматизированных сборок проекта для скорейшего выявления и решения интеграционных проблем
  • envs: dev/ci/qa/staging/uat/production
  • What to build?
    Install vendors
    Perform static analysis& validation
    Prepare assets
    Run tests
    Compress into archive
  • 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?
  • Target: Could depend on other targets, phing <taskname>
    Task: Custom tasks can be implemented, examples
    Types: Reference, FileSet, Property, FileList, Filters

  • list-updates = composer update –dry-run
    security-checker = security.sensiolabs.org

  • phpcs with custom configs for php & javascript
  • 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
  • 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)
  • Jenkins CI – ex-Hudson CI
    CruiseControl + PHP Under Control
    TeamCity, Bamboo: commercial
    Travis CI, Scrutinizer CI: SAAS
    Quiz: which tool is used by audience?
  • git: disable internal tagging!
    copyartifact: copy artifact from one job to another
    email-ext: sends emails on successful builds, useful for deployment jobs


  • 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
  • build-<branchname>: Builds specific branch (master), Features are verified after merge
    build-package-tag: Parameterizedm Produces .tar.gz artifact from specific Git tag
  • 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


  • Previous deployed version examples: <tag>.<build#> = v0.0.3.26, <branchname>-<build#>-<revision>-SNAPSHOT = master-12-7c041a90366ce9d958760094c763d809ffbc629e-SNAPSHOT
  • 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?
  • 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?
  • Based on Capistrano: Supports Capistrano plugins
  • Sometimes there is no access to internet due to security limitations
  • 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
    Quick fixes (git commit + git pull) not available
  • 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
  • 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
  • Maintenance mode maintenance.html in webroot
    Clear Doctrine cache Not for APC cache
    Downloads previous deploy metadata package version, Doctrine Migrations info
  • Restarts services: php-fpm or Apache, Doctrine APC cache is cleared
    Symfony-specific tasks: copy app/config/parameters.yml, doctrine:migrations:migrate, cache:warmup
  • Housekeeping: Perform cleanup for old releases
  • Semi-automatical: from deployment server, usually CI server
    Enable Maintenance: manually via phing
    Manually backup for analysis: DB, current version, Doctrine Migrations status, codebase
  • 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
  • Write rollback guide: Step-by-step, Verify it periodically
    Enable monitoring on prod: Zabbix, Pinba, Munin, New Relic, Graylog2

Transcript

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