Slide 1

Slide 1 text

Android ͷ CIʢGitHub Actionsʣ ͷվળͰɺ࠷ۙ΍ͬͨ͜ͱ 2023.3.7 YUMEMI.grow Mobile #1 Hiroyuki Kusu ( @hkusu_ )

Slide 2

Slide 2 text

About me

Slide 3

Slide 3 text

Slide 4

Slide 4 text

1. ϓϧϦΫΤετʹΞϓϦΠϯετʔϧ༻ ͷ QR ίʔυΛίϝϯτ

Slide 5

Slide 5 text

Slide 6

Slide 6 text

https://github.com/marketplace/actions/s3-upload-action

Slide 7

Slide 7 text

- uses: actions/checkout@v 3 - uses: actions/setup-java@v 2 with : java-version: 1 1 distribution: 'zulu ' - run: ./gradlew assembleDebu g - uses: hkusu/s3-upload-action@v 2 id: uploa d with : aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID } } aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY } } aws-region: 'ap-northeast-1 ' aws-bucket: ${{ secrets.AWS_BUCKET } } file-path: './app/build/outputs/apk/debug/app-debug.apk ' output-file-url: 'true ' content-type: 'application/vnd.android.package-archive ' output-qr-url: ‘true ' public: 'true ' - ... ͋ͱ͸ϚʔΫμ΢ϯܗࣜͷը૾ϦϯΫ ![QR](${{ steps.upload.outputs.qr-url }}) Λίϝϯτ͢Ε͹OK ※ ͋Β͔͡Ί Amazon S3 ͷ bucket Λͻͱͭ༻ҙ͓ͯ͘͠ඞཁ͕͋Γ·͢ apkϑΝΠϧμ΢ϯϩʔυ༻ͷHTTPϨεϙϯεϔομ

Slide 8

Slide 8 text

• ϨϏϡΞʔ͕खݩͷ࣮ػͰଈ࠲ʹಈ࡞ΛݟΔ͜ͱ͕Ͱ͖Δ • खݩͰίʔυΛνΣοΫΞ΢τͯ͠Ϗϧυ͢Δख͕ؒͳ͍ • Slack ΍ϝʔϧͰͷ URL ͷ௨஌ͱҧ͍ɺͲͷϓϧϦΫΤετͷͲͷίϛοτ ʹରͯ͠Ϗϧυ͞ΕͨΞϓϦͳͷ͔෼͔Γ΍͍͢ • ͨͩ public ͳ URL Ͱ͋ΔͷͰར༻γʔϯʹ͍ͭͯ͸஫ҙ • ར༻͢Δ৔߹Ͱ΋ URL ʹ༗ޮظݶ͸ઃ͚͓͍ͯͨํ͕Α͍ • S3 ͷϥΠϑαΠΫϧͷઃఆͰɺҰఆظؒͰ apk ϑΝΠϧΛࣗಈ࡟আ • ·ͨ͸ S3 ͷ Presigned URL Λར༻ʢ͜ͷ Action ͷΦϓγϣϯͰར༻Մʣ • ༗ޮظݶ͕੾Εͯ΋ϫʔΫϑϩʔΛ࠶࣮ߦ͢Ε͹ QR ίʔυ͸࠶ੜ੒͞ΕΔ

Slide 9

Slide 9 text

2. larger runners ͷར༻

Slide 10

Slide 10 text

• runner Λز͔ͭ࡞ͬͯ group ʹͿΒԼ͛Δ • ୯ମͷ runner ΋εέʔϧ͢Δ͕ɺ͍·ݱࡏ ͸εέʔϧʹ͕͔͔࣌ؒΔҝɺrunner Λͨ ͘͞Μ࡞Δ͜ͱͰෳ਺ϫʔΫϑϩʔɾδϣϒ ͔Βͷಉ࣌ར༻ʹඋ͑Δ

Slide 11

Slide 11 text

jobs : hoge : env : GRADLE_OPTS: ‘-Dorg.gradle.parallel=true -Dorg.gradle.jvmargs=-Xmx5120m ' runs-on : group: android-ci-ubuntu-22.0 4 steps : ... ࡞੒ͨ͠άϧʔϓΛࢦఆ • ؀ڥม਺ GRADLE_OPTS Ͱ Gradle ͷΦϓγϣϯΛࢦఆ • Φϓγϣϯ͸ϓϩδΣΫτͷ Gradle ϑΝΠϧͰఆٛͯ͠΋Α͍͕ɺϩʔΧϧ։ൃͱ CI Ͱ෼͚ͨํ͕Αͦ͞͏ͳͷͰɺ͜ͷΑ͏ʹ؀ڥม਺Ͱࢦఆ͢Δͷ͕ศར • parallel ʹ͢Δ͜ͱͰɺlarger runners ͷ CPU ίΞΛ࠷େݶɺ׆༻ͤ͞Δ • larger runners ͸ϝϞϦ΋ଟ͘ੵΜͰ͍ΔͷͰɺ5G Λࢦఆʢ΋ͬͱଟͯ͘΋Α͍͔΋ʣ

Slide 12

Slide 12 text

• ࠓճͷྫͰ͸ 8 core ͷ runner Λར༻͍ͯ͠Δ͕ 4 core Ͱ΋े෼͔΋͠Ε ͳ͍ʢ࠷େ͸ 64 coreʣ • larger runers ͸ core ਺ʹൺྫͨ͠՝ֹۚͱͳΔ͕ɺେ఍ͷ Gradle λεΫ ͸ core ਺Λ 2 ഒʹ͔ͨ͠Βͱ͍ͬͯ଎౓͕ 1/2 ʹͳΔ༁Ͱ͸ͳ͍ • ίεύͱ͍͏ҙຯͰ͸Α͘ͳ͍ • ྫ͑͹ϓϧϦΫ࣌ͷϫʔΫϑϩʔͳͲɺ଎౓Λ༏ઌ͍ͨ͠৔߹ͷΈར༻ ͢Δͷ͕Αͦ͞͏ • larger runners ͸ແྉ࿮ͷର৅֎ͳͷͰ஫ҙ

Slide 13

Slide 13 text

3. GradleϏϧυΩϟογϡͷར༻

Slide 14

Slide 14 text

jobs : hoge : env : GRADLE_OPTS: ‘-Dorg.gradle.daemon=false -Dorg.gradle.caching=true ' runs-on: ubuntu-22.0 4 steps : - uses: actions/checkout@v 3 - uses: actions/setup-java@v 2 with : java-version: 1 1 distribution: 'zulu ' - uses: actions/cache@v 3 with : path: | ~/.gradle/cache s ~/.gradle/wrappe r ~/.android/build-cach e key: ${{ runner.os }}-gradle-${{ hashFiles('**/*.gradle*', '**/gradle- wrapper.properties', '**/buildSrc/**/*.kt', '**/libs.versions.toml') } } restore-keys: ${{ runner.os }}-gradle - - ... Gradle ͷϏϧυΩϟογϡΛ༗ޮԽ actions/caches Λར༻͢Δࡍ͸σʔϞϯΛແޮԽ͓ͯ͘͜͠ͱ ͍ͭͰʹ Android ͷϏϧυΩϟογϡ΋ར༻ Gradle ͷϏϧυΩϟογϡ͸ґଘϥΠϒϥϦͷΩϟογϡͱڞʹ ͜ͷσΟϨΫτϦ഑Լʹؚ·ΕΔ

Slide 15

Slide 15 text

• CI ͰޮՌΛಘΔͷ͸೉͍͠ʁฐࣾͰ͸େ͖ͳޮՌ͸ײ͡ΒΕͳ͔ͬͨ • ಉ͡ίʔυ͔ͭಉ͡ Gradle λεΫΛ୯७ʹ࠶࣮ߦ͢Δ৔໘Ͱ͸͔ͨ͠ʹ଎͍ • ͨͩ CI Ͱ͸Ωϟογϡͨ࣌͠఺ͱར༻͢Δ࣌఺Ͱίʔυ͕มԽ͍ͯ͠Δ͜ͱ͕ຆͲ • ࣮ߦ͍ͨ͠ Gradle λεΫຖ·ͨ͸શ෦ೖΓͷΩϟογϡΛ༻ҙ͓ͯ͘͠ͷ͕೉͍͠ • GitHub Ͱ͸Ωϟογϡ͸τʔλϧ 10 G ·Ͱͱ͍͏੍ݶ΋͋Δ • ϩʔΧϧ։ൃ࣌ͱҧ͍ɺ։ൃͰੵΈ্͕ͬͨΩϟογϡ͕ར༻Ͱ͖Δ༁Ͱ͸ͳ͍ • ͱ͸͍͑େ͖ͳσϝϦοτ͸ແ͍ͷͰɺؾ࣋ͪఔ౓ʹಋೖ͓͍ͯͯ͠΋Αͦ͞͏ • σϝϦοτ͸ΩϟογϡαΠζ͕গ͠େ͖͘ͳΔ͙Β͍ʁ • Ұճ໨ͷ Gradle λεΫͰ͋ͬͯ΋ɺλεΫ࣮ߦதͷ੒Ռ෺ͷ࠶ར༻͕ߦΘΕΔ

Slide 16

Slide 16 text

4. ࣦഊͨ͠ςετίʔυʹίϝϯτ͢Δ

Slide 17

Slide 17 text

https://speakerdeck.com/hkusu/github-actions-deyunitutotesutofalsejie-guo-worepotosuru

Slide 18

Slide 18 text

5. ϫʔΫϑϩʔͷڞ௨Խ

Slide 19

Slide 19 text

https://speakerdeck.com/hkusu/custom-github-actions-wozuo-tute-organization-nei-degong-you-suru

Slide 20

Slide 20 text

Thank you ! @hkusu_ ฐࣾ͸ Android ΤϯδχΞΛ ઈࢍืूத Ͱ͢ʂ