Slide 1

Slide 1 text

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

Slide 2

Slide 2 text

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

Slide 3

Slide 3 text

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

Slide 4

Slide 4 text

Vagrantͷྫ $-* 7BHSBOUpMF

Slide 5

Slide 5 text

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

Slide 6

Slide 6 text

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

Slide 7

Slide 7 text

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

Slide 8

Slide 8 text

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

Slide 9

Slide 9 text

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

Slide 10

Slide 10 text

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

Slide 11

Slide 11 text

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

Slide 12

Slide 12 text

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

Slide 13

Slide 13 text

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

Slide 14

Slide 14 text

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

Slide 15

Slide 15 text

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