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
960
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
Google Cloud で始める Cloud Run 〜AWSとの比較と実例デモで解説〜
risatube
PRO
0
110
ガバメントクラウドのセキュリティ対策事例について
fujisawaryohei
0
550
DevOps視点でAWS re:invent2024の新サービス・アプデを振り返ってみた
oshanqq
0
180
OpenAIの蒸留機能(Model Distillation)を使用して運用中のLLMのコストを削減する取り組み
pharma_x_tech
4
560
Amazon SageMaker Unified Studio(Preview)、Lakehouse と Amazon S3 Tables
ishikawa_satoru
0
150
PHP ユーザのための OpenTelemetry 入門 / phpcon2024-opentelemetry
shin1x1
1
230
プロダクト開発を加速させるためのQA文化の築き方 / How to build QA culture to accelerate product development
mii3king
1
270
ハイテク休憩
sat
PRO
2
150
10分で学ぶKubernetesコンテナセキュリティ/10min-k8s-container-sec
mochizuki875
3
350
あの日俺達が夢見たサーバレスアーキテクチャ/the-serverless-architecture-we-dreamed-of
tomoki10
0
460
DevFest 2024 Incheon / Songdo - Compose UI 조합 심화
wisemuji
0
110
Amazon Kendra GenAI Index 登場でどう変わる? 評価から学ぶ最適なRAG構成
naoki_0531
0
110
Featured
See All Featured
Evolution of real-time – Irina Nazarova, EuRuKo, 2024
irinanazarova
5
450
10 Git Anti Patterns You Should be Aware of
lemiorhan
PRO
656
59k
Design and Strategy: How to Deal with People Who Don’t "Get" Design
morganepeng
127
18k
Refactoring Trust on Your Teams (GOTO; Chicago 2020)
rmw
32
2.7k
Mobile First: as difficult as doing things right
swwweet
222
9k
The MySQL Ecosystem @ GitHub 2015
samlambert
250
12k
Sharpening the Axe: The Primacy of Toolmaking
bcantrill
38
1.9k
The Cost Of JavaScript in 2023
addyosmani
45
7k
A Tale of Four Properties
chriscoyier
157
23k
Intergalactic Javascript Robots from Outer Space
tanoku
270
27k
Chrome DevTools: State of the Union 2024 - Debugging React & Beyond
addyosmani
2
170
Site-Speed That Sticks
csswizardry
2
190
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Ͱ͖ΔڥΛ͑Δ ͷ͕ͷʹΑͬͯ໘