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

一休.comにおけるデプロイフローと自動化 /ikyu-deploy-flow

D2a23b20c732b68bc68017d8fc65afe0?s=47 kentana20
April 21, 2016

一休.comにおけるデプロイフローと自動化 /ikyu-deploy-flow

サイボウズ✕一休合同勉強会での発表資料です

D2a23b20c732b68bc68017d8fc65afe0?s=128

kentana20

April 21, 2016
Tweet

Transcript

  1. Ұٳ.com ʹ͓͚Δ σϓϩΠϑϩʔͱࣗಈԽ ʙαΠϘ΢ζ✕Ұٳ ߹ಉษڧձʙ Kensuke Tanaka (@kentana20)

  2. About me • ాத ݈հ • @kentana20 • 2006೥5݄͔ΒҰٳ •

    ॓ധαʔϏε։ൃ(9೥)
 →γεςϜຊ෦(1೥)

  3. Agenda • Ұٳ.com & ࠾༻ٕज़ / Tools • σϓϩΠϑϩʔͷੲͱࠓ •

    ͦͷଞͷࣗಈԽࣄྫ • ՝୊ͱ͜Ε͔Β
  4. About Ұٳ.com ࠾༻ٕज़ / Tools

  5. About Ұٳ.com

  6. None
  7. Ұٳ.com • ओྗαʔϏε • ্࣭ͳϗςϧɾཱྀؗͷ༧໿αʔϏε • 2000೥5݄Φʔϓϯͷ15ࡀ

  8. Ұٳ.com KPI (2015.03) • ձһ਺: 400ສ+ • ϗςϧ/ཱྀؗ਺: 2,600ࢪઃ+ •

    ೥ؒൢചࣨ਺: 189ສࣨ+
  9. ͓ͱͳΓ͞·

  10. ࠾༻ٕज़ / Tools

  11. ࠾༻ٕज़ / Tools • ASP.NET WebForms/MVC (VB/C#) • IIS, SQLServer,

    Solr • Sass, Compass • GitHub Enterprise • nxlog, Fluentd, Elasticsearch, Google Big Query • Jenkins, Selenium WebDriver • NewRelic, Kibana, Bugsnag • Redmine, Trello, Slack, Hubot
  12. σϓϩΠϑϩʔͷੲͱࠓ

  13. ੲ (~2014೥) ϩʔΧϧ ؀ڥ 3FQPTJUPSZ 4VCWFSTJPO $IFDLPVU $PNNJU 5BH 4UBHJOH؀ڥ

    %FQMPZ ຊ൪؀ڥ %FQMPZ ϩʔΧϧ ؀ڥ 5FTU
  14. ੲ (~2014೥) ϩʔΧϧ ؀ڥ 3FQPTJUPSZ 4VCWFSTJPO $IFDLPVU $PNNJU 5BH 4UBHJOH؀ڥ

    %FQMPZ ຊ൪؀ڥ %FQMPZ ϩʔΧϧ ؀ڥ 5FTU
  15. ੲ (~2014೥) ϩʔΧϧ ؀ڥ 3FQPTJUPSZ 4VCWFSTJPO $IFDLPVU $PNNJU 5BH 4UBHJOH؀ڥ

    %FQMPZ ຊ൪؀ڥ %FQMPZ ϩʔΧϧ ؀ڥ 5FTU ΄΅खಈ ΤϯδχΞ͕౰൪(िସΓ)Ͱ࣮ࢪ
  16. ੲ (~2014೥) ϩʔΧϧ ؀ڥ 3FQPTJUPSZ 4VCWFSTJPO $IFDLPVU $PNNJU 5BH 4UBHJOH؀ڥ

    %FQMPZ ຊ൪؀ڥ %FQMPZ ϩʔΧϧ ؀ڥ 5FTU ΄΅खಈ ΤϯδχΞ͕౰൪(िସΓ)Ͱ࣮ࢪ
  17. ੲ (~2014೥) ϩʔΧϧ ؀ڥ 3FQPTJUPSZ 4VCWFSTJPO $IFDLPVU $PNNJU 5BH 4UBHJOH؀ڥ

    %FQMPZ ຊ൪؀ڥ %FQMPZ ϩʔΧϧ ؀ڥ 5FTU ΄΅खಈ ΤϯδχΞ͕౰൪(िସΓ)Ͱ࣮ࢪ खಈ ΤϯδχΞ͕෼୲Ͱ࣮ࢪ
  18. ੲ (~2014೥) • VCS͸Subversion • Tag࡞੒ʙStaging/Production΁ͷσϓϩΠ͸खಈ • σϓϩΠޙͷओಋઢςετ΋΋ͪΖΜखಈ

  19. ੲ (~2014೥) • VCS͸Subversion • Tag࡞੒ʙStaging/Production΁ͷσϓϩΠ͸खಈ • σϓϩΠޙͷओಋઢςετ΋΋ͪΖΜखಈ • ӡ༻ෛՙେ

    • ϦϦʔεස౓௿Լ(ि1ճ)
  20. ੲ (~2014೥) • VCS͸Subversion • Tag࡞੒ʙStaging/Production΁ͷσϓϩΠ͸खಈ • σϓϩΠޙͷओಋઢςετ΋΋ͪΖΜखಈ ࣗಈԽͩ

  21. গ͠ੲ (~2015೥9݄) • VCS͸GitHub Enterpriseʹมߋ • CI(Jenkins)ͰStaging΁ͷσϓϩΠ͸ࣗಈ • σϓϩΠޙͷओಋઢςετ΋SeleniumͰࣗಈ •

    ຊ൪΁ͷϦϦʔε͸ि2ճʹ
  22. None
  23. গ͠ੲͷσϓϩΠϑϩʔ ϓϧϦΫmerge (खಈ) 4UBHJOH ϦϦʔε༻ ϓϧϦΫ࡞੒ ίʔϧ ϦϦʔε༻ ϓϧϦΫ࡞੒ ϓϧϦΫ63-

    8FC)PPL %FQMPZ σϓϩΠ୲౰ Production %FQMPZ खಈ
  24. গ͠ੲͷϒϥϯνઓུ NBTUFS GYYY GYYY GYYY DIFDLPVU NFSHF 1VMM3FRVFTU 4UBHJOH SFMFBTF

    NFSHF 1VMM3FRVFTU Production %FQMPZ %FQMPZ
  25. গ͠ੲͷϒϥϯνઓུ NBTUFS GYYY GYYY GYYY DIFDLPVU NFSHF 1VMM3FRVFTU 4UBHJOH SFMFBTF

    NFSHF 1VMM3FRVFTU Production %FQMPZ %FQMPZ վળ͞Ε͖ͯͨ
  26. ౰࣌ͷ՝୊ • ຊ൪ϦϦʔεʹབྷΉ࡞ۀ͸खಈ͕ओ • ࢮ׆؂ࢹͷOn/Off • ϑΝΠϧಉظͷOn/Off • ϩʔυόϥϯαͰͷϊʔυ੾Γ཭͠/෮ؼ etc..

    • master΁ͷmergeʹ͋·Γҙຯ͕ͳ͔ͬͨ • StagingࢿࡐΛ࢖ͬͯຊ൪ϦϦʔε • σϓϩΠʹؔ࿈͢Δ࡞ۀ͸ઐ೚୲౰͕࣮ࢪ
  27. ౰࣌ͷ՝୊ • ຊ൪ϦϦʔεʹབྷΉ࡞ۀ͸खಈ͕ओ • ࢮ׆؂ࢹͷOn/Off • ϑΝΠϧಉظͷOn/Off • ϩʔυόϥϯαͰͷϊʔυ੾Γ཭͠/෮ؼ etc..

    • master΁ͷmergeʹ͋·Γҙຯ͕ͳ͔ͬͨ • StagingࢿࡐΛ࢖ͬͯຊ൪ϦϦʔε • σϓϩΠʹؔ࿈͢Δ࡞ۀ͸ઐ೚୲౰͕࣮ࢪ
  28. গ͠ੲͷϒϥϯνઓུ NBTUFS GYYY GYYY GYYY DIFDLPVU NFSHF 1VMM3FRVFTU 4UBHJOH SFMFBTF

    NFSHF 1VMM3FRVFTU Production %FQMPZ %FQMPZ
  29. গ͠ੲͷϒϥϯνઓུ NBTUFS GYYY GYYY GYYY DIFDLPVU NFSHF 1VMM3FRVFTU 4UBHJOH SFMFBTF

    NFSHF 1VMM3FRVFTU Production %FQMPZ %FQMPZ master΁ͷmergeͰ͸ ԿͷΠϕϯτ΋ൃੜ͠ͳ͍
  30. গ͠ੲͷϒϥϯνઓུ NBTUFS GYYY GYYY GYYY DIFDLPVU NFSHF 1VMM3FRVFTU 4UBHJOH SFMFBTF

    NFSHF 1VMM3FRVFTU Production %FQMPZ %FQMPZ release΁mergeͯ͠ॳΊͯ Staging΁ͷσϓϩΠ͕࣮ߦ
  31. গ͠ੲͷϒϥϯνઓུ NBTUFS GYYY GYYY GYYY DIFDLPVU NFSHF 1VMM3FRVFTU 4UBHJOH SFMFBTF

    NFSHF 1VMM3FRVFTU Production %FQMPZ %FQMPZ ͳΜ͔͓͔͍͠
  32. ՝୊ͷݪҼ(༧ଌ) • master mergeʹىҼͯ͠ԿͷΠϕϯτ΋ൃੜ͠ͳ͍ • master merge΁ͷۓுײ͕௿Լ • release mergeޙͷStagingͰෆ۩߹͕Ұఆׂ߹Ͱ


    ൃੜ͢Δࣄ৅͕ܧଓ
  33. ՝୊ͷݪҼ(༧ଌ) • master mergeʹىҼͯ͠ԿͷΠϕϯτ΋ൃੜ͠ͳ͍ • master merge΁ͷۓுײ͕௿Լ • release mergeޙͷStagingͰෆ۩߹͕Ұఆׂ߹Ͱ


    ൃੜ͢Δࣄ৅͕ܧଓ master mergeͰଈStaging ʹσϓϩΠͰ͖Ε͹Α͍
  34. վળޙͷϒϥϯνઓུ(ݱࡏ) NBTUFS GYYY GYYY GYYY DIFDLPVU NFSHF 1VMM3FRVFTU 4UBHJOH SFMFBTF

    NFSHF 1VMM3FRVFTU Production
  35. ౰࣌ͷ՝୊ • ຊ൪ϦϦʔεʹབྷΉ࡞ۀ͸खಈ͕ओ • ࢮ׆؂ࢹͷOn/Off • ϑΝΠϧಉظͷOn/Off • ϩʔυόϥϯαͰͷϊʔυ੾Γ཭͠/෮ؼ etc..

    • master΁ͷmergeʹ͋·Γҙຯ͕ͳ͔ͬͨ • StagingࢿࡐΛ࢖ͬͯຊ൪ϦϦʔε • σϓϩΠʹؔ࿈͢Δ࡞ۀ͸ઐ೚୲౰͕࣮ࢪ
  36. ຊ൪σϓϩΠ͸खಈ ϓϧϦΫmerge (खಈ) 4UBHJOH ϦϦʔε༻ ϓϧϦΫ࡞੒ ίʔϧ ϦϦʔε༻ ϓϧϦΫ࡞੒ ϓϧϦΫ63-

    8FC)PPL %FQMPZ σϓϩΠ୲౰ Production %FQMPZ खಈ
  37. ຊ൪σϓϩΠ 8FCαʔόάϧʔϓ" ؅ཧ݉ ࢮ׆؂ࢹαʔό ϦϦʔε࣌͸ຊ൪؀ڥͷ ؅ཧαʔόʹϦϞʔτϩάΠϯͯ͠࡞ۀ ϑΝΠϧಉظαʔό ϩʔυόϥϯα 8FCαʔόάϧʔϓ#

  38. ຊ൪σϓϩΠ 8FCαʔόάϧʔϓ" ؅ཧ݉ ࢮ׆؂ࢹαʔό ϦϦʔε࣌͸ຊ൪؀ڥͷ ؅ཧαʔόʹϦϞʔτϩάΠϯͯ͠࡞ۀ ϑΝΠϧಉظαʔό ϩʔυόϥϯα 8FCαʔόάϧʔϓ# ϑΝΠϧಉظΛఀࢭ

  39. ຊ൪σϓϩΠ 8FCαʔόάϧʔϓ" ؅ཧ݉ ࢮ׆؂ࢹαʔό ϦϦʔε࣌͸ຊ൪؀ڥͷ ؅ཧαʔόʹϦϞʔτϩάΠϯͯ͠࡞ۀ ϑΝΠϧಉظαʔό ϩʔυόϥϯα 8FCαʔόάϧʔϓ# ϑΝΠϧಉظΛఀࢭ

    WebαʔόάϧʔϓA΁ͷ ΞΫηεΛःஅ
  40. ຊ൪σϓϩΠ 8FCαʔόάϧʔϓ" ؅ཧ݉ ࢮ׆؂ࢹαʔό ϦϦʔε࣌͸ຊ൪؀ڥͷ ؅ཧαʔόʹϦϞʔτϩάΠϯͯ͠࡞ۀ ϑΝΠϧಉظαʔό ϩʔυόϥϯα 8FCαʔόάϧʔϓ# ϑΝΠϧಉظΛఀࢭ

    WebαʔόάϧʔϓA΁ͷ ΞΫηεΛःஅ ৽ࢿࡐΛσϓϩΠ
  41. ຊ൪σϓϩΠ 8FCαʔόάϧʔϓ" ؅ཧ݉ ࢮ׆؂ࢹαʔό ϦϦʔε࣌͸ຊ൪؀ڥͷ ؅ཧαʔόʹϦϞʔτϩάΠϯͯ͠࡞ۀ ϑΝΠϧಉظαʔό ϩʔυόϥϯα 8FCαʔόάϧʔϓ# ϑΝΠϧಉظΛఀࢭ

    WebαʔόάϧʔϓB΁ͷ ΞΫηεΛःஅ
  42. ຊ൪σϓϩΠ 8FCαʔόάϧʔϓ" ؅ཧ݉ ࢮ׆؂ࢹαʔό ϦϦʔε࣌͸ຊ൪؀ڥͷ ؅ཧαʔόʹϦϞʔτϩάΠϯͯ͠࡞ۀ ϑΝΠϧಉظαʔό ϩʔυόϥϯα 8FCαʔόάϧʔϓ# ϑΝΠϧಉظΛఀࢭ

    WebαʔόάϧʔϓB΁ͷ ΞΫηεΛःஅ ৽ࢿࡐΛσϓϩΠ
  43. ຊ൪σϓϩΠ 8FCαʔόάϧʔϓ" ؅ཧ݉ ࢮ׆؂ࢹαʔό ϦϦʔε࣌͸ຊ൪؀ڥͷ ؅ཧαʔόʹϦϞʔτϩάΠϯͯ͠࡞ۀ ϑΝΠϧಉظαʔό ϩʔυόϥϯα 8FCαʔόάϧʔϓ# ϑΝΠϧಉظΛఀࢭ

  44. ຊ൪σϓϩΠ 8FCαʔόάϧʔϓ" ؅ཧ݉ ࢮ׆؂ࢹαʔό ϦϦʔε࣌͸ຊ൪؀ڥͷ ؅ཧαʔόʹϦϞʔτϩάΠϯͯ͠࡞ۀ ϑΝΠϧಉظαʔό ϩʔυόϥϯα 8FCαʔόάϧʔϓ# ϑΝΠϧಉظΛఀࢭ

    ৽ࢿࡐΛσϓϩΠ
  45. ຊ൪σϓϩΠ 8FCαʔόάϧʔϓ" ؅ཧ݉ ࢮ׆؂ࢹαʔό ϦϦʔε࣌͸ຊ൪؀ڥͷ ؅ཧαʔόʹϦϞʔτϩάΠϯͯ͠࡞ۀ ϑΝΠϧಉظαʔό ϩʔυόϥϯα 8FCαʔόάϧʔϓ#

  46. ຊ൪σϓϩΠ 8FCαʔόάϧʔϓ" ؅ཧ݉ ࢮ׆؂ࢹαʔό ϦϦʔε࣌͸ຊ൪؀ڥͷ ؅ཧαʔόʹϦϞʔτϩάΠϯͯ͠࡞ۀ ϑΝΠϧಉظαʔό ϩʔυόϥϯα 8FCαʔόάϧʔϓ# ݴ͏·Ͱ΋ͳ͘

    πϥ͍
  47. ຊ൪σϓϩΠ 8FCαʔόάϧʔϓ" ؅ཧ݉ ࢮ׆؂ࢹαʔό ϦϦʔε࣌͸ຊ൪؀ڥͷ ؅ཧαʔόʹϦϞʔτϩάΠϯͯ͠࡞ۀ ϑΝΠϧಉظαʔό ϩʔυόϥϯα 8FCαʔόάϧʔϓ# ϢʔβʹՁ஋Λఏڙ͢Δ


    εϐʔυΛ্͛ΔͨΊʹ ຊ൪σϓϩΠ΋ࣗಈԽ
  48. վળޙͷσϓϩΠϑϩʔ(ݱࡏ) ϓϧϦΫmerge (खಈ) ϦϦʔε༻ ϓϧϦΫ࡞੒ ίʔϧ ϦϦʔε༻ ϓϧϦΫ࡞੒ ϓϧϦΫ63- 8FC)PPL

    %FQMPZ σϓϩΠ୲౰ Production
  49. SlackͰϦϦʔε༻ϓϧϦΫ࡞੒

  50. ϦϦʔε༻ϓϧϦΫ

  51. ݱࡏ (2015೥10݄~) • Production΁ͷσϓϩΠ΋ࣗಈʹ • master mergeޙɺStaging΁σϓϩΠ • release mergeޙɺProduction΁σϓϩΠ

    • ϦϦʔε͸݄ʙ໦ͷि4ճʹ • ϦϦʔεӡ༻͸೔ସΘΓͰ։ൃऀ͕࣮ࢪ
  52. ݱࡏ (2015೥10݄~) • Production΁ͷσϓϩΠ΋ࣗಈʹ • master mergeޙɺStaging΁σϓϩΠ • release mergeޙɺProduction΁σϓϩΠ

    • ϦϦʔε͸݄ʙ໦ͷि4ճʹ • ϦϦʔεӡ༻͸೔ସΘΓͰ։ൃऀ͕࣮ࢪ ͍ͩͿΑ͘ͳ͖ͬͯ·ͨ͠
  53. ͦͷଞͷࣗಈԽࣄྫ

  54. ։ൃ؀ڥͷࣗಈԽ

  55. None
  56. ։ൃ؀ڥͷηοτΞοϓࣗಈԽ • ϨϙδτϦͷClone • ֤छϛυϧ΢ΣΞͷΠϯετʔϧɺઃఆ • ؀ڥม਺ɺϨδετϦɺACLͷઃఆ • ॳճϏϧυˍϩʔΧϧαʔόىಈ

  57. ϒϥϯνσϓϩΠ

  58. None
  59. ։ൃ༻ϒϥϯνΛखܰʹσϓϩΠ • ίʔυϨϏϡʔʹఴ͑Δ • master mergeલʹϚʔέɺΧελϚʔαϙʔτʹ ඇಉظʹσϞ

  60. ChatOps

  61. ChatOps • ίʔυϨϏϡʔ / αϙʔτͷࣗಈΞαΠϯ • ேձ௨஌ • ఆظϛʔςΟϯά༻ΤϯτϦ࡞੒ •

    ि࣍౰൪
  62. ίʔυϨϏϡʔ / αϙʔτͷΞαΠϯ

  63. ఆظϛʔςΟϯά༻ΤϯτϦ

  64. ि࣍౰൪

  65. ৄࡉ͸BlogͰ “ChatOps” Ͱ άάΕ͹ग़͖ͯ·͢

  66. ՝୊ͱ͜Ε͔Β

  67. CIଐਓԽ໰୊

  68. CIଐਓԽ໰୊ • Jenkinsͷ໾ׂ͕ঃʑʹ૿Ճ • Staging / ProductionͷϏϧυɾσϓϩΠ • E2E •

    ϒϥϯνσϓϩΠ
  69. Jenkinsδϣϒଟա͗

  70. CIଐਓԽ໰୊ • ։ൃऀ͸ࣗ෼ͷۀ຿ʹؔ࿈͢Δδϣϒ͕೺ѲͰ͖ͳ͍ • ૊ΈࠐΜͩຊਓ͔͠δϣϒνΣʔϯͱ໾ׂ͕೺ѲͰ͖ ͣɺJenkins͓͡͞ΜԽݱ৅͕ൃੜ

  71. CIଐਓԽ໰୊ • ղফʹ޲͚ͯ • αʔϏεͷϨϙδτϦ಺ͰCIδϣϒΛίʔυ؅ཧ Ͱ͖ΔCIܥSaaS΁ͷҠߦΛܭըத

  72. ϨϙδτϦσΧ͗͢
 ໰୊

  73. ϨϙδτϦσΧ͗͢໰୊ • σβΠϯࢿࡐ΋͢΂ͯGit؅ཧ • σβΠφʔͱσϓϩΠϑϩʔΛἧ͑ΔͨΊʹ࣮ࢪ • ϨϙδτϦαΠζ͕1.5೥Ͱ4ഒʹ • clone /

    fetch / pull ͳͲͷૢ࡞ͰλΠϜΞ΢τ
 ൃੜ
  74. ϨϙδτϦσΧ͗͢໰୊ • Ұ෦ͷσβΠϯࢿࡐΛGit؅ཧ͠ͳ͍ํ਑Ͱݕ౼த • ੩తϖʔδ಺ͷը૾ϑΝΠϧ etc • σβΠφʔͷϫʔΫϑϩʔʹӨڹΛ༩͑ա͗ͳ͍ Α͏ʹܭըத

  75. ·ͱΊɾॴײ

  76. ·ͱΊɾॴײ(ࣗռ) • ࣗಈԽ͚ͩͰ͸ಓ൒͹ • ࣗಈԽʴ৘ใڞ༗ʹܗࣜ஌ • ೔ʑͷ։ൃͷ଍ճΓڧԽ͸Α͍αʔϏεΛͭ͘Δ
 ͨΊʹ͸ෆՄܽ • ࣗಈԽޙ΋՝୊͸ग़ଓ͚Δɻܧଓ͢Δ͜ͱ͕େࣄ

  77. ͝੩ௌ
 ͋Γ͕ͱ͏͍͟͝·ͨ͠