Slide 1

Slide 1 text

ශऀͷͨΊͷCoreOSɹɹɹɹ (JenkinsΛྫʹ) ٕज़νʔϜษڧձ #205 2014/10/31

Slide 2

Slide 2 text

ͱ͜ΖͰ —͓͏ͪͰCIͰ͖·͔͢ʁ

Slide 3

Slide 3 text

͓͏ͪʹ͸ΞϨ͕ͳ͍ —αʔόʔ —্هΛஔ͘εϖʔε —্هʹର͢ΔՈ଒ͷཧղ

Slide 4

Slide 4 text

͓͏ͪʹ͸ΞϨ͕ͳ͍ —ϝϞϦ —VirtualBoxͱ͔ݏͳΜ΍

Slide 5

Slide 5 text

͓͏ͪʹ͸ΞϨ͕ͳ͍ —͓ۚ

Slide 6

Slide 6 text

CI Platforms(private plan) —circleci.com —͏ͬ(༗ྉ) —travis.com —͏ͬ(༗ྉ) —wercker.com(beta, $0) —๊͍ͯ //// —͚Ͳbeta(͍͔ͭ༗ྉ?)

Slide 7

Slide 7 text

CI Platforms(ߟ࡯) —werckerྑͦ͞͏Ͱ͢Ͷ —͚ͲͦΕ͡Ό໘ന͘ͳ͍͠ษڧձʹͳΒͳ͍ —΍ͬͺVPSʹJenkinsΛཱͯΑ͏ —मཏͷಓ΁

Slide 8

Slide 8 text

मཏͷಓ͕ͩɺ1ͭͷ੾ͳΔئ͍ —Jenkinsͨͯͨcode͸࢒͍ͨ͠Μ΍ —ͦ͜ͰCoreOS ͷ cloud-config!! —αʔόʔͷॳظઃఆΛyamlͰॻ͚Δ

Slide 9

Slide 9 text

CoreOSͷcloud-configͱ͸

Slide 10

Slide 10 text

CoreOSͷcloud-configͱ͸ #cloud-config users: - name: hoshinotsuyoshi groups: - sudo - docker ssh-authorized-keys: - ssh-rsa AAAAB.... —࠷খͰ͸͜Μͳײ͡! —͜ΕͰsshͰ͖ΔdockerΠϯελϯε͕खʹೖΔ!

Slide 11

Slide 11 text

CoreOSʹ͍ͭͯ

Slide 12

Slide 12 text

CoreOSʹ͍ͭͯ —fleet(Cluster Manamgement) —etcd(Service Discovery) —systemd(init.d୅ସ, RHEL7͔ΒࡌΔ) —docker(ίϯςφԾ૝ԽͷΞϨ) ↑ී௨͸fleet/etcd͕ॏཁͰ͕͢ɺɺ ࠓ೔͸systemd/dockerʹ͍ͭͯͷΈ

Slide 13

Slide 13 text

systemd/dockerͰͲ͏ಈ͔͢ͷ? —CoreOSͷαΠτͷྫͰઆ໌ —https://coreos.com/docs/launching-containers/ launching/getting-started-with-systemd/

Slide 14

Slide 14 text

No content

Slide 15

Slide 15 text

cloud-config: Apache httpd serviceྫ ؆ศͷͨΊetcdؔ࿈͸࡟আ͍ͯ͠·͢

Slide 16

Slide 16 text

cloud-config: Apache httpd serviceྫ [unit] Description=My Advanced Service After=docker.service Description : systemctlίϚϯυΛଧͬͨ࣌ʹग़ͯ͘ΔαʔϏεͷઆ໌ After: ͲͷαʔϏε͕ىಈͨ͠ޙʹ͜ͷαʔϏε͕ىಈ͢Δ͔

Slide 17

Slide 17 text

cloud-config: Apache httpd serviceྫ ExecStartPre=-/usr/bin/docker kill apache1 ExecStartPre=-/usr/bin/docker rm apache1 ExecStartPre=/usr/bin/docker pull coreos/apache ExecStartPre : ExecStartͷલʹ࣮ߦ͞ΕΔɻ ͜͜Ͱ͸ίϯςφ໊ʮapache1ʯΛkill͠ɺ࡟আ(rm)ɺ docker public repo͔ΒΠϝʔδ"coreos/apache"Λpull ʮ=-ʯ͢Δͱऴྃίʔυ͕0Ҏ֎Ͱ΋ࣦഊͱΈͳ͞ͳ͍

Slide 18

Slide 18 text

cloud-config: Apache httpd serviceྫ ExecStart=/usr/bin/docker run --name apache1 \ -p 80:80 coreos/apache /usr/sbin/apache2ctl -D FOREGROUND ExecStart : ϝΠϯͷίϚϯυɻ "systemctl start αʔϏε໊" Ͱ࣮ߦ͞ΕΔɻ ্هྫͰ͸Πϝʔδʮcoreos/apacheʯΛίϯςφ໊ʮapache1ʯͰrun ͠ɺ ίϯςφͷதͷ࿩ͳͷͰFOREGROUNDΛࢦఆ͍ͯ͠Δ

Slide 19

Slide 19 text

cloud-config: Apache httpd serviceྫ ExecStop=/usr/bin/docker stop apache1 ExecStop : ετοϓ͢Δͱ͖ͷίϚϯυɻ "systemctl stop αʔϏε໊" Ͱ࣮ߦ͞Ε Δ

Slide 20

Slide 20 text

͜ΕΛcloud-configʹష͚ͬͭΕ͹͑͑! units: - name: httpd.service # ద౰ʹ໊෇͚Δ command: start runtime: no content: | [Unit] (...લͷϖʔδͷ಺༰Λϖʔετ)

Slide 21

Slide 21 text

CoreOSྑ͍ —aptͱ͔yumͱ͔ͳͯ͘΋αʔϏεಈ͘ —ίϯςφ಺ͰશͯΛಈ͔͢ —ͭ·Γ

Slide 22

Slide 22 text

No content

Slide 23

Slide 23 text

CoreOSྑ͍ —͢΂ͯͷͿ͖ʗ΅͏͙͕ͦ͏ͼͰ͖Δʯ —Ϙεઓ޲͚(ຊؾ)ͬΆ͍ —ͬ͢ͽΜײ͋Δ͚ͩʹফඅϝϞϦ΋গͳ͍ $ free -h total used free shared buffers cached Mem: 746M 144M 601M 248K 4.3M 92M -/+ buffers/cache: 47M 698M Swap: 0B 0B 0B (Vultr/768M ͷ৔߹)

Slide 24

Slide 24 text

CoreOSΛಈ͔ͤΔVPSͷ͝঺հ —DigitalOcean —Vultr

Slide 25

Slide 25 text

DigitalOcean —min: $5/mon, $0.007/1h —͍ۙϦʔδϣϯ͋Δ(Singapore) —సૹྔ՝ۚ —paypalબ΂Δ —API —CoreOSͷνϡʔτϦΞϧ͕blogʹࡌͬͯͯɺྑ͍

Slide 26

Slide 26 text

Vultr —min: $5/mon, $0.007/1h —͍ۙϦʔδϣϯ͋Δ(Tokyo) —సૹྔ՝ۚ —ϓϦϖΠυ —API —CoreOSͷެࣜαΠτʹνϡʔτϦΞϧࡌͬͯΔ

Slide 27

Slide 27 text

(ͦͷଞͷVPS΍Ϋϥ΢υܥ͸...) —ͪΌΜͱௐ΂ͯͳ͍Ͱ͢͢Έ·ͤΜ —ߴ͍Πϝʔδ͋Δ

Slide 28

Slide 28 text

demo1 : DigitalOceanͰcoreosཱͯΔ ʲྲྀΕʳ * ϓϥϯબ୒(ϝϞϦ/సૹྔ/HDD) * Ϧʔδϣϯબ୒ * userdata - cloud-config ΛషΔ! * CoreOSͷόʔδϣϯΛࢦఆ - alpha/beta/stable

Slide 29

Slide 29 text

demo1 : DigitalOceanͰCoreOSཱͯΔ ϓϥϯબ୒

Slide 30

Slide 30 text

demo1 : DigitalOceanͰCoreOSཱͯΔ Ϧʔδϣϯબ୒ / cloud-configϖλϦ memo: https://gist.github.com/hoshinotsuyoshi/8d3dc38d50c61c1b6cd3

Slide 31

Slide 31 text

demo1 : DigitalOceanͰCoreOSཱͯΔ CoreOSͷόʔδϣϯΛࢦఆ / 伴Λࢦఆ DigitalOceanฤ͸Ҏ্ɻ

Slide 32

Slide 32 text

demo2 : VultrͰCoreOSཱͯΔ ʲྲྀΕʳ * ipxe༻ҙ͠ͱ͘ * ϓϥϯબ୒ ɾ Ϧʔδϣϯબ୒ * coreos-installίϚϯυ + reboot

Slide 33

Slide 33 text

demo2 : VultrͰCoreOSཱͯΔ ࣄલ४උ:ipxe༻ҙ͠ͱ͘ εΫϦϓτ͸CoreOSͷαΠτ͔Βίϐʔͯ͘͠Δ https://coreos.com/docs/running-coreos/cloud-providers/vultr/

Slide 34

Slide 34 text

demo2 : VultrͰCoreOSཱͯΔ ϓϥϯબ୒Ϧʔδϣϯબ୒

Slide 35

Slide 35 text

demo2 : VultrͰCoreOSཱͯΔ ͖ͬ͞ͷipxeબͼ, deployϘλϯΛԡ͢

Slide 36

Slide 36 text

demo2 : VultrͰCoreOSཱͯΔ ipΞυϨε͕ܾ·Δ·Ͱ਺ेඵ଴ͭ

Slide 37

Slide 37 text

demo2 : VultrͰCoreOSཱͯΔ sshͯ͠ coreos-installίϚϯυ $ ssh core@IPΞυϨε cd ~ && \ curl -L https://gist͔ͳΜ͔ʹషͬͱ͘/cloud-config.yaml > ~/config && \ sudo coreos-install -d /dev/vda -C alpha -c ~/config -o '' && \ sudo mount -o subvol=root /dev/vda9 /mnt/ && \ sudo reboot ʮ-o '' ʯ͢Δඞཁ͋Γʢ͸·ͬͨʣ Vultrฤ͸Ҏ্

Slide 38

Slide 38 text

hello my Jenkins! DigitalOceanͰ΋VultrͰ΋ಉ͡cloud-configͰಉ͡Α͏ʹJenkins͕ಈ͍ͨʂ (↑ΧελϜδϣϒ(job1)͕͢Ͱʹηοτ͞Ε͍ͯΔঢ়ଶͰىಈͰ͖ͨ!)

Slide 39

Slide 39 text

΋͔ͯ͠͠ɿjenkins͡Όͳͯ͘΋೚ ҙͷαʔϏε͕ىಈͰ͖Δ! (ͦ͏Ͱ͢ʂ)

Slide 40

Slide 40 text

ࠓճjenkinsཱͯΔͷʹඞཁͩͬͨ΋ͷ —docker image https://github.com/hoshinotsuyoshi/dind-jenkins https://github.com/hoshinotsuyoshi/dind-jenkins-auto-build-ruby —cloud-config https://gist.github.com/hoshinotsuyoshi/8d3dc38d50c61c1b6cd3

Slide 41

Slide 41 text

docker ͱ github —githubͱdocker hub࿈ܞͤͨ͞ʮAUTOMATED BUILD REPOSITORYʯͱ͍͏ͷ͕ศར —ࢦఆͷϒϥϯνʹϓογϡ͢ΔͱࣗಈతʹϏϧυͯ͠ ͘ΕΔ —͓͏ͪͷύιίϯͰϏϧυ͠ͳ͍͍ͯ͘

Slide 42

Slide 42 text

ࠓճ࡞ͬͨdocker image(1) —jenkinsͱdocker͕ಈ͘ΠϝʔδΛ࡞੒ —(dockerͷதͰdocker͕ಈ͘ʯ͸ݸਓతझຯ) —jenkinsͰdocker buildͷςετΛ͍͔ͨ͠Β —FROM jpetazzo/dind https://github.com/hoshinotsuyoshi/dind-jenkins

Slide 43

Slide 43 text

ࠓճ࡞ͬͨdocker image(2) —(1)ͷΠϝʔδΛFROM͠rubyΛೖΕͨΠϝʔδΛ࡞ ੒ —ʮONBUILDʯ ࢖ͬͯΈͨ —ࢠϏϧυͷϏϧυ࣌ͷίϚϯυΛࢦఆͰ͖Δ —ONBUILD ADD config.xml —template methodͬΆ͍ https://github.com/hoshinotsuyoshi/dind-jenkins-auto-build-ruby

Slide 44

Slide 44 text

ࠓճ࡞ͬͨdocker image(3) —(2)ͷΠϝʔδΛFROM —CoreOSىಈ࣌ʹjenkinsͷઃఆϑΝΠϧΛ࡞੒

Slide 45

Slide 45 text

ॴײ/·ͱΊ —cloud-configͰϥΫνϯςετ؀ڥߏஙʂ —CoreOSΛαϙʔτ͢ΔVPS͸͍҆ϓϥϯ͕͋Δ —͜·Ίʹdestroy͢Ε͹͞Βʹઅ໿Ͱ͖ͦ͏

Slide 46

Slide 46 text

͝ਗ਼ௌ͋Γ͕ͱ͏͍͟͝· ͨ͠