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.3k
シェルスクリプトを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
530
ISUCONの情報共有にはこれ!notify_slack!/isucon_notify_slack
catatsuy
1
940
ISUCON6本選のベンチマークでconsulを使用してクラスタを構築した話 / isucon6-night
catatsuy
2
1.1k
ユニクロの レジから学ぶ Goroutine #yapc8oji #yapc8ojiA /uniqlo_golang
catatsuy
6
2.2k
社内ISUCONオープニング/private-isu-opening
catatsuy
0
9.8k
ピクシブ社内広告サーバーでの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.8k
ピクシブ広告サーバー開発・運用の軌跡 2015春インターン講義資料
catatsuy
17
11k
Other Decks in Technology
See All in Technology
いざ、BSC討伐の旅
nikinusu
2
780
The Role of Developer Relations in AI Product Success.
giftojabu1
0
130
Lexical Analysis
shigashiyama
1
150
DynamoDB でスロットリングが発生したとき/when_throttling_occurs_in_dynamodb_short
emiki
0
250
アジャイルチームがらしさを発揮するための目標づくり / Making the goal and enabling the team
kakehashi
3
140
エンジニア人生の拡張性を高める 「探索型キャリア設計」の提案
tenshoku_draft
1
130
AGIについてChatGPTに聞いてみた
blueb
0
130
【Pycon mini 東海 2024】Google Colaboratoryで試すVLM
kazuhitotakahashi
2
540
Platform Engineering for Software Developers and Architects
syntasso
1
520
Python(PYNQ)がテーマのAMD主催のFPGAコンテストに参加してきた
iotengineer22
0
500
オープンソースAIとは何か? --「オープンソースAIの定義 v1.0」詳細解説
shujisado
9
1.1k
AWS Lambdaと歩んだ“サーバーレス”と今後 #lambda_10years
yoshidashingo
1
180
Featured
See All Featured
Imperfection Machines: The Place of Print at Facebook
scottboms
265
13k
The Cost Of JavaScript in 2023
addyosmani
45
6.8k
Faster Mobile Websites
deanohume
305
30k
Building an army of robots
kneath
302
43k
No one is an island. Learnings from fostering a developers community.
thoeni
19
3k
KATA
mclloyd
29
14k
The Success of Rails: Ensuring Growth for the Next 100 Years
eileencodes
44
6.8k
Making Projects Easy
brettharned
115
5.9k
Why You Should Never Use an ORM
jnunemaker
PRO
54
9.1k
Automating Front-end Workflow
addyosmani
1366
200k
Keith and Marios Guide to Fast Websites
keithpitt
409
22k
Templates, Plugins, & Blocks: Oh My! Creating the theme that thinks of everything
marktimemedia
26
2.1k
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Ͱ͖ΔڥΛ͑Δ ͷ͕ͷʹΑͬͯ໘