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

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

C0ac34dd3f585ed25b2f79857e5b174d?s=47 Kaneko Tatsuya
February 28, 2015

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

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

C0ac34dd3f585ed25b2f79857e5b174d?s=128

Kaneko Tatsuya

February 28, 2015
Tweet

Transcript

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

  2. ࣗݾ঺հ • catatsuy • ͔͍ͨͭͬͯݺ͹Ε͍ͯΔ • ϐΫγϒΠϯϑϥ • ݱࡏ5ਓதͷ1ਓͰ࠷೥গ •

    2013/9ʹେֶଔۀޙʹೖࣾ • ޿ࠂαʔόʔͱ͔৭ʑ • ൃදࢿྉ͋ΔͷͰͦΕΛࢀߟʹ • ISUCON4४༏উ
  3. Vagrantͷ঺հ • HashiCorp͕։ൃ • VirtualBoxͷϥούʔʢࠓͰ͸VirtualBoxҎ֎Ͱ΋࢖͑Δʣ • Ծ૝ϚγϯͷઃఆΛVagrantfileʹRubyͷDSLͰهड़͢Δ • VagrantfileΛڞ༗͢Ε͹؆୯ʹಉ͡؀ڥΛ༻ҙͰ͖Δ •

    VirtualBoxͷίϚϯυVBox*Λ֮͑ͣʹ௚ײతͳCLIͰ࢖͑Δ • ͋Β͔͡ΊBoxΛ༻ҙ͓͚ͯ͠͹σΟετϦϏϡʔγϣϯͷΠϯετʔϧ࡞ۀͳͲෆཁ • Box͸vmdkͱ͔ΛtarͰݻΊ͚ͨͩͷϑΝΠϧ • provisionΛࢦఆ͢Δͱىಈ࣌ʹઃఆΛద༻Ͱ͖Δ • /vagrant/σΟϨΫτϦΛϗετϚγϯͷΧϨϯτσΟϨΫτϦͱڞ༗͢Δ
  4. Vagrantͷྫ $-* 7BHSBOUpMF

  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
  6. Serverspec • αʔόʔɾΠϯϑϥߏ੒Λςετ͢ΔͨΊͷgem • ςετۦಈΠϯϑϥ • RakeɾRSpecͱ૊Έ߹Θͤͯ࢖͏ • ΞϓϦέʔγϣϯͷςετΛॻ͘ײ֮Ͱύοέʔδͷ༗ແɾσΟϨΫτϦͷ༗ແɾઃఆ ϑΝΠϧͷ಺༰ͳͲαʔόʔͷ͋Δ΂͖ঢ়ଶΛهड़͢Δ

    • ࣮ࡍʹ࣮ߦ͢Δͷ͸શ෦γΣϧεΫϦϓτ • ࣮ߦ݁Ռ͔Β੒ޭɾࣦഊΛ൑அ • σΟετϦϏϡʔγϣϯຖʹ࣮ߦ͢ΔίϚϯυΛ੾Γସ͑Δ • sshઌΛςετ͢Δ৔߹͸sshઌʹRuby͸ෆཁ • ಺෦࣮૷ʹؔ͢ΔΦϥΠϦʔຊ΋ൃച
  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
  8. ΍Γ͍ͨ͜ͱ • ࣾ಺Ͱීஈ࢖͍ͬͯΔγΣϧεΫϦϓτͰॻ͔ΕͨαʔόʔͷηοτΞοϓεΫϦϓτΛ ຖ೔VagrantͰ࣮ߦͯ͠ServerspecͰςετΛͯ͠ৗʹ࣮ߦͰ͖Δ͜ͱΛอূ͍ͨ͠ • ࠓճ͸ࣾ಺ͷγΣϧεΫϦϓτʹServerspecΛ࢖ͬͯCIΛಋೖͨ࣌͠ͷ࿩Λϕʔεʹ঺հ • ࠷ॳʹಋೖͨ͠ͷ͸Ұ೥Ҏ্લ͕ͩϝϯςφϯε͸ଓ͍͍ͯΔ • Πϯϑϥ഑ଐޙͷॳ࢓ࣄ

    • Serverspec V2ʹ΋ରԠࡁΈ • ࣾ಺ͷશαʔόʔɾpixivͷશAPɾ޿ࠂ഑৴αʔόʔͰ࣮ߦ͞ΕΔηοτΞοϓεΫϦ ϓτʹؔͯ͠ͷςετΛ࡞੒ • JenkinsͰຖ೔ςετ͕࣮ߦ͞Ε͍ͯΔ
  9. γΣϧεΫϦϓτΛςετ͢Δҙຯ • γΣϧεΫϦϓτ͸શମͷ࢓༷͕෼͔Γʹ͍͘ • มߋͨ͠ͱ͖ͷӨڹൣғ͕෼͔Βͳ͍ͷͰ؆୯ʹมߋͰ͖ͳ͍ • ςετ͕͋Ε͹ϦϑΝΫλϦϯά͕ՄೳʹͳΔ • Chef/Ansible/ItamaeͳͲʹҠߦ͍ͨ͠৔߹ʹ΋ςετ͕ͳ͍ͱҠߦͰ͖ͳ͍ •

    γΣϧεΫϦϓτ͸සൟʹ࣮ߦ͠ͳ͍ͷͰ࣮ߦ͍ͨ͠ͱ͖ʹಈ͔͘෼͔Βͳ͍ • JenkinsͰຖ೔ςετΛ͢Δ͜ͱͰ࣮ߦ͞ΕΔස౓Λ্͛Δ • ܧଓతΠϯςάϨʔγϣϯʢCIʣΛαʔόʔߏஙͰ΋࣮ફͰ͖Δ • γΣϧεΫϦϓτมߋޙʹ؆୯ʹ࣮ߦͰ͖Δ҆৺ײ • Serverspec͸࣮αʔόʔʹରͯ͠΋ద༻Ͱ͖Δ
  10. Ϧʔμϒϧίʔυ ςετͷͨΊʹຊ෺ͷίʔυͷಡΈ΍͢͞Λ٘ਜ਼ʹ ͯ͠͠·͏ɻʕʕຊ෺ͷίʔυΛςετ͠΍͍͢Α ͏ʹઃܭ͢Δʹ͸ɺ྆ऀʹར఺͕ͳ͚Ε͹͍͚ͳ͍ɻ ຊ෺ͷίʔυ͸୯७Ͱૄ݁߹ͳ΋ͷʹ͢Δɻςετ ͸ಡΈॻ͖͘͢͢͠ΔɻςετΛ͠΍͘͢͢ΔͨΊ ʹɺຊ෺ͷίʔυʹΰϛΛೖΕͯ͸͍͚ͳ͍ɻ ʢ14.9 ΍Γ͗͢ʣ

  11. γΣϧεΫϦϓτΛVagrant্Ͱಈ͔͢ • Ծ૝Ϛγϯ্Ͱಈ͔͘Θ͔Βͳ͍ • sshɾωοτϫʔΫɾiptablesɾϝϞϦͳͲ • ࣾ಺͸ΦϯϓϨͰͷӡ༻લఏͰγΣϧεΫϦϓτ΋ͦΕ͔͠ߟྀ͞Ε͍ͯͳ͔ͬͨ • VagrantͷprovisionͰγΣϧεΫϦϓτΛࢦఆ •

    ςετ͍ͨ͠ηοτΞοϓεΫϦϓτͱVagrantͷΈͰ࣮ߦ͍ͨ͠௥ՃͷॲཧΛ࣮ߦ͢Δ γΣϧεΫϦϓτ • ࣮ࡍͷηοτΞοϓεΫϦϓτʹΰϛΛೖΕͳ͍ͨΊ • ͨͩ͠Ͳ͏͠Α͏΋ͳ͍΋ͷ΋͋ΔͷͰηοτΞοϓεΫϦϓτͷมߋ͸΍ΉΛಘͳ͍ • iptablesͳͲઃఆ͞ΕͨΒଈ௨৴Ͱ͖ͳ͘ͳΔ • ෼ذ෦෼͸Ծ૝؀ڥ͚ͩͰ͸ਖ਼͘͠ಈ͍͍ͯΔ͔֬ೝͰ͖ͳ͍
  12. spec_helper.rb • ServerspecͷςετΛ࢖͏ʹ͸spec_helper.rbΛ࡞Δඞཁ͕͋Δ • ؆୯ͳ΋ͷ͸serverspec-init͕ࣗಈͰੜ੒ͯ͘͠ΕΔ • spec_helper.rbʹ͸ී௨ͷRubyͷίʔυΛॻ͘ͷͰԿͰ΋ॻ͚Δ • Serverspecࣗମ͸αʔόʔͷঢ়ଶΛςετ͢Δػೳ͔͠ఏڙ͠ͳ ͍ͷͰspec_helper.rbͷ಺༰࣍ୈͰ෯޿͍؀ڥʹରԠͰ͖Δ

    • IPΞυϨε͔Βچࣾ԰ɾ৽॓ɾനՏͷ3ڌ఺ʴVagrantʹରԠ • ࣗ෼ࣗ਎΋ςετͰ͖ΔΑ͏ʹ
  13. VagrantͷBox • aptitude upgradeΛ࣮ߦͯ͠BoxΛొ࿥͠௚͚ͩ͢ͷδϣϒΛJenkinsʹొ࿥͍ͯ͠Δ • ςετ͕ෳ਺͋ΔͷͰۃྗૣ͘ςετΛऴΘΒͤΔͨΊ • ݹ͍ύοέʔδ΍੬ऑੑͷ͋Δόʔδϣϯͷύοέʔδ͸μ΢ϯϩʔυͰ͖ͳ͍ ͷͰৗʹ࠷৽ͷ΋ͷͰςετΛ͢Δඞཁ͕͋Δ •

    GRUBͷupgradeʹख࡞ۀ͕ඞཁͩͬͨͷͰ͚ͨ͜͜ͱ͕͋Δ • Ͱ͖ͨBox͸Jenkinsͷ੒Ռ෺ͱͯ͠μ΢ϯϩʔυͰ͖ΔΑ͏ʹ • ࣾ಺Ͱͷඪ४؀ڥʹ͍ۙBoxΛ୭Ͱ΋࢖͑ΔΑ͏ʹ • ݕূ؀ڥͱͯ͠࠷ద • Ұʑ࡞͍ͬͯΔͱ͔ͳΓ͕͔͔࣌ؒͬͯ͠·͏
  14. Serverspec+VagrantͰͰ͖ͳ͍͜ͱ • ಛఆͷωοτϫʔΫ಺Ͱਖ਼͍͠ઃఆ͕͞Ε͍ͯΔ͔ͷ֬ೝ • VagrantΛ࢖͏ݶք • Serverspecͷػೳͱͯ͠͸Ͱ͖ΔͷͰ࣮αʔόʔʹରͯ͠ServerspecΛ࣮ߦ͢Ε͹Ͱ͖ Δ • Πϯετʔϧͨ͠ϓϩάϥϜ͕࣮ࡍʹ࣮ߦͰ͖Δ͔ͷ֬ೝ

    • Serverspecͷࢥ૝తʹঢ়ଶ͔͠ςετ͕Ͱ͖ͳ͍ • ಛఆαʔόʔͷΈͰߦΘΕΔઃఆ͕ਖ਼͘͠͞Ε͍ͯΔ͔ͷ֬ೝ • ๭ࣾͷαʔόʔ͸Χʔωϧύϥϝʔλ͕…ͷΑ͏ͳ෦෼ͳͲ • جຊతͳ෦෼͚ͩΛςετͰ͖ΔΑ͏ʹͯ͠ࣄނ͕ىͬͨ͜ͱ͜ΖͰ࠶ൃ๷ࢭͷςετΛ ௥Ճ͢Δํ਑Ͱݱঢ়ӡ༻͞Ε͍ͯΔ
  15. ·ͱΊ • Serverspec͸αʔόʔߏஙʹςετΛಋೖͰ͖Δ • γϯϓϧͳͷͰRubyͷίʔυ࣍ୈͰ෯޿͍؀ڥʹରԠͰ͖Δ • VagrantͰVMͷ࡞੒ɾഁغΛCLIͰ؆୯ʹͰ͖Δ • γΣϧεΫϦϓτΛVagrantͰಈ͔ͤΕ͹γΣϧεΫϦϓτΛServerspecͰCIͰ ͖Δ

    • ServerspecΛ࢖͏͜ͱࣗମ͸؆୯ͰCIࣗମ΋RubyͷϓϩμΫτͷCIͷ஌ݟΛ ΄΅ͦͷ··ྲྀ༻Մೳ • طʹ͋ΔγΣϧεΫϦϓτΛVagrantͰಈ͔࣮ͯ͠ࡍʹCIͰ͖Δ؀ڥΛ੔͑Δ ͷ͕΋ͷʹΑͬͯ͸໘౗