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

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

    VirtualBoxͷίϚϯυVBox*Λ֮͑ͣʹ௚ײతͳCLIͰ࢖͑Δ • ͋Β͔͡ΊBoxΛ༻ҙ͓͚ͯ͠͹σΟετϦϏϡʔγϣϯͷΠϯετʔϧ࡞ۀͳͲෆཁ • Box͸vmdkͱ͔ΛtarͰݻΊ͚ͨͩͷϑΝΠϧ • provisionΛࢦఆ͢Δͱىಈ࣌ʹઃఆΛద༻Ͱ͖Δ • /vagrant/σΟϨΫτϦΛϗετϚγϯͷΧϨϯτσΟϨΫτϦͱڞ༗͢Δ
  3. VagrantͷBox • VagrantͷBox͸ίϛϡχςΟϕʔεͷ΋ͷΛ࢖͏ͷ͕ҰൠతΈ͍ͨ • ͔͠͠ίϛϡχςΟϕʔεͷ΋ͷ͸Կ͕ೖ͍ͬͯΔͷ͔෼͔Βͳ͍ • aptͷϛϥʔ͕೔ຊͷ΋ͷͰͳ͍͜ͱ͕ଟ͍ • ChefͷӨڹͰRuby͕Ṗͷํ๏ͰΠϯετʔϧ͞Ε͍ͯΔ͜ͱ͕ଟ͍ •

    Box͸ग़དྷΔݶΓ࠷খߏ੒Ͱ௥Ճͷઃఆ͸provisionͰߦ͏ͷ͕๬·͍͠ • গʑ໘౗͕ͩVagrantͷBox͸ࣗ෼Ͱ࡞Δํ͕Α͍ • vagrantϢʔβʔ͕ύεແ͠ͰsudoΛ࢖͑Δɾsshd_configʹUseDNS noΛ௥Ճɾ伴ొ ࿥ɾVirtualBox guest additionsΠϯετʔϧ • github:catatsuy/vagrant_debian
  4. Serverspec • αʔόʔɾΠϯϑϥߏ੒Λςετ͢ΔͨΊͷgem • ςετۦಈΠϯϑϥ • RakeɾRSpecͱ૊Έ߹Θͤͯ࢖͏ • ΞϓϦέʔγϣϯͷςετΛॻ͘ײ֮Ͱύοέʔδͷ༗ແɾσΟϨΫτϦͷ༗ແɾઃఆ ϑΝΠϧͷ಺༰ͳͲαʔόʔͷ͋Δ΂͖ঢ়ଶΛهड़͢Δ

    • ࣮ࡍʹ࣮ߦ͢Δͷ͸શ෦γΣϧεΫϦϓτ • ࣮ߦ݁Ռ͔Β੒ޭɾࣦഊΛ൑அ • σΟετϦϏϡʔγϣϯຖʹ࣮ߦ͢ΔίϚϯυΛ੾Γସ͑Δ • sshઌΛςετ͢Δ৔߹͸sshઌʹRuby͸ෆཁ • ಺෦࣮૷ʹؔ͢ΔΦϥΠϦʔຊ΋ൃച
  5. 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
  6. γΣϧεΫϦϓτΛςετ͢Δҙຯ • γΣϧεΫϦϓτ͸શମͷ࢓༷͕෼͔Γʹ͍͘ • มߋͨ͠ͱ͖ͷӨڹൣғ͕෼͔Βͳ͍ͷͰ؆୯ʹมߋͰ͖ͳ͍ • ςετ͕͋Ε͹ϦϑΝΫλϦϯά͕ՄೳʹͳΔ • Chef/Ansible/ItamaeͳͲʹҠߦ͍ͨ͠৔߹ʹ΋ςετ͕ͳ͍ͱҠߦͰ͖ͳ͍ •

    γΣϧεΫϦϓτ͸සൟʹ࣮ߦ͠ͳ͍ͷͰ࣮ߦ͍ͨ͠ͱ͖ʹಈ͔͘෼͔Βͳ͍ • JenkinsͰຖ೔ςετΛ͢Δ͜ͱͰ࣮ߦ͞ΕΔස౓Λ্͛Δ • ܧଓతΠϯςάϨʔγϣϯʢCIʣΛαʔόʔߏஙͰ΋࣮ફͰ͖Δ • γΣϧεΫϦϓτมߋޙʹ؆୯ʹ࣮ߦͰ͖Δ҆৺ײ • Serverspec͸࣮αʔόʔʹରͯ͠΋ద༻Ͱ͖Δ
  7. γΣϧεΫϦϓτΛVagrant্Ͱಈ͔͢ • Ծ૝Ϛγϯ্Ͱಈ͔͘Θ͔Βͳ͍ • sshɾωοτϫʔΫɾiptablesɾϝϞϦͳͲ • ࣾ಺͸ΦϯϓϨͰͷӡ༻લఏͰγΣϧεΫϦϓτ΋ͦΕ͔͠ߟྀ͞Ε͍ͯͳ͔ͬͨ • VagrantͷprovisionͰγΣϧεΫϦϓτΛࢦఆ •

    ςετ͍ͨ͠ηοτΞοϓεΫϦϓτͱVagrantͷΈͰ࣮ߦ͍ͨ͠௥ՃͷॲཧΛ࣮ߦ͢Δ γΣϧεΫϦϓτ • ࣮ࡍͷηοτΞοϓεΫϦϓτʹΰϛΛೖΕͳ͍ͨΊ • ͨͩ͠Ͳ͏͠Α͏΋ͳ͍΋ͷ΋͋ΔͷͰηοτΞοϓεΫϦϓτͷมߋ͸΍ΉΛಘͳ͍ • iptablesͳͲઃఆ͞ΕͨΒଈ௨৴Ͱ͖ͳ͘ͳΔ • ෼ذ෦෼͸Ծ૝؀ڥ͚ͩͰ͸ਖ਼͘͠ಈ͍͍ͯΔ͔֬ೝͰ͖ͳ͍
  8. VagrantͷBox • aptitude upgradeΛ࣮ߦͯ͠BoxΛొ࿥͠௚͚ͩ͢ͷδϣϒΛJenkinsʹొ࿥͍ͯ͠Δ • ςετ͕ෳ਺͋ΔͷͰۃྗૣ͘ςετΛऴΘΒͤΔͨΊ • ݹ͍ύοέʔδ΍੬ऑੑͷ͋Δόʔδϣϯͷύοέʔδ͸μ΢ϯϩʔυͰ͖ͳ͍ ͷͰৗʹ࠷৽ͷ΋ͷͰςετΛ͢Δඞཁ͕͋Δ •

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

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

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