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
8
2.4k
シェルスクリプトをServerspecとVagrantで継続的インテグレーションする
シェルスクリプトをServerspecとVagrantで継続的インテグレーションする
@ Glory Web Infra
http://peatix.com/event/71002
Kaneko Tatsuya
February 28, 2015
Tweet
Share
More Decks by Kaneko Tatsuya
See All by Kaneko Tatsuya
キャリアを充実させる『カギ』に!PR TIMES CTO金子達哉から学ぶアウトプット術 / output_method
catatsuy
0
570
ISUCONの情報共有にはこれ!notify_slack!/isucon_notify_slack
catatsuy
1
1k
ISUCON6本選のベンチマークでconsulを使用してクラスタを構築した話 / isucon6-night
catatsuy
2
1.2k
ユニクロの レジから学ぶ Goroutine #yapc8oji #yapc8ojiA /uniqlo_golang
catatsuy
6
2.2k
社内ISUCONオープニング/private-isu-opening
catatsuy
0
9.9k
ピクシブ社内広告サーバーでのGoの開発・運用 #gocon /p_ads_server_gocon2015
catatsuy
10
11k
fluentdで大量のログを Google BigQueryに送ってみた #fluentdmeetup /send_a_log_to_bigquery_with_fluentd
catatsuy
1
4.1k
『pixivエンジニアが教えるプログラミング入門』出版記念特別編基調講演
catatsuy
3
1.9k
ピクシブ広告サーバー開発・運用の軌跡 2015春インターン講義資料
catatsuy
17
11k
Other Decks in Technology
See All in Technology
バクラクでのSystem Risk Records導入による変化と改善の取り組み/Changes and Improvement Initiatives Resulting from the Implementation of System Risk Records
taddy_919
0
220
コンソールで学ぶ!AWS CodePipelineの機能とオプション
umekou
2
110
ペアプログラミングにQAが加わった!職能を超えたモブプログラミングの事例と学び
tonionagauzzi
1
140
Proxmox VE超入門 〜 無料で作れるご自宅仮想化プラットフォームブックマークする
devops_vtj
0
120
ISUCONにPHPで挑み続けてできるようになっ(てき)たこと / phperkaigi2025
blue_goheimochi
0
140
DevOps文化を育むQA 〜カルチャーバブルを生み出す戦略〜 / 20250317 Atsushi Funahashi
shift_evolve
1
110
SpannerとAurora DSQLの同時実行制御の違いに想いを馳せる
masakikato5
0
560
Go製のマイグレーションツールの git-schemalex の紹介と運用方法
shinnosuke_kishida
1
400
パスキーでのログインを 実装してみよう!
hibiki_cube
0
620
空が堕ち、大地が割れ、海が涸れた日~もしも愛用しているフレームワークが開発停止したら?~ #phperkaigi 2025
77web
2
1k
Multitenant 23ai の全貌 - 機能・設計・実装・運用からマイクロサービスまで
oracle4engineer
PRO
2
110
20250326_管理ツールの権限管理で改善したこと
sasata299
1
360
Featured
See All Featured
Designing for Performance
lara
606
69k
Site-Speed That Sticks
csswizardry
4
450
Facilitating Awesome Meetings
lara
53
6.3k
ReactJS: Keep Simple. Everything can be a component!
pedronauck
666
120k
Adopting Sorbet at Scale
ufuk
75
9.3k
Music & Morning Musume
bryan
46
6.4k
BBQ
matthewcrist
88
9.5k
The Power of CSS Pseudo Elements
geoffreycrofte
75
5.7k
GitHub's CSS Performance
jonrohan
1030
460k
The Psychology of Web Performance [Beyond Tellerrand 2023]
tammyeverts
46
2.4k
Building a Scalable Design System with Sketch
lauravandoore
462
33k
The Pragmatic Product Professional
lauravandoore
33
6.5k
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Ͱ͖ΔڥΛ͑Δ ͷ͕ͷʹΑͬͯ໘