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

シェルスクリプトをServerspecとVagrantで継続的インテグレーションする

Kaneko Tatsuya
February 28, 2015

 シェルスクリプトをServerspecとVagrantで継続的インテグレーションする

シェルスクリプトをServerspecとVagrantで継続的インテグレーションする
@ Glory Web Infra
http://peatix.com/event/71002

Kaneko Tatsuya

February 28, 2015
Tweet

More Decks by Kaneko Tatsuya

Other Decks in Technology

Transcript

  1. γΣϧεΫϦϓτΛ
    ServerspecͱVagrantͰ
    ܧଓతΠϯςάϨʔγϣϯ͢Δ
    @ Glory Web Infra
    ϐΫγϒΠϯϑϥDBUBUTVZ

    View full-size slide

  2. ࣗݾ঺հ
    • catatsuy
    • ͔͍ͨͭͬͯݺ͹Ε͍ͯΔ
    • ϐΫγϒΠϯϑϥ
    • ݱࡏ5ਓதͷ1ਓͰ࠷೥গ
    • 2013/9ʹେֶଔۀޙʹೖࣾ
    • ޿ࠂαʔόʔͱ͔৭ʑ
    • ൃදࢿྉ͋ΔͷͰͦΕΛࢀߟʹ
    • ISUCON4४༏উ

    View full-size slide

  3. Vagrantͷ঺հ
    • HashiCorp͕։ൃ
    • VirtualBoxͷϥούʔʢࠓͰ͸VirtualBoxҎ֎Ͱ΋࢖͑Δʣ
    • Ծ૝ϚγϯͷઃఆΛVagrantfileʹRubyͷDSLͰهड़͢Δ
    • VagrantfileΛڞ༗͢Ε͹؆୯ʹಉ͡؀ڥΛ༻ҙͰ͖Δ
    • VirtualBoxͷίϚϯυVBox*Λ֮͑ͣʹ௚ײతͳCLIͰ࢖͑Δ
    • ͋Β͔͡ΊBoxΛ༻ҙ͓͚ͯ͠͹σΟετϦϏϡʔγϣϯͷΠϯετʔϧ࡞ۀͳͲෆཁ
    • Box͸vmdkͱ͔ΛtarͰݻΊ͚ͨͩͷϑΝΠϧ
    • provisionΛࢦఆ͢Δͱىಈ࣌ʹઃఆΛద༻Ͱ͖Δ
    • /vagrant/σΟϨΫτϦΛϗετϚγϯͷΧϨϯτσΟϨΫτϦͱڞ༗͢Δ

    View full-size slide

  4. Vagrantͷྫ
    $-* 7BHSBOUpMF

    View full-size slide

  5. VagrantͷBox
    • VagrantͷBox͸ίϛϡχςΟϕʔεͷ΋ͷΛ࢖͏ͷ͕ҰൠతΈ͍ͨ
    • ͔͠͠ίϛϡχςΟϕʔεͷ΋ͷ͸Կ͕ೖ͍ͬͯΔͷ͔෼͔Βͳ͍
    • aptͷϛϥʔ͕೔ຊͷ΋ͷͰͳ͍͜ͱ͕ଟ͍
    • ChefͷӨڹͰRuby͕Ṗͷํ๏ͰΠϯετʔϧ͞Ε͍ͯΔ͜ͱ͕ଟ͍
    • Box͸ग़དྷΔݶΓ࠷খߏ੒Ͱ௥Ճͷઃఆ͸provisionͰߦ͏ͷ͕๬·͍͠
    • গʑ໘౗͕ͩVagrantͷBox͸ࣗ෼Ͱ࡞Δํ͕Α͍
    • vagrantϢʔβʔ͕ύεແ͠ͰsudoΛ࢖͑Δɾsshd_configʹUseDNS noΛ௥Ճɾ伴ొ
    ࿥ɾVirtualBox guest additionsΠϯετʔϧ
    • github:catatsuy/vagrant_debian

    View full-size slide

  6. Serverspec
    • αʔόʔɾΠϯϑϥߏ੒Λςετ͢ΔͨΊͷgem
    • ςετۦಈΠϯϑϥ
    • RakeɾRSpecͱ૊Έ߹Θͤͯ࢖͏
    • ΞϓϦέʔγϣϯͷςετΛॻ͘ײ֮Ͱύοέʔδͷ༗ແɾσΟϨΫτϦͷ༗ແɾઃఆ
    ϑΝΠϧͷ಺༰ͳͲαʔόʔͷ͋Δ΂͖ঢ়ଶΛهड़͢Δ
    • ࣮ࡍʹ࣮ߦ͢Δͷ͸શ෦γΣϧεΫϦϓτ
    • ࣮ߦ݁Ռ͔Β੒ޭɾࣦഊΛ൑அ
    • σΟετϦϏϡʔγϣϯຖʹ࣮ߦ͢ΔίϚϯυΛ੾Γସ͑Δ
    • sshઌΛςετ͢Δ৔߹͸sshઌʹRuby͸ෆཁ
    • ಺෦࣮૷ʹؔ͢ΔΦϥΠϦʔຊ΋ൃച

    View full-size slide

  7. ServerspecίʔυྫʢDebianʣ
    • dpkg -s ntp && ! dpkg -s ntp | grep -E '^Status: .+ not-installed$’
    • ls /etc/rc3.d/ | grep -- nntp || grep 'start on' /etc/init/ntp.conf
    • ps aux | grep -w -- ntp | grep -qv grep

    View full-size slide

  8. ΍Γ͍ͨ͜ͱ
    • ࣾ಺Ͱීஈ࢖͍ͬͯΔγΣϧεΫϦϓτͰॻ͔ΕͨαʔόʔͷηοτΞοϓεΫϦϓτΛ
    ຖ೔VagrantͰ࣮ߦͯ͠ServerspecͰςετΛͯ͠ৗʹ࣮ߦͰ͖Δ͜ͱΛอূ͍ͨ͠
    • ࠓճ͸ࣾ಺ͷγΣϧεΫϦϓτʹServerspecΛ࢖ͬͯCIΛಋೖͨ࣌͠ͷ࿩Λϕʔεʹ঺հ
    • ࠷ॳʹಋೖͨ͠ͷ͸Ұ೥Ҏ্લ͕ͩϝϯςφϯε͸ଓ͍͍ͯΔ
    • Πϯϑϥ഑ଐޙͷॳ࢓ࣄ
    • Serverspec V2ʹ΋ରԠࡁΈ
    • ࣾ಺ͷશαʔόʔɾpixivͷશAPɾ޿ࠂ഑৴αʔόʔͰ࣮ߦ͞ΕΔηοτΞοϓεΫϦ
    ϓτʹؔͯ͠ͷςετΛ࡞੒
    • JenkinsͰຖ೔ςετ͕࣮ߦ͞Ε͍ͯΔ

    View full-size slide

  9. γΣϧεΫϦϓτΛςετ͢Δҙຯ
    • γΣϧεΫϦϓτ͸શମͷ࢓༷͕෼͔Γʹ͍͘
    • มߋͨ͠ͱ͖ͷӨڹൣғ͕෼͔Βͳ͍ͷͰ؆୯ʹมߋͰ͖ͳ͍
    • ςετ͕͋Ε͹ϦϑΝΫλϦϯά͕ՄೳʹͳΔ
    • Chef/Ansible/ItamaeͳͲʹҠߦ͍ͨ͠৔߹ʹ΋ςετ͕ͳ͍ͱҠߦͰ͖ͳ͍
    • γΣϧεΫϦϓτ͸සൟʹ࣮ߦ͠ͳ͍ͷͰ࣮ߦ͍ͨ͠ͱ͖ʹಈ͔͘෼͔Βͳ͍
    • JenkinsͰຖ೔ςετΛ͢Δ͜ͱͰ࣮ߦ͞ΕΔස౓Λ্͛Δ
    • ܧଓతΠϯςάϨʔγϣϯʢCIʣΛαʔόʔߏஙͰ΋࣮ફͰ͖Δ
    • γΣϧεΫϦϓτมߋޙʹ؆୯ʹ࣮ߦͰ͖Δ҆৺ײ
    • Serverspec͸࣮αʔόʔʹରͯ͠΋ద༻Ͱ͖Δ

    View full-size slide

  10. Ϧʔμϒϧίʔυ
    ςετͷͨΊʹຊ෺ͷίʔυͷಡΈ΍͢͞Λ٘ਜ਼ʹ
    ͯ͠͠·͏ɻʕʕຊ෺ͷίʔυΛςετ͠΍͍͢Α
    ͏ʹઃܭ͢Δʹ͸ɺ྆ऀʹར఺͕ͳ͚Ε͹͍͚ͳ͍ɻ
    ຊ෺ͷίʔυ͸୯७Ͱૄ݁߹ͳ΋ͷʹ͢Δɻςετ
    ͸ಡΈॻ͖͘͢͢͠ΔɻςετΛ͠΍͘͢͢ΔͨΊ
    ʹɺຊ෺ͷίʔυʹΰϛΛೖΕͯ͸͍͚ͳ͍ɻ
    ʢ14.9 ΍Γ͗͢ʣ

    View full-size slide

  11. γΣϧεΫϦϓτΛVagrant্Ͱಈ͔͢
    • Ծ૝Ϛγϯ্Ͱಈ͔͘Θ͔Βͳ͍
    • sshɾωοτϫʔΫɾiptablesɾϝϞϦͳͲ
    • ࣾ಺͸ΦϯϓϨͰͷӡ༻લఏͰγΣϧεΫϦϓτ΋ͦΕ͔͠ߟྀ͞Ε͍ͯͳ͔ͬͨ
    • VagrantͷprovisionͰγΣϧεΫϦϓτΛࢦఆ
    • ςετ͍ͨ͠ηοτΞοϓεΫϦϓτͱVagrantͷΈͰ࣮ߦ͍ͨ͠௥ՃͷॲཧΛ࣮ߦ͢Δ
    γΣϧεΫϦϓτ
    • ࣮ࡍͷηοτΞοϓεΫϦϓτʹΰϛΛೖΕͳ͍ͨΊ
    • ͨͩ͠Ͳ͏͠Α͏΋ͳ͍΋ͷ΋͋ΔͷͰηοτΞοϓεΫϦϓτͷมߋ͸΍ΉΛಘͳ͍
    • iptablesͳͲઃఆ͞ΕͨΒଈ௨৴Ͱ͖ͳ͘ͳΔ
    • ෼ذ෦෼͸Ծ૝؀ڥ͚ͩͰ͸ਖ਼͘͠ಈ͍͍ͯΔ͔֬ೝͰ͖ͳ͍

    View full-size slide

  12. spec_helper.rb
    • ServerspecͷςετΛ࢖͏ʹ͸spec_helper.rbΛ࡞Δඞཁ͕͋Δ
    • ؆୯ͳ΋ͷ͸serverspec-init͕ࣗಈͰੜ੒ͯ͘͠ΕΔ
    • spec_helper.rbʹ͸ී௨ͷRubyͷίʔυΛॻ͘ͷͰԿͰ΋ॻ͚Δ
    • Serverspecࣗମ͸αʔόʔͷঢ়ଶΛςετ͢Δػೳ͔͠ఏڙ͠ͳ
    ͍ͷͰspec_helper.rbͷ಺༰࣍ୈͰ෯޿͍؀ڥʹରԠͰ͖Δ
    • IPΞυϨε͔Βچࣾ԰ɾ৽॓ɾനՏͷ3ڌ఺ʴVagrantʹରԠ
    • ࣗ෼ࣗ਎΋ςετͰ͖ΔΑ͏ʹ

    View full-size slide

  13. VagrantͷBox
    • aptitude upgradeΛ࣮ߦͯ͠BoxΛొ࿥͠௚͚ͩ͢ͷδϣϒΛJenkinsʹొ࿥͍ͯ͠Δ
    • ςετ͕ෳ਺͋ΔͷͰۃྗૣ͘ςετΛऴΘΒͤΔͨΊ
    • ݹ͍ύοέʔδ΍੬ऑੑͷ͋Δόʔδϣϯͷύοέʔδ͸μ΢ϯϩʔυͰ͖ͳ͍
    ͷͰৗʹ࠷৽ͷ΋ͷͰςετΛ͢Δඞཁ͕͋Δ
    • GRUBͷupgradeʹख࡞ۀ͕ඞཁͩͬͨͷͰ͚ͨ͜͜ͱ͕͋Δ
    • Ͱ͖ͨBox͸Jenkinsͷ੒Ռ෺ͱͯ͠μ΢ϯϩʔυͰ͖ΔΑ͏ʹ
    • ࣾ಺Ͱͷඪ४؀ڥʹ͍ۙBoxΛ୭Ͱ΋࢖͑ΔΑ͏ʹ
    • ݕূ؀ڥͱͯ͠࠷ద
    • Ұʑ࡞͍ͬͯΔͱ͔ͳΓ͕͔͔࣌ؒͬͯ͠·͏

    View full-size slide

  14. Serverspec+VagrantͰͰ͖ͳ͍͜ͱ
    • ಛఆͷωοτϫʔΫ಺Ͱਖ਼͍͠ઃఆ͕͞Ε͍ͯΔ͔ͷ֬ೝ
    • VagrantΛ࢖͏ݶք
    • Serverspecͷػೳͱͯ͠͸Ͱ͖ΔͷͰ࣮αʔόʔʹରͯ͠ServerspecΛ࣮ߦ͢Ε͹Ͱ͖
    Δ
    • Πϯετʔϧͨ͠ϓϩάϥϜ͕࣮ࡍʹ࣮ߦͰ͖Δ͔ͷ֬ೝ
    • Serverspecͷࢥ૝తʹঢ়ଶ͔͠ςετ͕Ͱ͖ͳ͍
    • ಛఆαʔόʔͷΈͰߦΘΕΔઃఆ͕ਖ਼͘͠͞Ε͍ͯΔ͔ͷ֬ೝ
    • ๭ࣾͷαʔόʔ͸Χʔωϧύϥϝʔλ͕…ͷΑ͏ͳ෦෼ͳͲ
    • جຊతͳ෦෼͚ͩΛςετͰ͖ΔΑ͏ʹͯ͠ࣄނ͕ىͬͨ͜ͱ͜ΖͰ࠶ൃ๷ࢭͷςετΛ
    ௥Ճ͢Δํ਑Ͱݱঢ়ӡ༻͞Ε͍ͯΔ

    View full-size slide

  15. ·ͱΊ
    • Serverspec͸αʔόʔߏஙʹςετΛಋೖͰ͖Δ
    • γϯϓϧͳͷͰRubyͷίʔυ࣍ୈͰ෯޿͍؀ڥʹରԠͰ͖Δ
    • VagrantͰVMͷ࡞੒ɾഁغΛCLIͰ؆୯ʹͰ͖Δ
    • γΣϧεΫϦϓτΛVagrantͰಈ͔ͤΕ͹γΣϧεΫϦϓτΛServerspecͰCIͰ
    ͖Δ
    • ServerspecΛ࢖͏͜ͱࣗମ͸؆୯ͰCIࣗମ΋RubyͷϓϩμΫτͷCIͷ஌ݟΛ
    ΄΅ͦͷ··ྲྀ༻Մೳ
    • طʹ͋ΔγΣϧεΫϦϓτΛVagrantͰಈ͔࣮ͯ͠ࡍʹCIͰ͖Δ؀ڥΛ੔͑Δ
    ͷ͕΋ͷʹΑͬͯ͸໘౗

    View full-size slide