CircleCIを利用した自動ビルド・自動配布
CircleCIΛར༻ͨ͠Android։ൃͷޮԽVASILY,(Inc.(ງߐ2/28ʲiOS/Androidʳ࠷৽ࣄྫ͔ΒֶͿʂϞόΠϧ͚ςετख๏ษڧձ©"VASILY,"Inc.,"2015 1
View Slide
ࣗݾհ• ງߐ"྄հ"@Horie1024• ࡢ11݄͔ΒVASILYͰۈ• ओʹiQON"Android൛ͷ։ൃΛ୲©"VASILY,"Inc.,"2015 2
GooglePlayετΞ2014ϕετΞϓϦ©"VASILY,"Inc.,"2015 3
ൃද༰• ΞϓϦͷಈ࡞֬ೝΛޮྑ͘ߦ͍͍ͨ• ϦϦʔε࡞ۀΛͰ͖Δ͚ͩݮΒ͍ͨ͠• ࣗಈϏϧυ• APKͷࣗಈԽ©"VASILY,"Inc.,"2015 4
iQONͷ։ൃϑϩʔ• PullRequestϕʔεͷ։ൃ• releaseϒϥϯνΛ࡞͠PullRequest• releaseϏϧυΛݕূͰ֬ೝ• ϦϦʔεલʹmasterreleaseΛϚʔδ©"VASILY,"Inc.,"2015 5
ϦϦʔε࡞ۀ1. masterϒϥϯν͔ΒAPKΛ࡞2. ϝʔϧͰAPKΛࣾ3. ࠷ऴ֬ೝ4. GooglePlayʹΞοϓϩʔυ5. ϦϦʔεྃ©"VASILY,"Inc.,"2015 6
ϦϦʔε࡞ۀͷ• ࡞ۀखॱ؆୯͕ͩϦϦʔεͷʹ࡞ۀ͕ൃੜ͢ΔͷͰ໘• िʹ࠷1ճɺෳճߦ͏߹͋Δ• ۃྗ࡞ۀΛݮΒ͍ͨ͠©"VASILY,"Inc.,"2015 7
࣮ݱͨ͜͠ͱ• APK࡞ͷࣗಈԽ• ࣾͷࣗಈԽ©"VASILY,"Inc.,"2015 8
ϦϦʔε࡞ۀͷݮ(લ)1. masterϒϥϯν͔ΒAPKΛ࡞2. ϝʔϧͰAPKΛࣾ3. ࠷ऴ֬ೝ4. GooglePlayʹΞοϓϩʔυ5. ϦϦʔεྃ©"VASILY,"Inc.,"2015 9
ϦϦʔε࡞ۀͷݮ(ޙ)1. masterͷPullRequestͷϚʔδͰࣗಈ2. ࠷ऴ֬ೝ3. GooglePlayʹΞοϓϩʔυ4. ϦϦʔεྃ©"VASILY,"Inc.,"2015 10
Ͳ͏࣮ݱ͔ͨ͠• CircleCIΛத৺ʹ࣮ݱ©"VASILY,"Inc.,"2015 11
Ͳ͏࣮ݱ͔ͨ͠• CircleCI)+)GitHub)+)DeployGate)+)Slack• GitHubͷPushΛݕ͠ϏϧυΛ։࢝• CircleCIͰϏϧυɺDeployGateͰ• Ϗϧυ݁ՌͷSlackͷ௨©"VASILY,"Inc.,"2015 12
ͳͥCircleCIʁ• iQONͷαʔόαΠυͰར༻࣮• Jenkinsͷཧʹख͕ճΒͳ͍• android/sdk͕VMʹඪ४Ͱ४උ©"VASILY,"Inc.,"2015 13
࣮ݱͨ͠ϑϩʔ1. GitHubͰPullRequestΛϚʔδ©"VASILY,"Inc.,"2015 14
࣮ݱͨ͠ϑϩʔ1. GitHubͰPullRequestΛϚʔδ2. CircleCI͕ϏϧυΛ։࢝©"VASILY,"Inc.,"2015 15
࣮ݱͨ͠ϑϩʔ1. GitHubͰPullRequestΛϚʔδ2. CircleCI͕ϏϧυΛ։࢝3. SlackϏϧυͷ൱Λ௨©"VASILY,"Inc.,"2015 16
࣮ݱͨ͠ϑϩʔ1. GitHubͰPullRequestΛϚʔδ2. CircleCI͕ϏϧυΛ։࢝3. SlackϏϧυͷ൱Λ௨4. DeployGateAPKΛΞοϓϩʔυ©"VASILY,"Inc.,"2015 17
࣮ݱͨ͠ϑϩʔ1. GitHubͰPullRequestΛϚʔδ2. CircleCI͕ϏϧυΛ։࢝3. SlackϏϧυͷ൱Λ௨4. DeployGateAPKΛΞοϓϩʔυ5. ݕূʹAPKͷߋ৽Λ௨©"VASILY,"Inc.,"2015 18
࣮ݱͨ͠ϑϩʔ1. GitHubͰPullRequestΛϚʔδ2. CircleCI͕ϏϧυΛ։࢝3. SlackϏϧυͷ൱Λ௨4. DeployGateAPKΛΞοϓϩʔυ5. ݕূʹAPKͷߋ৽Λ௨6. APKΛΠϯετʔϧ©"VASILY,"Inc.,"2015 19
݁Ռ• ͍ͭͰ࠷৽ϏϧυΛࢼ͢͜ͱ͕Մೳ• masterɾreleaseϒϥϯνͷϚʔδ୯ҐͰݕূʹ৴• ϦϦʔεखॱͷݮ• APKΛखಈͰ࡞Βͳͯ͘ྑ͍• ϝʔϧͰAPKΛ͢Δඞཁ͕ແ͍©"VASILY,"Inc.,"2015 20
CircleCIΛӡ༻ͯ͠ࠔͬͨ͜ͱ• Out%Of%Memory• VMͷϝϞϦ͕4G• build4toolsͷόʔδϣϯΛ21ʹ্͛ͨࡍසൃ• GradleΛ2ܥʹ্͛ͨͱ͜Ζऩ·Δ(كʹൃੜ)• CircleCI͍߹ΘͤͰ8Gʹ্͛ΒΕΔͷͰղܾ©"VASILY,"Inc.,"2015 21
࣮ݱ͢ΔͨΊͷௐࠪ• CircleCIͷઃఆํ๏• CircleCIͰͷAndroidͷϏϧυ• DeployGateͱͷ࿈ܞ• Slackͱͷ࿈ܞ©"VASILY,"Inc.,"2015 22
ฐࣾϒϩάʹ·ͱΊ·ͨ͠ɻh"p://tech.vasily.jp/circleci_deploygate_android_app_automa9on/©"VASILY,"Inc.,"2015 23
ࠓऔΓΜͰ͍Δ͜ͱ• GooglePlayͷࣗಈΞοϓϩʔυ©"VASILY,"Inc.,"2015 24
GooglePlayͷΞοϓϩʔυࣗಈԽ• PythonͰऔΓ߹͑ͣࢼͨ͠• CircleCIͱ࿈ܞͤ͞ςετத• 3݄લʹ࣮ݱ͍ͨ͠©"VASILY,"Inc.,"2015 25
1. releaseϒϥϯνPullRequest2. ϚʔδͰࣗಈɺ࠷ऴ֬ೝ3. masterPullRequest4. GooglePlayʹΞϧϑΝͰࣗಈΞοϓϩʔυ5. Developer9ConsoleͰΞϧϑΝΛ൛ʹมߋ6. ϦϦʔεྃ©"VASILY,"Inc.,"2015 26
Hubotͷ׆༻• ։ൃޮ͕ྑ͘ͳΔΈΛݕ౼©"VASILY,"Inc.,"2015 27
͍ۙ͏ͪʹΔ͖͜ͱ• Ϣχοτςετͷ֦ॆ• ςετͷཧղΛਂΊΔ• E2Eςετ• EspressoɺAppiumɺCalabash...©"VASILY,"Inc.,"2015 28
͋Γ͕ͱ͏͍͟͝·ͨ͠©"VASILY,"Inc.,"2015 29