Slide 1

Slide 1 text

Cloud Builder Community 2016 Juniper + CI による ネットワーク運⽤ワークフロー

Slide 2

Slide 2 text

本⽇話すこと w ωοτϫʔΫӡ༻ϑϩʔʹ͍ͭͯ w ͦͷࣗಈԽɺ΍Δ΂͖ʁ w ࣗಈԽͱςετ w ܧଓతσϦόϦʔΛ໨ࢦͯ͠ܧଓతΠϯςάϨʔγϣϯ͢Δ w ͏·͍͍ͬͯ͘ΔϫʔΫϑϩʔྫ w ࢲͷܦݧ͔Β w (JU)VC (JU-BC ϑϩʔ$*

Slide 3

Slide 3 text

⼩島 慎太郎 codeout http://about.me/codeout 2004 2009 2014 ϑϦʔϥϯεͷ "4ख఻͍ *9 +1/"1 *41 OUUOFU

Slide 4

Slide 4 text

ネットワーク運⽤ ワークフロー

Slide 5

Slide 5 text

ntt.net 時代 https://www.janog.gr.jp/meeting/janog29/_downloads/janog29-auto-after-morris-01.pdf ࣗಈԽͷ͘͠Έ͕͋ͬͨ ʮ෺ཧ઀ଓ͢ΔʯʮϐΞΛ ্͛Δʯ͘Β͍ͷߥཻ͍౓ Ͱ࡞ۀ಺༰ॱংϨϏϡʔ ઃఆϨϏϡʔͳ͠ ౰೔ɺߏ੒؅ཧ%#ߋ৽ˠ ࣗಈઃఆ࡞੒ˠࣗಈσϓϩ Π

Slide 6

Slide 6 text

JPNAP 時代 http://www.slideshare.net/yuyarin/git-67640399 ׬શͳ౤ೖίϚϯυΛखಈ Ͱॻ͘ ϨϏϡʔ ౰೔ɺखಈͰίϚϯυ౤ೖ めちゃくちゃ手作業 (でした)

Slide 7

Slide 7 text

ネットワーク運⽤ワークフロー w ख࡞ۀ͸ѱ͔ʁ w ͦΜͳ͜ͱ͸ͳ͍ɻ݁ہͷͱ͜ΖίετύϑΥʔϚϯεͷ໰୊ w ߏ੒؅ཧ%#ͷ࣮૷ʹ͸ίετ͕͔͔Δ
 ۀ຿ϩδοΫʹͽͬͨΓϋϚΔ044ϓϩμΫτ͸ͳ͍
 ˠ݄Πνͷมߋ࡞ۀͳΒɺΉ͠ΖࣗಈԽͷ΄͏͕ѱख WT

Slide 8

Slide 8 text

ネットワーク運⽤ワークフロー ࣄۀܗଶ΍ن໛ʹԠͯࣗ͡ಈͱखಈΛ͏·ࠞͥ͘ɺ γεςϜ ϓϩάϥϜਓؒ ʹ͋ͬͨϫʔΫϑϩʔ Λબͼ͍ͨ ❤

Slide 9

Slide 9 text

NetOpsCoding#4 "JUNOS AUTOMATION その1" http://www.slideshare.net/HiromiTsukamoto/161027-net-opscodingjunosautomation

Slide 10

Slide 10 text

NetOpsCoding#4 "JUNOS AUTOMATION その1" http://www.slideshare.net/HiromiTsukamoto/161027-net-opscodingjunosautomation/1 ωοτϫʔΫσόΠε୯ମͳͷ͔ɺ
 ωοτϫʔΫશମͳͷ͔ɺαʔϏεશମͳͷ͔ɻ
 ࣗಈͱݴͬͯ΋ཻ౓͕͕ͪ͏ ROI Λߟ͑ͯɺࣗಈԽ͍ͨ͠ͷ͸ Ͳͩ͜Ζ͏ʁ

Slide 11

Slide 11 text

Interop Tokyo 2016 "進化を続けるJUNOS Automation" http://www.slideshare.net/JuniperJapan/interop-tokyo-2016junos-automation ネットワークデバイス の粒度っぽい

Slide 12

Slide 12 text

Interop Tokyo 2016 "進化を続けるJUNOS Automation" http://www.slideshare.net/JuniperJapan/interop-tokyo-2016junos-automation ネットワークデバイス の粒度っぽい

Slide 13

Slide 13 text

コンフィグのチェック w มߋσόΠε୯ମ w γϯλοΫε จ๏ νΣοΫ w ηϚϯςΟΫε ҙຯ νΣοΫ w ྫ w ࢦఆͨ͠QPMJDZTUBUFNFOU͸ఆٛ͞Ε͍ͯΔ͔ w QSFpY͸ҙਤͲ͓Γ͔ w ωοτϫʔΫશମͱͯ͠ w ྫ w ԕ͘ͷϧʔλʔͰͷϕετύε͕ҙਤͲ͓ΓมΘΔ͔ w ҙਤͲ͓ΓύέοτϑΥϫʔυ͢Δ͔

Slide 14

Slide 14 text

コンフィグのチェック [edit protocols bgp group ebgp] codeout@vsrx# set export redistribute-static redistribute-direct ^ syntax error. [edit protocols bgp group ebgp] codeout@vsrx# メンテナンス当日まで 見逃されていると ヒヤッとする

Slide 15

Slide 15 text

コンフィグのチェック [edit] codeout@vsrx# set protocols bgp group ebgp export redistribute-static redistribute-direct ^ syntax error. [edit] codeout@vsrx# set protocols bgp group ebgp peer-as 64601 [edit] codeout@vsrx# set protocols bgp group ebgp neighbor 192.168.0.75 [edit] codeout@vsrx# set policy-options policy-statement redistribute-direct from protocol direct [edit] codeout@vsrx# set policy-options policy-statement redistribute-direct then accept [edit] codeout@vsrx# set policy-options policy-statement redistribute-static from protocol static [edit] codeout@vsrx# set policy-options policy-statement redistribute-static then accept [edit] codeout@vsrx# rollback 0 load complete まとめてコピペすると よりよいスリル

Slide 16

Slide 16 text

コンフィグのチェック [edit] codeout@vsrx# set protocols bgp group ebgp export redistribute-static redistribute-direct ^ syntax error. [edit] codeout@vsrx# set protocols bgp group ebgp peer-as 64601 [edit] codeout@vsrx# set protocols bgp group ebgp neighbor 192.168.0.75 [edit] codeout@vsrx# set policy-options policy-statement redistribute-direct from protocol direct [edit] codeout@vsrx# set policy-options policy-statement redistribute-direct then accept [edit] codeout@vsrx# set policy-options policy-statement redistribute-static from protocol static [edit] codeout@vsrx# set policy-options policy-statement redistribute-static then accept [edit] codeout@vsrx# rollback 0 load complete まとめてコピペすると よりよいスリル ໨ΛࡼͷΑ͏ʹͯ͠ɺલ΋ͬͯ ίϯϑΟάͱ޲͖͋͏ඞཁ͕͋Δ ͕͔͔࣌ؒΔ͠ɺͭΒ͍

Slide 17

Slide 17 text

お隣さんは既に解決してた w ΞϓϦέʔγϣϯ։ൃͷݱ৔ w ܧଓతΠϯςάϨʔγϣϯ $* ɺܧଓతσϦόϦʔ $% w $* ܭը͍ͯ͠ΔมߋΛɺࣄલʹࣗಈςετ w $% ςετ͕௨ͬͨ΋ͷΛɺεςʔδϯά؀ڥʹࣗಈσϓϩΠ w ࣄલʹ४උ͍ͯͨ͠ςετγφϦΦΛࣗಈͰճ͢ w શ෦ࣗಈͰ͸ͳ͍ɻ୯७͕ͩ໘౗͍͘͞ςετʹϑΥʔΧε ͜ɺ͜Ε͸Ϛω͍ͨ͠ʂ

Slide 18

Slide 18 text

よく⾒るこういうやつ http://in.fablic.co.jp/entry/circleci-tips

Slide 19

Slide 19 text

ネットワークで⾔えば ઃఆΛॻ͘ ςετ ◻ ڞ༗ ຊ൪σϓϩΠ 自動で

Slide 20

Slide 20 text

ネットワークで⾔えば ઃఆΛॻ͘ ςετ ◻ ڞ༗ ຊ൪σϓϩΠ 自動で 2 ͪΐͬͱ଴ͬͯɺ ʮςετʯͱ͔ʮݕূ؀ڥʯ ͍ͬͯ͏͚ͲɺͦΜͳͷͳ͍Αʁ

Slide 21

Slide 21 text

ネットワークで⾔えば ઃఆΛॻ͘ ςετ ◻ ڞ༗ ຊ൪σϓϩΠ 自動で " େৎ෉ɻ αʔόʔͰ΍Γ·͠ΐ͏

Slide 22

Slide 22 text

何を⾔ってるのか w ωοτϫʔΫͷςετɺ͞·͟·ͳλΠϓ͕͋Δ w ίϯϑΟάνΣοΫ w Ϣχοτςετ w ωοτϫʔΫσόΠε୯ମ͕ظ଴Ͳ͓Γʹϓ ϩτίϧΛ࿩͠ɺظ଴Ͳ͓ΓʹύέοτϑΥʔ ϫʔυ͢Δ͔ w ςετର৅͚ͩԾ૝Խ͢Δͱ͔ w &&ςετ w ωοτϫʔΫશମ͕ظ଴Ͳ͓Γʹʜ ུ w શମԾ૝Խ͠ͳ͍ͱͨͿΜແཧ ॴཁ
 ࣌ؒ ͻΖ͑Δ Τϥʔ ൣғ ୹ ⭕ ޿ ⭕ ௕ ❌ ڱ ❌

Slide 23

Slide 23 text

複数のテストを組み合わせる ίϯϑΟάνΣοΫ Ϣχοτςετ &&ςετ Typo จ๏ޡΓ ҙਤ͢Δ ܦ࿏Λग़͔͢ ܦ࿏Λड͚ͯ ҙਤͲ͓Γ ύέοτసૹ ͢Δ͔ 時間ロス

Slide 24

Slide 24 text

複数のテストを組み合わせる w ྫ͑͹ɺจ๏ޡΓΛ୳͢ͷʹ&&ςετ͸ଛɻॴཁ͕࣌ؒ௕͍ • commit check Ϩϕϧ͕ద੾ w ΤϥʔͷछผʹΑΓɺ࠷దͳςετख๏͕͕ͪ͏ w ͲΜͳΤϥʔ͕͋Δ͔෼͔Βͳ͍
 ˠॴཁ࣌ؒͷ୹͍ςετΛΨϯΨϯճ͢ αʔόʔͰ΍Γ·͠ΐ͏
 αʔόʔͰͰ͖Δ͜ͱ͔Β΍Γ·͠ΐ͏

Slide 25

Slide 25 text

サーバーで commit check codeout/junoser w IUUQTHJUIVCDPNDPEFPVUKVOPTFS w αʔόʔͰcommit checkͰ͖Δ044ϓϩμΫτ w OFUDPOGͰ͔ͭ͏YTEΛ΋ͱʹจ๏ղੳ w YTEʹ͸+6/04$-*ͷߏ଄͕͢΂ؚͯ·Ε͍ͯΔ w interfaces"ͷ࣍ʹ͸จࣈྻ͕ଓ͖ɺ
 ͦͷ഑ԼͰ͸description" Λड͚෇͚ΔʜͳͲͳͲ

Slide 26

Slide 26 text

適切なワークフローは? w αʔόʔͰcommit checkͰ͖Δ͜ͱ͸Θ͔ͬͨ w ਓ͕ؒϨϏϡʔ͢Δ΂͖͜ͱɺݕূ؀ڥͰϢχοτςετɺ &&ςετ͢Δ΂͖͜ͱ΋͋ΔΜͰ͠ΐ͏ʁ w ͦͷͱ͓Γ w ͏·͍͍ͬͯ͘ΔϫʔΫϑϩʔΛ঺հ͠·͢ w ߏ੒؅ཧ%#࢖Θͳ͍ ઃఆΛࣗಈੜ੒͠ͳ͍ ͻͱ޲͚

Slide 27

Slide 27 text

https://guides.github.com/introduction/flow/ GitHub フロー

Slide 28

Slide 28 text

w ઃఆΛςΩετͱͯ͠HJU؅ཧ w ઃఆมߋ͍ͨ͠ͱ͖ ࡞ۀϒϥϯν τϐοΫϒϥϯν Λ࡞ͬͯมߋ಺༰ΛDPNNJU 1VMM3FRVFTUͰϨϏϡʔٞ࿦ मਖ਼ͯ͠DPNNJU ωοτϫʔΫʹσϓϩΠ 1VMM3FRVFTUΛϚʔδ w (JU)VC͡Όͳͯ͘΋0, w (JU-BCͳͲͷ(JU)VCΫϩʔϯ GitHub フロー

Slide 29

Slide 29 text

GitLab で やってみましょう

Slide 30

Slide 30 text

GitLab のインストール・設定 w Πϯετʔϧํ๏͸লུ w %PDLFSͰ΍Δྫ
 IUUQDPEFPVUIBUFOBCMPHDPNFOUSZ w ϨϙδτϦʔ௚ԼʹɺHJUMBCDJZNMͱ3BLFpMFΛஔ͘ w ࢀߟIUUQTHJUIVCDPNDPEFPVUKVOPTDJUSFFHJUMBC

Slide 31

Slide 31 text

作業ブランチ(トピックブランチ)を作る # gitlab プロジェクトをローカルにもってくる $ git clone ssh://[email protected]:10022/codeout/junos-ci.git $ cd junos-ci ... # いま master ブランチにいる junos-ci $ git branch * master # 変更用ブランチをつくる junos-ci $ git checkout -b add-neighbor ...

Slide 32

Slide 32 text

変更内容をcommit junos-ci $ git diff diff --git a/config/junos.conf b/config/junos.conf index 1331682..e860cc4 100644 --- a/config/junos.conf +++ b/config/junos.conf @@ -14,6 +14,8 @@ protocols { } local-address 198.51.100.1; } + neighbor 192.0.2.3; + invalid statement; # わざとエラーを混ぜる } } } junos-ci $ git commit -am "xxxx 開通準備" junos-ci $ git push origin add-neighbor

Slide 33

Slide 33 text

Merge Request をつくる w .FSHF3FRVFTU(JU)VCͰ͍͏1VMM3FRVFTU

Slide 34

Slide 34 text

サーバー上で⾃動テストが⾛る = CI w 3BLFpMFʹॻ͍ͨςετΛࣗಈͰ࣮ߦ w ͜͜Ͱ͸KVOPTFS w จ๏ΤϥʔΛݕ஌Ͱ͖Δ w νϟοτ௨஌΋Χϯλϯ

Slide 35

Slide 35 text

⽂法エラーを修正する w Ͳ͜ʹΤϥʔ͕͋Δ͔Θ͔Δ w मਖ਼ͯ͠commit & push w จ๏Τϥʔ͕ͳ͘ͳΕ͹
 $*͕άϦʔϯʹ

Slide 36

Slide 36 text

Merge Request 上でレビュー・議論する w จ๏νΣοΫ͸$*·͔ͤ w ҙຯ߹͍͚ͩʹϑΥʔΧεͰ͖Δ w ઃఆͷEJ⒎͚ͩϋΠϥΠτ w Ϣχοτςετɺ&&ςετ͕ඞཁͳ৔߹΋͜ͷஈ֊Ͱ

Slide 37

Slide 37 text

ネットワークにデプロイ w git diffΛ΋ͱʹset / deleteίϚϯυʹม׵ͯ͠΋͍͍͠ɺ • શମΛload override ͯ͠΋͍͍ w ͪ͜Β͕Φεεϝ w ϚʔδͷࡍͷίϯϑϦΫτΛආ͚Δ w setͯ͠show configurationˠฒͼॱͳͲ͕มΘΔ͔΋ w ࣗಈ࣮ߦ͠΍͍͢

Slide 38

Slide 38 text

GitLab 上でマージ w ϚʔδϘλϯΛΫϦοΫ͢Δ͚ͩ w git diffΛ΋ͱʹset / deleteίϚϯυʹม׵͢Δ৔߹ w .FSHF3FRVFTU͸ϚʔδͤͣɺΫϩʔζ w ผ్ઃఆΛόοΫΞοϓ w ௚઀NBTUFSʹgit push

Slide 39

Slide 39 text

GitHub フローのメリット w ߏ੒؅ཧ%#࢖Θͳ͍ ઃఆࣗಈੜ੒͠ͳ͍ ͻͱ޲͚ w ΋ͬͱ΋࣌ؒίετ͕ඞཁͳͷ͸ϨϏϡʔϑΣʔζ ઃఆͷจ๏ΤϥʔΛ$*Ͱݟ͚ͭΔ w ϨϏϡʔΞʔ͸ҙຯ߹͍͚ͩʹϑΥʔΧεͰ͖Δ ઃఆͷEJ⒎Λೝࣝ͠΍͍͢6* w ϨϏϡʔΞʔ͸ࠩ෼͚ͩʹϑΥʔΧεͰ͖Δ ٞ࿦͠΍͍͢6* w ޮ཰61⚡

Slide 40

Slide 40 text

まとめ w ࣄۀεςʔδʹΑͬͯɺద੾ͳࣗಈԽͷཻ౓͸͕ͪ͏ w ͋͑ͯखಈͰ΍Δબ୒ࢶ΋ΞϦ w ͦΕͧΕʹదͨ͠ωοτϫʔΫӡ༻ϫʔΫϑϩʔΛબͼ͍ͨ w ࠓͷͱ͜Ζɺ/FUXPSL"VUPNBUJPOΛ࣮ݱ͍ͯ͠Δࣄۀऀ͸
 গͳͦ͏
 ˠ΋ͬͱ΋࣌ؒίετ͕ඞཁͳͷ͸ϨϏϡʔϑΣʔζ w (JU)VCϑϩʔ$*Ͱޮ཰తͳϫʔΫϑϩʔ͕࣮ݱͰ͖Δ w +VOJQFSͳΒKVOPTFSͰจ๏νΣοΫͰ͖Δ

Slide 41

Slide 41 text

Thank you