Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
シェルスクリプトをServerspecとVagrantで継続的インテグレーションする
Search
Kaneko Tatsuya
February 28, 2015
Technology
2.5k
8
Share
シェルスクリプトをServerspecとVagrantで継続的インテグレーションする
シェルスクリプトをServerspecとVagrantで継続的インテグレーションする
@ Glory Web Infra
http://peatix.com/event/71002
Kaneko Tatsuya
February 28, 2015
More Decks by Kaneko Tatsuya
See All by Kaneko Tatsuya
キャリアを充実させる『カギ』に!PR TIMES CTO金子達哉から学ぶアウトプット術 / output_method
catatsuy
0
660
ISUCONの情報共有にはこれ!notify_slack!/isucon_notify_slack
catatsuy
1
1.1k
ISUCON6本選のベンチマークでconsulを使用してクラスタを構築した話 / isucon6-night
catatsuy
2
1.3k
ユニクロの レジから学ぶ Goroutine #yapc8oji #yapc8ojiA /uniqlo_golang
catatsuy
6
2.4k
社内ISUCONオープニング/private-isu-opening
catatsuy
0
10k
ピクシブ社内広告サーバーでのGoの開発・運用 #gocon /p_ads_server_gocon2015
catatsuy
10
11k
fluentdで大量のログを Google BigQueryに送ってみた #fluentdmeetup /send_a_log_to_bigquery_with_fluentd
catatsuy
1
4.3k
『pixivエンジニアが教えるプログラミング入門』出版記念特別編基調講演
catatsuy
3
2k
ピクシブ広告サーバー開発・運用の軌跡 2015春インターン講義資料
catatsuy
17
12k
Other Decks in Technology
See All in Technology
EMから幅を広げるために最近挑戦していること / Recent challenges I'm undertaking to expand my horizons beyond EM
hiro_torii
1
160
ファインディの事業拡大を支える 拡張可能なデータ基盤へのリアーキテクチャ
hiracky16
0
380
UIライブラリに依存しすぎないReact Native設計を目指して
grandbig
0
160
AgentCore Managed Harness を使ってみよう
yakumo
2
270
CloudTrail を見つめ直してみる
kazzpapa3
1
130
バイブコーディングで3倍早く⚪⚪を作ってみた
samakada
0
200
『生成AI時代のクレデンシャルとパーミッション設計 — Claude Code を起点に』の執筆企画
takuros
1
1.4k
「責任あるAIエージェント」こそ自社で開発しよう!
minorun365
10
2.5k
Class.new is all you need
riseshia
1
210
20260428_Product Management Summit_Loglass_JoeHirose
loglassjoe
4
4.7k
FessのAI検索モード:検索システムとLLMへの取り組み
marevol
0
130
需要創出(Chatwork)×供給(BPaaS) フライホイールとMoat 実行能力の最適配置とAI戦略
kubell_hr
0
1.4k
Featured
See All Featured
世界の人気アプリ100個を分析して見えたペイウォール設計の心得
akihiro_kokubo
PRO
70
39k
The Art of Delivering Value - GDevCon NA Keynote
reverentgeek
16
1.9k
AI: The stuff that nobody shows you
jnunemaker
PRO
6
600
The Spectacular Lies of Maps
axbom
PRO
1
710
[RailsConf 2023 Opening Keynote] The Magic of Rails
eileencodes
31
10k
Code Reviewing Like a Champion
maltzj
528
40k
Measuring & Analyzing Core Web Vitals
bluesmoon
9
810
End of SEO as We Know It (SMX Advanced Version)
ipullrank
3
4.1k
Primal Persuasion: How to Engage the Brain for Learning That Lasts
tmiket
0
330
GraphQLとの向き合い方2022年版
quramy
50
15k
How Fast Is Fast Enough? [PerfNow 2025]
tammyeverts
3
540
Applied NLP in the Age of Generative AI
inesmontani
PRO
4
2.2k
Transcript
γΣϧεΫϦϓτΛ ServerspecͱVagrantͰ ܧଓతΠϯςάϨʔγϣϯ͢Δ @ Glory Web Infra ϐΫγϒΠϯϑϥDBUBUTVZ
ࣗݾհ • catatsuy • ͔͍ͨͭͬͯݺΕ͍ͯΔ • ϐΫγϒΠϯϑϥ • ݱࡏ5ਓதͷ1ਓͰ࠷গ •
2013/9ʹେֶଔۀޙʹೖࣾ • ࠂαʔόʔͱ͔৭ʑ • ൃදࢿྉ͋ΔͷͰͦΕΛࢀߟʹ • ISUCON4४༏উ
Vagrantͷհ • HashiCorp͕։ൃ • VirtualBoxͷϥούʔʢࠓͰVirtualBoxҎ֎Ͱ͑Δʣ • ԾϚγϯͷઃఆΛVagrantfileʹRubyͷDSLͰهड़͢Δ • VagrantfileΛڞ༗͢Ε؆୯ʹಉ͡ڥΛ༻ҙͰ͖Δ •
VirtualBoxͷίϚϯυVBox*Λ֮͑ͣʹײతͳCLIͰ͑Δ • ͋Β͔͡ΊBoxΛ༻ҙ͓͚ͯ͠σΟετϦϏϡʔγϣϯͷΠϯετʔϧ࡞ۀͳͲෆཁ • Boxvmdkͱ͔ΛtarͰݻΊ͚ͨͩͷϑΝΠϧ • provisionΛࢦఆ͢Δͱىಈ࣌ʹઃఆΛద༻Ͱ͖Δ • /vagrant/σΟϨΫτϦΛϗετϚγϯͷΧϨϯτσΟϨΫτϦͱڞ༗͢Δ
Vagrantͷྫ $-* 7BHSBOUpMF
VagrantͷBox • VagrantͷBoxίϛϡχςΟϕʔεͷͷΛ͏ͷ͕ҰൠతΈ͍ͨ • ͔͠͠ίϛϡχςΟϕʔεͷͷԿ͕ೖ͍ͬͯΔͷ͔͔Βͳ͍ • aptͷϛϥʔ͕ຊͷͷͰͳ͍͜ͱ͕ଟ͍ • ChefͷӨڹͰRuby͕Ṗͷํ๏ͰΠϯετʔϧ͞Ε͍ͯΔ͜ͱ͕ଟ͍ •
Boxग़དྷΔݶΓ࠷খߏͰՃͷઃఆprovisionͰߦ͏ͷ͕·͍͠ • গʑ໘͕ͩVagrantͷBoxࣗͰ࡞Δํ͕Α͍ • vagrantϢʔβʔ͕ύεແ͠ͰsudoΛ͑Δɾsshd_configʹUseDNS noΛՃɾ伴ొ ɾVirtualBox guest additionsΠϯετʔϧ • github:catatsuy/vagrant_debian
Serverspec • αʔόʔɾΠϯϑϥߏΛςετ͢ΔͨΊͷgem • ςετۦಈΠϯϑϥ • RakeɾRSpecͱΈ߹Θͤͯ͏ • ΞϓϦέʔγϣϯͷςετΛॻ͘ײ֮Ͱύοέʔδͷ༗ແɾσΟϨΫτϦͷ༗ແɾઃఆ ϑΝΠϧͷ༰ͳͲαʔόʔͷ͋Δ͖ঢ়ଶΛهड़͢Δ
• ࣮ࡍʹ࣮ߦ͢Δͷશ෦γΣϧεΫϦϓτ • ࣮ߦ݁Ռ͔ΒޭɾࣦഊΛஅ • σΟετϦϏϡʔγϣϯຖʹ࣮ߦ͢ΔίϚϯυΛΓସ͑Δ • sshઌΛςετ͢Δ߹sshઌʹRubyෆཁ • ෦࣮ʹؔ͢ΔΦϥΠϦʔຊൃച
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
Γ͍ͨ͜ͱ • ࣾͰීஈ͍ͬͯΔγΣϧεΫϦϓτͰॻ͔ΕͨαʔόʔͷηοτΞοϓεΫϦϓτΛ ຖVagrantͰ࣮ߦͯ͠ServerspecͰςετΛͯ͠ৗʹ࣮ߦͰ͖Δ͜ͱΛอূ͍ͨ͠ • ࠓճࣾͷγΣϧεΫϦϓτʹServerspecΛͬͯCIΛಋೖͨ࣌͠ͷΛϕʔεʹհ • ࠷ॳʹಋೖͨ͠ͷҰҎ্લ͕ͩϝϯςφϯεଓ͍͍ͯΔ • Πϯϑϥଐޙͷॳࣄ
• Serverspec V2ʹରԠࡁΈ • ࣾͷશαʔόʔɾpixivͷશAPɾࠂ৴αʔόʔͰ࣮ߦ͞ΕΔηοτΞοϓεΫϦ ϓτʹؔͯ͠ͷςετΛ࡞ • JenkinsͰຖςετ͕࣮ߦ͞Ε͍ͯΔ
γΣϧεΫϦϓτΛςετ͢Δҙຯ • γΣϧεΫϦϓτશମͷ༷͕͔Γʹ͍͘ • มߋͨ͠ͱ͖ͷӨڹൣғ͕͔Βͳ͍ͷͰ؆୯ʹมߋͰ͖ͳ͍ • ςετ͕͋ΕϦϑΝΫλϦϯά͕ՄೳʹͳΔ • Chef/Ansible/ItamaeͳͲʹҠߦ͍ͨ͠߹ʹςετ͕ͳ͍ͱҠߦͰ͖ͳ͍ •
γΣϧεΫϦϓτසൟʹ࣮ߦ͠ͳ͍ͷͰ࣮ߦ͍ͨ͠ͱ͖ʹಈ͔͔͘Βͳ͍ • JenkinsͰຖςετΛ͢Δ͜ͱͰ࣮ߦ͞ΕΔසΛ্͛Δ • ܧଓతΠϯςάϨʔγϣϯʢCIʣΛαʔόʔߏஙͰ࣮ફͰ͖Δ • γΣϧεΫϦϓτมߋޙʹ؆୯ʹ࣮ߦͰ͖Δ҆৺ײ • Serverspec࣮αʔόʔʹରͯ͠ద༻Ͱ͖Δ
Ϧʔμϒϧίʔυ ςετͷͨΊʹຊͷίʔυͷಡΈ͢͞Λ٘ਜ਼ʹ ͯ͠͠·͏ɻʕʕຊͷίʔυΛςετ͍͢͠Α ͏ʹઃܭ͢Δʹɺ྆ऀʹར͕ͳ͚Ε͍͚ͳ͍ɻ ຊͷίʔυ୯७Ͱૄ݁߹ͳͷʹ͢Δɻςετ ಡΈॻ͖͘͢͢͠ΔɻςετΛ͘͢͢͠ΔͨΊ ʹɺຊͷίʔυʹΰϛΛೖΕ͍͚ͯͳ͍ɻ ʢ14.9 Γ͗͢ʣ
γΣϧεΫϦϓτΛVagrant্Ͱಈ͔͢ • ԾϚγϯ্Ͱಈ͔͘Θ͔Βͳ͍ • sshɾωοτϫʔΫɾiptablesɾϝϞϦͳͲ • ࣾΦϯϓϨͰͷӡ༻લఏͰγΣϧεΫϦϓτͦΕ͔͠ߟྀ͞Ε͍ͯͳ͔ͬͨ • VagrantͷprovisionͰγΣϧεΫϦϓτΛࢦఆ •
ςετ͍ͨ͠ηοτΞοϓεΫϦϓτͱVagrantͷΈͰ࣮ߦ͍ͨ͠ՃͷॲཧΛ࣮ߦ͢Δ γΣϧεΫϦϓτ • ࣮ࡍͷηοτΞοϓεΫϦϓτʹΰϛΛೖΕͳ͍ͨΊ • ͨͩ͠Ͳ͏͠Α͏ͳ͍ͷ͋ΔͷͰηοτΞοϓεΫϦϓτͷมߋΉΛಘͳ͍ • iptablesͳͲઃఆ͞ΕͨΒଈ௨৴Ͱ͖ͳ͘ͳΔ • ذ෦Ծڥ͚ͩͰਖ਼͘͠ಈ͍͍ͯΔ͔֬ೝͰ͖ͳ͍
spec_helper.rb • ServerspecͷςετΛ͏ʹspec_helper.rbΛ࡞Δඞཁ͕͋Δ • ؆୯ͳͷserverspec-init͕ࣗಈͰੜͯ͘͠ΕΔ • spec_helper.rbʹී௨ͷRubyͷίʔυΛॻ͘ͷͰԿͰॻ͚Δ • Serverspecࣗମαʔόʔͷঢ়ଶΛςετ͢Δػೳ͔͠ఏڙ͠ͳ ͍ͷͰspec_helper.rbͷ༰࣍ୈͰ෯͍ڥʹରԠͰ͖Δ
• IPΞυϨε͔Βچࣾɾ৽॓ɾനՏͷ3ڌʴVagrantʹରԠ • ࣗࣗςετͰ͖ΔΑ͏ʹ
VagrantͷBox • aptitude upgradeΛ࣮ߦͯ͠BoxΛొ͚ͩ͢͠ͷδϣϒΛJenkinsʹొ͍ͯ͠Δ • ςετ͕ෳ͋ΔͷͰۃྗૣ͘ςετΛऴΘΒͤΔͨΊ • ݹ͍ύοέʔδ੬ऑੑͷ͋ΔόʔδϣϯͷύοέʔδμϯϩʔυͰ͖ͳ͍ ͷͰৗʹ࠷৽ͷͷͰςετΛ͢Δඞཁ͕͋Δ •
GRUBͷupgradeʹख࡞ۀ͕ඞཁͩͬͨͷͰ͚ͨ͜͜ͱ͕͋Δ • Ͱ͖ͨBoxJenkinsͷՌͱͯ͠μϯϩʔυͰ͖ΔΑ͏ʹ • ࣾͰͷඪ४ڥʹ͍ۙBoxΛ୭Ͱ͑ΔΑ͏ʹ • ݕূڥͱͯ͠࠷ద • Ұʑ࡞͍ͬͯΔͱ͔ͳΓ͕͔͔࣌ؒͬͯ͠·͏
Serverspec+VagrantͰͰ͖ͳ͍͜ͱ • ಛఆͷωοτϫʔΫͰਖ਼͍͠ઃఆ͕͞Ε͍ͯΔ͔ͷ֬ೝ • VagrantΛ͏ݶք • Serverspecͷػೳͱͯ͠Ͱ͖ΔͷͰ࣮αʔόʔʹରͯ͠ServerspecΛ࣮ߦ͢ΕͰ͖ Δ • Πϯετʔϧͨ͠ϓϩάϥϜ͕࣮ࡍʹ࣮ߦͰ͖Δ͔ͷ֬ೝ
• Serverspecͷࢥతʹঢ়ଶ͔͠ςετ͕Ͱ͖ͳ͍ • ಛఆαʔόʔͷΈͰߦΘΕΔઃఆ͕ਖ਼͘͠͞Ε͍ͯΔ͔ͷ֬ೝ • ࣾͷαʔόʔΧʔωϧύϥϝʔλ͕…ͷΑ͏ͳ෦ͳͲ • جຊతͳ෦͚ͩΛςετͰ͖ΔΑ͏ʹͯ͠ࣄނ͕ىͬͨ͜ͱ͜ΖͰ࠶ൃࢭͷςετΛ Ճ͢ΔํͰݱঢ়ӡ༻͞Ε͍ͯΔ
·ͱΊ • ServerspecαʔόʔߏஙʹςετΛಋೖͰ͖Δ • γϯϓϧͳͷͰRubyͷίʔυ࣍ୈͰ෯͍ڥʹରԠͰ͖Δ • VagrantͰVMͷ࡞ɾഁغΛCLIͰ؆୯ʹͰ͖Δ • γΣϧεΫϦϓτΛVagrantͰಈ͔ͤΕγΣϧεΫϦϓτΛServerspecͰCIͰ ͖Δ
• ServerspecΛ͏͜ͱࣗମ؆୯ͰCIࣗମRubyͷϓϩμΫτͷCIͷݟΛ ΄΅ͦͷ··ྲྀ༻Մೳ • طʹ͋ΔγΣϧεΫϦϓτΛVagrantͰಈ͔࣮ͯ͠ࡍʹCIͰ͖ΔڥΛ͑Δ ͷ͕ͷʹΑͬͯ໘