Upgrade to Pro — share decks privately, control downloads, hide ads and more …

CakePHPで学ぶ継続的インテグレーション ハンズオン@大阪 開発編

Kaz Watanabe
November 01, 2014

CakePHPで学ぶ継続的インテグレーション ハンズオン@大阪 開発編

Kaz Watanabe

November 01, 2014
Tweet

More Decks by Kaz Watanabe

Other Decks in Programming

Transcript

  1. $",&1)1ͰֶͿ
    ܧଓతΠϯςάϨʔγϣϯϋϯζΦϯ
    ։ൃฤ
    @DevLoveؔ੢

    2014/11/1

    View Slide

  2. WHO?
    • Θͨͳ΂͔ͣͻΖ(@kaz_29)

    • ߹ಉձࣾ decr (decr.jp)

    • PHP(CakePHP)ͰWebΞϓϦ։ൃ

    • Πϯϑϥߏஙɾӡ༻

    • iOSΞϓϦ։ൃ
    #beer #iosdev #cakephp #cat #camp!
    #golf #chef #vagrant

    View Slide

  3. WHO?

    View Slide

  4. ಈ࡞؀ڥ

    View Slide

  5. BeHat
    • ϏϔΠϏΞ(ৼ෣)ۦಈ։ൃ
    (BDD:Behaviour Driven Development)

    • ετʔϦʔϕʔεͷςεςΟϯάϑϨʔϜϫʔΫ

    View Slide

  6. BeHat
    'FBUVSFͷهड़ྫ

    View Slide

  7. BeHat
    'FBUVSFͷ࣮ߦྫ

    View Slide

  8. BeHat
    #%%։ൃϓϩηε

    View Slide

  9. ࠷ॳͷεϓϦϯτ͕

    ऴΘΔॴἬϫʔϓ͠·͢

    View Slide

  10. ࠷ॳͷεϓϦϯτ͕

    ׬ྃͨ͠ঢ়ଶΛ࡞੒
    !
    host $ vagrant ssh develop

    $ cd /var/www/application/current/app

    $ git checkout master

    $ composer install --dev

    View Slide

  11. DATABASEΛMigration

    View Slide

  12. DATABASEΛMigration
    !
    $ cd /var/www/application/current/app

    $ Console/cake Migrations.migration run all

    View Slide

  13. View Slide

  14. UnitTest
    $ cd /var/www/application/current/app

    $ Console/cake Test app AllTests

    View Slide

  15. View Slide

  16. StoryTest
    $ cd /var/www/application/current/app

    $ Console/cake Bdd.story

    View Slide

  17. View Slide

  18. Jenkinsʹ૊ࠐΜͰ͍͖·͢ʂ

    View Slide

  19. ͦͷલʹ…
    $ git update-index --add --chmod=+x Console/cake

    $ git add -u

    $ git commit -m “cakeίϚϯυʹ࣮ߦݖΛ෇༩”

    $ git push origin master

    View Slide

  20. BUILDπʔϧΛಋೖ
    !
    — phingΛಋೖ

    $ cd /var/www/application/current/app

    $ composer require --dev "phing/phing:~2.8"

    View Slide

  21. PHINGͷઆ໌

    View Slide

  22. BUILDπʔϧΛಋೖ
    !
    — मਖ਼Λίϛοτ

    $ git add composer.json composer.lock

    $ git commit -m 'PhingΛ௥Ճ'

    !

    View Slide

  23. BUILDͷઃఆ







    !


    !








    !









    /var/www/application/current/build.xml

    View Slide

  24. BUILDπʔϧΛಋೖ
    !
    — ϏϧυΛ࣮ߦ

    $ cd /var/www/application/current

    $ app/Vendor/bin/phing

    !

    View Slide

  25. BUILDπʔϧΛಋೖ
    !
    — मਖ਼Λίϛοτ

    $ git add build.xml

    $ git commit -m ‘ϏϧυϑΝΠϧΛ௥Ճ'

    $ git push origin master

    !

    View Slide

  26. BUILDπʔϧΛಋೖ

    View Slide

  27. BUILDπʔϧΛಋೖ

    View Slide

  28. BUILDπʔϧΛಋೖ
    cd ${WORKSPACE}/app
    composer install --dev
    cd ${WORKSPACE}
    app/Vendor/bin/phing -logger phing.listener.DefaultLogger

    View Slide

  29. ϏϧυΛ࣮ߦʂ

    View Slide

  30. UnitTest݁ՌΛදࣔ͢Δ
    !
    — build.xmlΛमਖ਼

    output="${logdir}/caketest.log" checkreturn="true">










    View Slide

  31. UnitTest݁ՌΛදࣔ͢Δ
    !
    — मਖ਼Λίϛοτ

    $ git add build.xml

    $ git commit -m 'Ϣχοτςετͷ݁ՌΛϑΝΠϧ
    ʹग़ྗ'

    $ git push origin master

    View Slide

  32. UnitTest݁ՌΛදࣔ͢Δ

    View Slide

  33. UnitTest݁ՌΛදࣔ͢Δ
    app/reports/unittest.xml

    View Slide

  34. UnitTest݁ՌΛදࣔ͢Δ

    View Slide

  35. UnitTest݁ՌΛදࣔ͢Δ
    app/reports/
    app/reports/coverage.xml
    मਖ਼ͨ͠Βอଘͯ͠Ϗϧυ࣮ߦ
    νΣοΫ͢Δ

    View Slide

  36. UnitTest݁ՌΛදࣔ͢Δ

    View Slide

  37. UnitTest݁ՌΛදࣔ͢Δ
    ConfigσΟϨΫτϦͷΧόϨοδ͕௿͍ʂ

    View Slide

  38. UnitTest݁ՌΛදࣔ͢Δ
    !
    — app/phpunit.xmlΛमਖ਼(ΧόϨοδͷআ֎ઃఆΛ௥Ճ)



    Plugin
    Test
    Vendor

    Config/bootstrap
    Config/database.php
    <-- ͜͜·Ͱ௥Ճ -->



    View Slide

  39. UnitTest݁ՌΛදࣔ͢Δ
    !
    — मਖ਼Λίϛοτ

    $ git add app/phpunit.xml

    $ git commit -m 'ΧόϨοδআ֎ର৅Λ௥Ճ'

    $ git push origin master

    View Slide

  40. UnitTest݁ՌΛදࣔ͢Δ
    ΧΠθϯͨ͠ʂ

    View Slide

  41. Behatͷ݁ՌΛදࣔ͢Δ
    — build.xmlΛमਖ਼






    output="${logdir}/behat.log" checkreturn="true">






    View Slide

  42. Behatͷ݁ՌΛදࣔ͢Δ
    !
    — मਖ਼Λίϛοτ

    $ git add build.xml

    $ git commit -m 'BehatςετΛ௥Ճ'

    $ git push origin master

    View Slide

  43. Behatͷ݁ՌΛදࣔ͢Δ
    app/reports/*.xml ʹमਖ਼
    मਖ਼ͨ͠Βอଘͯ͠Ϗϧυ࣮ߦ

    View Slide

  44. Behatͷ݁ՌΛදࣔ͢Δ

    View Slide

  45. ੩తղੳΛ࣮ߦ͢Δ
    $ cd /var/www/application/current/app
    $ composer require --dev "cakephp/cakephp-codesniffer:0.1.*"
    $ composer require --dev "phpmd/phpmd:2.*"
    $ composer require --dev "sebastian/phpcpd:2.*"

    View Slide

  46. ੩తղੳΛ࣮ߦ͢Δ
    !
    — मਖ਼Λίϛοτ

    $ git add composer.json composer.lock

    $ git commit -m 'ΠϯεϖΫγϣϯπʔϧͷ௥Ճ'

    $ git push origin master

    View Slide

  47. ੩తղੳΛ࣮ߦ͢Δ
    — build.xmlΛमਖ਼(1)







    !

    depends="prepare,caketest,behat,phpcs,phpmd,phpcpd"/>

    View Slide

  48. ੩తղੳΛ࣮ߦ͢Δ
    — build.xmlΛमਖ਼(2) - PHPCodeSnifferͷઃఆΛ௥Ճ
















    View Slide

  49. ੩తղੳΛ࣮ߦ͢Δ
    — build.xmlΛमਖ਼(3) - PHPMDͷઃఆΛ௥Ճ


    output="${logdir}/phpmd.log">







    View Slide

  50. ੩తղੳΛ࣮ߦ͢Δ
    — build.xmlΛमਖ਼(4) - PHPCPDͷઃఆΛ௥Ճ


    output="${logdir}/phpcpd.log">








    View Slide

  51. ੩తղੳΛ࣮ߦ͢Δ
    !
    — मਖ਼Λίϛοτ

    $ git add build.xml

    $ git commit -m 'ΠϯεϖΫγϣϯͷ࣮ߦΛ௥Ճ'

    $ git push origin master

    View Slide

  52. ੩తղੳΛ࣮ߦ͢Δ
    app/reports/checkstyle.xml
    app/reports/phpmd.xml
    app/reports/phpcpd.xml
    मਖ਼ͨ͠Βอଘͯ͠Ϗϧυ࣮ߦ

    View Slide

  53. ੩తղੳΛ࣮ߦ͢Δ
    MigrationͱSchemaʹܯࠂ

    View Slide

  54. ੩తղੳΛ࣮ߦ͢Δ
    — build.xmlΛमਖ਼(5) - PHPMDͷআ֎σΟϨΫτϦ௥Ճ


    output="${logdir}/phpmd.log">









    View Slide

  55. ੩తղੳΛ࣮ߦ͢Δ
    !
    — मਖ਼Λίϛοτ

    $ git add build.xml

    $ git commit -m 'PMDͷআ֎σΟϨΫτϦΛ௥Ճ'

    $ git push origin master

    View Slide

  56. ੩తղੳΛ࣮ߦ͢Δ
    ΧΠθϯͨ͠ʂ

    View Slide

  57. υΩϡϝϯτΛੜ੒͢Δ
    — build.xmlΛमਖ਼(1)

    depends=“prepare,caketest,behat,phpcs,phpmd,phpcpd,phpdoc"/>



    checkreturn="true">








    View Slide

  58. υΩϡϝϯτΛੜ੒͢Δ
    !
    $ git add build.xml

    $ git commit -m 'υΩϡϝϯτੜ੒ͷ࣮ߦΛ௥Ճ'

    $ git push origin master

    View Slide

  59. υΩϡϝϯτΛੜ੒͢Δ

    View Slide

  60. υΩϡϝϯτΛੜ੒͢Δ
    ௥ՃΛԡͯ͠ҎԼͷΑ͏ʹઃఆ
    app/reports/doc/
    index.html API Documen

    View Slide

  61. υΩϡϝϯτΛੜ੒͢Δ

    View Slide

  62. υΩϡϝϯτΛੜ੒͢Δ
    app/Model/Post.phpʹҎԼͷ༷ʹίϝϯτΛ௥Ճ

    App::uses('AppModel', 'Model');

    !
    /**

    * Post Model

    *

    * ϒϩάهࣄ༻ϞσϧͰ͢

    *

    * @copyright php_ci_book

    * @link https://github.com/phpcibook/blogapp/blob/master/app/Model/Post.php

    * @since 1.0

    * @auther ࡞੒ऀͷ໊લ

    *

    */

    class Post extends AppModel {


    View Slide

  63. υΩϡϝϯτΛੜ੒͢Δ
    app/Model/Post.phpʹҎԼͷ༷ʹίϝϯτΛ௥Ճ
    class Post extends AppModel {

    !
    /**

    * Ұཡදࣔ࣌ͷλΠτϧʹ࢖༻͢ΔΧϥϜ໊

    *

    * @var string

    */

    public $displayField = 'title';

    !
    /**

    * όϦσʔγϣϯϧʔϧ

    *

    * @var array

    */

    public $validate = [

    View Slide

  64. υΩϡϝϯτΛੜ੒͢Δ
    !
    $ git add app/Model/Post.php

    $ git commit -m 'DocBlockίϝϯτΛ௥Ճ'

    $ git push origin master

    मਖ਼ͨ͠Βอଘͯ͠Ϗϧυ࣮ߦ

    View Slide

  65. υΩϡϝϯτΛੜ੒͢Δ

    View Slide

  66. ຊ൪؀ڥʹDEPLOY͢Δ

    View Slide

  67. ຊ൪؀ڥʹDEPLOY͢Δ
    $ vagrant ssh deploy

    $ ssh-keygen

    อଘ৔ॴ,ύεϑϨʔζೖྗ(ۭͰվߦͰ)

    $ cat ~/.ssh/id_rsa.pub

    !
    ެ։伴Λίϐʔ

    View Slide

  68. ຊ൪؀ڥʹDEPLOY͢Δ
    Add deploy keyΛΫϦοΫͯ͠ެ։伴Λ௥Ճ

    View Slide

  69. ຊ൪؀ڥʹDEPLOY͢Δ
    $ cd /var/www/application/current

    $ mkdir deploy

    $ cd deploy

    $ cap install

    !
    — .gitignoreʹҎԼΛ௥Ճ

    deploy/config/deploy/production.php

    CapistranoͷDeployεΫϦϓτͷͻͳܗΛ࡞੒

    View Slide

  70. ຊ൪؀ڥʹDEPLOY͢Δ
    deploy/config/deploy/production.php

    !

    !
    Environment::configure('production', true, [

    'MYSQL_DB_HOST' => 'localhost',

    'MYSQL_USERNAME' => 'webapp',

    'MYSQL_PASSWORD' => 'passw0rd',

    'MYSQL_DB_NAME' => 'blog',

    'MYSQL_PREFIX' => '',

    'debug' => 0,

    ], function() {

    });

    ຊ൪αʔόʔ༻ͷઃఆϑΝΠϧΛ௥Ճ

    View Slide

  71. ຊ൪؀ڥʹDEPLOY͢Δ
    $ cd /var/www/application/current/deploy/config/deploy

    $ vim production.rb

    !
    server '192.168.33.200',
    roles: %w{web app db},
    user: 'vagrant',
    ssh_options: {
    password: fetch(:password)
    },
    cake_env: "production",
    app_config:'production.php',
    group: 'vagrant'
    Deployઌͷઃఆ

    View Slide

  72. ຊ൪؀ڥʹDEPLOY͢Δ
    $ cd /var/www/application/current/deploy/

    $ vim reploy.rb

    !
    — 5ߦ໨ͷϦϙδτϦURLΛ֤ࣗमਖ਼

    set :repo_url, '[email protected]:phpcibook/blogapp.git' # (2)

    DeployεΫϦϓτΛमਖ਼
    ϑΝΠϧͷৄࡉ͸ stypi_ deploy.rbࢀর

    View Slide

  73. ຊ൪؀ڥʹDEPLOY͢Δ
    $ cd /var/www/application/current/deploy/

    $ cap production deploy

    Please enter Server password: (): vagrant

    View Slide

  74. ຊ൪؀ڥʹDEPLOY͢Δ
    $ cd /var/www/application/current/deploy/

    $ cap production deploy

    Please enter Server password: (): vagrant

    View Slide

  75. ։ൃฤ

    Fin
    @kaz_29

    View Slide