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
540
ISUCONの情報共有にはこれ!notify_slack!/isucon_notify_slack
catatsuy
1
980
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.8k
ピクシブ広告サーバー開発・運用の軌跡 2015春インターン講義資料
catatsuy
17
11k
Other Decks in Technology
See All in Technology
機械学習を「社会実装」するということ 2025年版 / Social Implementation of Machine Learning 2025 Version
moepy_stats
5
1.2k
月間60万ユーザーを抱える 個人開発サービス「Walica」の 技術スタック変遷
miyachin
1
140
データ基盤におけるIaCの重要性とその運用
mtpooh
4
530
【JAWS-UG大阪 reInvent reCap LT大会 サンバが始まったら強制終了】“1分”で初めてのソロ参戦reInventを数字で振り返りながら反省する
ttelltte
0
140
0→1事業こそPMは営業すべし / pmconf #落選お披露目 / PM should do sales in zero to one
roki_n_
PRO
1
1.5k
2024年活動報告会(人材育成推進WG・ビジネスサブWG) / 20250114-OIDF-J-EduWG-BizSWG
oidfj
0
230
ABWGのRe:Cap!
hm5ug
1
120
KMP with Crashlytics
sansantech
PRO
0
240
Kotlin Multiplatformのポテンシャル
recruitengineers
PRO
2
150
TSのコードをRustで書き直した話
askua
2
170
Cloudflareで実現する AIエージェント ワークフロー基盤
kmd09
0
290
Formal Development of Operating Systems in Rust
riru
1
420
Featured
See All Featured
Fontdeck: Realign not Redesign
paulrobertlloyd
82
5.3k
Writing Fast Ruby
sferik
628
61k
Building an army of robots
kneath
302
45k
Optimising Largest Contentful Paint
csswizardry
33
3k
The Cost Of JavaScript in 2023
addyosmani
46
7.2k
実際に使うSQLの書き方 徹底解説 / pgcon21j-tutorial
soudai
173
51k
CSS Pre-Processors: Stylus, Less & Sass
bermonpainter
356
29k
Facilitating Awesome Meetings
lara
51
6.2k
Java REST API Framework Comparison - PWX 2021
mraible
28
8.3k
ピンチをチャンスに:未来をつくるプロダクトロードマップ #pmconf2020
aki_iinuma
113
50k
Exploring the Power of Turbo Streams & Action Cable | RailsConf2023
kevinliebholz
28
4.5k
Fireside Chat
paigeccino
34
3.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Ͱ͖ΔڥΛ͑Δ ͷ͕ͷʹΑͬͯ໘