์ง๋ ๊ธ์์๋ Action Controller Runner (์ดํ ARC) ๋ฅผ ์ฌ์ฉํ ๋ AWS EFS ๋ฅผ ๋ง์ดํธํด์ ํน์ ๊ฒฝ๋ก์ build ์ ํ์ํ ๋ฐ์ดํฐ๋ฅผ ์บ์ฑํ์ต๋๋ค.
๊ทผ๋ฐ ๋ง์ฝ AWS EFS ์ ๊ฐ์ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ ์ ์๋ ์คํ ๋ฆฌ์ง๊ฐ ์๋ค๋ฉด ์ด๋จ๊น์?
๋คํํ ์ถฉ๋ถํ ์ข์ ๋์ฑ ์์ด ์์ต๋๋ค. ๋ฐ๋ก Github Action ์์ ์ ๊ณตํด์ฃผ๋ Action Cache ์ด๋ผ๋ ๋ ์์ ๋๋ค.
Github Action ์ ์ฌ์ฉํ๋ค๋ฉด ์๋ง ์ด๋ฏธ ๋ค๋ค ์ ์์ค ์๋ ์๊ฒ ๊ตฐ์.
Action Cache ๋ ์ข์์ 3.7k ๋ฅผ ๋ฐ์ ๋งํผ ๋ง์ ์ฌ๋?์ ๋ฐ๊ณ ์๋ ์ก์ ์ค์ ํ๋์ ๋๋ค.
๋ํ๋จผํธ๋ฅผ ๋ณด๋ฉด ๊ฝค ์์ธํ๊ฒ ์ค๋ช ์ด ๋์ด์์ต๋๋ค.
์์ ์ฝ๋๋ ์กด์ฌํ๋ฉฐ, ๊ฐ ํ์ํ with ์ ๋ํด์๋ ์น์ ํ๊ฒ ์ค๋ช ํด์ฃผ๊ณ ์์ต๋๋ค.
name: Caching Primes
on: push
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- name: Cache Primes
id: cache-primes
uses: actions/cache@v3
with:
path: prime-numbers
key: ${{ runner.os }}-primes
- name: Generate Prime Numbers
if: steps.cache-primes.outputs.cache-hit != 'true'
run: /generate-primes.sh -d prime-numbers
- name: Use Prime Numbers
run: /primes.sh -d prime-numbers
๊ทผ๋ฐ ๋ฌธ์ ๋ ๋ด๋ ์ด๋ป๊ฒ ๋์ํ๋ ์ง ์ ์ดํด๊ฐ ์๊ฐ๋๋ผ๊ณ ์.. (์บ์ฑ์ ํด์ฃผ๋ ์ก์ ์ธ ๊ฑด ์๊ฒ ์ด! ๊ทผ๋ฐ ๋ญ ์ด๋ป๊ฒ...)
๊ทธ๋์ ์ด๋ฒ ๊ธ์์๋ Action Cache ๋ฅผ ์ฌ์ฉํ๋ ๋ฐฉ๋ฒ๊ณผ ์บ์ฑ์ ํ์ ๋ ๊ณผ์ฐ ์ผ๋ง๋ ๋จ์ถ๋๋ ์ง ์์๋ณด๊ณ ์ ํฉ๋๋ค.
๋ ์ธ ๋๋์ฝ๋~
์ฌ๋ด์ผ๋ก,
Github Action ์ caches ๊ธฐ๋ฅ์ ๋ฌด๋ฃ์ด๋ฉฐ, Repo ๋น ์ต๋ ์บ์ ์ฉ๋์ 10GB ์ ๋๋ค. ์บ์ ์ ์ง ๊ธฐ๊ฐ์ 7์ผ๋ก ์ ํ๋๋ฉฐ, ์ต๋ ์ฉ๋์ ์ด๊ณผํ๊ฑฐ๋ ์ ์ง ๊ธฐ๊ฐ์ ์ด๊ณผํ๋ฉด ์๋์ผ๋ก ์ญ์ ๋ฉ๋๋ค. 7์ผ ๋์ ์ฌ์ฉ๋์ง ์์ ์บ์ ๋ํ ์ญ์ ๋ฉ๋๋ค. ๊ด๋ จ ๋ฌธ์
Cache ์
์๋ฌด ๋ฐ์ดํฐ๋ ์บ์ฑ ๋์ด ์์ง ์์ ํ๊ฒฝ์์ ์ด๋ป๊ฒ ๋์ํ๋ ์ง ๋จผ์ ์์๋ณด์ฃ !
์งํ๋๋ action.yaml ์ ์๋์ ๊ฐ์์.
steps:
- name: Set up Java
uses: actions/setup-java@v3
with:
distribution: zulu
java-version: 17
cache: gradle
- uses: actions/cache@v3
with:
path: |
./gradle-cache
key: ${{ github.repository }}-gradle-${{ hashFiles('**/*.gradle*') }}
restore-keys: |
${{ github.repository }}-gradle-
- name: Gradle Build
shell: bash
run: |
./gradlew build \
--no-daemon \
-Dorg.gradle.jvmargs=-Xmx1024m \
--build-cache \
--project-cache-dir=./gradle-cache/project \
--gradle-user-home=./gradle-cache/global \
--project-dir="./"
์ฒซ๋ฒ์งธ step ์์๋ zulu-17 ์ ์๋ฐ๋ฅผ ์ค์นํ๊ณ gradle ๋ก ์บ์ฑ์ ํด์ค๋๋ค. ๋งค job ๋ง๋ค ์๋ฐ๋ฅผ ๊ณ์ํด์ ์๋ก ์ค์นํ๋ฉด ๋ง์ด ๋นํจ์จ์ ์ด์์์? (๊ทผ๋ฐ ์ด ๋ถ๋ถ์ ๊ตณ์ด ์บ์ฑ ์ํด๋ ์๋ ์ฐจ์ด๋ ๊ฑฐ์ ์์๋ ๊ฑฐ ๊ฐ์์)
๋๋ฒ์งธ step ์์๋ actions/cache@v3 ๋ฅผ ํตํด ์งํ์ด ๋๋๋ฐ, ๊ทธ ์ ์ ์ ๊น Github Action ์ ๋์ ๋ฐฉ์ ๊ฐ๋ ์ ์ ๊น ์ง๊ณ ๋์ด๊ฐ ๋ณด๊ณ ์ ํฉ๋๋ค.
๊ธฐ๋ณธ์ ์ผ๋ก Job ์ ์คํ์ํค๊ณ ๋ก๊ทธ ๋ด์ฉ์ ์ฐพ์๋ณด๋ฉด ์๋ ์ด๋ฏธ์ง์ฒ๋ผ Action ์ด ์คํ๋๊ณ , ๋ชจ๋ Action ์ด ๋๋๋ฉด, ์งํํ๋ Action ์ ๋ํด์ ๋ค์ ํ๋ฒ ํ์ฒ๋ฆฌ๋ฅผ ํด์ค๋๋ค.
์ ๋ ์ค์ง์ ์ธ ์์ ์ ์งํํ๋ ๊ฒ์ In Action ์ด๋ผ๊ณ ์ง์นญํ๊ณ , ์ดํ ํ์ฒ๋ฆฌํ๋ Action ์ Post Action ์ด๋ผ๊ณ ์ง์นญํฉ๋๋ค. ์ด ๊ฐ๋ ์ ์ค๋ช ํ๋ ์ด์ ๋ Action Cache ๊ฐ ๋ฐ๋ก ์ด๋ฐ Post Action ์ผ๋ก ์บ์๋ฅผ ์ ์ฅํ๊ฑฐ๋ ์บ์ ํํธ๋ฅผ ํด์ฃผ๊ธฐ ๋๋ฌธ์ด์ฃ .
๊ทธ๋ผ ๋ค์ ๋ณธ๋ก ์ผ๋ก ๋์์์ ๋๋ฒ์งธ step ์ธ actions/cache@v3 ์ ๋ค์ ์์๋ณด์ฃ .
- path : ์บ์ฑํ ๊ฒฝ๋ก - In Action ์ด ๋ชจ๋ ๋๋๊ณ Post Action ์์ ์ด ๊ฒฝ๋ก์ ์๋ ๋ชจ๋ ๋ฐ์ดํฐ๋ฅผ ์บ์ฑ
- key : ์บ์ ๋ฐ์ดํฐ๋ฅผ ๊ตฌ๋ถํ๊ธฐ ์ํ ํค - In Action ์์ ์บ์ ๋ฐ์ดํฐ๋ฅผ restore ํ ๋ ์ฌ์ฉ (๋ฐ์์ ๋ค์ ํ๋ฒ ์ค๋ช ํจ)
- restore-keys: restore ๋ฅผ ๋ชปํ์ ๊ฒฝ์ฐ ๋ค๋ฅธ ํค๋ฅผ ์ฌ์ฉํ๊ธฐ ์ํ ๋์ฒดํค
์ธ๋ฒ์งธ step ์์๋ ์คํ๋ง์ผ๋ก ๋ง๋ค์ด์ง ํ๋ก์ ํธ๋ฅผ gradle ๋ก ๋น๋ํฉ๋๋ค. gradle ๋ --project-cache-dir ๊ณผ --gradle-user-home ์ ์บ์๋ฅผ ์ ์ฅํฉ๋๋ค. ๋์ ์ฐจ์ด์ ์ด๋ผ๋ฉด ์ ์๋ ๊ฐ ํ๋ก์ ํธ๋ณ๋ก, ํ์๋ ๊ธ๋ก๋ฒ๋ก ์ ์ฅํ๊ฒ ๋ฉ๋๋ค.
๊ทธ๋ผ ์ด์ ์ด ์ก์ ์ ์คํ์ํค๋ฉด ๋ฌด์จ ์ผ์ด ๋ฐ์ํ๋ ์ง ์์๋ณด๊ฒ ์ต๋๋ค!
์ฒซ ์ก์ ์ด๋ฏ๋ก ์ด๋ ํ ์บ์ ๋ฐ์ดํฐ๋ ์กด์ฌํ์ง ์์ต๋๋ค. ๋๋ฌธ์ ์๋ ๋ก๊ทธ์ฒ๋ผ ์บ์ ํค๋ฅผ ์ฐพ์ ์ ์๋ค๊ณ ํฉ๋๋ค.
"gradle cache is not found" ๋ actions/setup-java@v3 ์์ cache: gradle ์ ์ฃผ์๊ธฐ ๋๋ฌธ์ ๋ณด์ฌ์ง๋ ๋ก๊ทธ์ ๋๋ค.
gradle ๋ฅผ ์บ์ฑํ๋ค๊ณ ํ๋๋ฐ ์ด์ ๊ด๋ จ๋ ์บ์ ํค๋ฅผ ์ฐพ์ง ๋ชปํ๊ฑฐ์ฃ .
๊ทธ๋ฆฌ๊ณ "Cache not found for input keys" ๊ฐ actions/cache@v3 ๊ฐ ์ ๊ณตํ๋ ๋ก๊ทธ์ ๋๋ค. ์ญ์ ๋ง์ฐฌ๊ฐ์ง๋ก ์ฒซ ์ก์ ์ด๋ฏ๋ก ์บ์ฑ๋ ๋ฐ์ดํฐ๊ฐ ์๊ณ , ๊ด๋ จ ์บ์ ํค๋ฅผ ์ฐพ์ง ๋ชปํด์ ๋ฐ์ํ ๋ก๊ทธ์ ๋๋ค.
์ฐธ๊ณ ๋ก ์บ์ ํค๋ ์๋์ ๊ฐ์ ํญ์์ ์ฐพ์ ์ ์์ต๋๋ค.
๋ง์ฝ ์๋์ ๊ฐ์ ํ๋ฉด์ด ๋ณด์ฌ์ง๋ฉด ๊ฐ๋จํ Action ํ๋ ๋ง๋ค์ด์ ์คํ์ํค๋ฉด ์ด ๋ค์๋ถํด ์ ํ๋ฉด ์ฒ๋ผ ๋ณด์ฌ์ง ๊ฑฐ์์.
์๋ฌด ์ก์ ๋ ์์ด์ ์๋์ฒ๋ผ ๋ณด์ฌ์ง๋ ๊ฒ๋๋ค.
๊ทธ๋ฆฌ๊ณ action cache ๊ฐ ๋๋๊ณ ์ด์ด์ gradle build ๊ฐ ์คํ๋ฉ๋๋ค.
์๋๋ gradle build ๊ฐ ์คํ๋ ๋ ์ถ๋ ฅ๋๋ ๋ก๊ทธ์ ๋๋ค. ๋ณด๋ฉด 523 ๋ผ์ธ์ NO-SOURCE ๋ผ๋ ๋ฌธ๊ตฌ๋ฅผ ํ์ธํ ์๊ฐ ์๋๋ฐ ์ด๋ gradle build ๋ฅผ ์งํํ ๋ ์บ์ ๋ฐ์ดํฐ๋ฅผ ์ฌ์ฉํ์ง ์์์ ๋ ์ถ๋ ฅ๋๋ ๋ฌธ๊ตฌ์ ๋๋ค.
๋ง์ฝ ์บ์ ๋ฐ์ดํฐ๋ฅผ ์ฌ์ฉํ๋ค๋ฉด NO-SOURCE ๊ฐ ์๋๋ผ FROM-CACHE ๋ผ๋ ๋ฌธ๊ตฌ๋ฅผ ํ์ธํ ์ ์์ต๋๋ค.
์ดํ gradle build ๊ฐ ๋๋๋ฉด In Action ์ ํ์ํ ์์ ๋ค์ ๋ชจ๋ ๋๋ฌ์ต๋๋ค. ์ดํ Post Action ์ ๋ณด๊ฒ ๋๋ฉด, ์๋์ ๊ฐ์ ๋ฌธ๊ตฌ๋ฅผ ํ์ธํ ์ ์์ด์.
actions/setup-java@v3 ๊ณผ actions/cache@v3 ์์ cache ๋ฅผ ์ฌ์ฉํ๊ธฐ ๋๋ฌธ์ ๋๋ฒ์ ์บ์๊ฐ ์ ์ฅ๋์์ต๋๋ค.
"Cache saved successfully" ๋ก ์ฑ๊ณต์ ์ผ๋ก ์บ์๊ฐ ์ ์ฅ๋์๊ณ , "Cache saved with the key" ๋ก ์ฑ๊ณต์ ์ผ๋ก ํด๋น ์บ์ ๋ฐ์ดํฐ๋ฅผ ์ฐพ์ ์ ์๊ณ ์บ์ ํค๋ ๋ฐ๊ธ๋์์ฃ .
๊ทธ๋ฆฌ๊ณ ์ด ์บ์๋ ์ฌ๊ธฐ์ ํ์ธํ ์ ์์ต๋๋ค. ์์์ ์์ฑ๋ 2๊ฐ์ ์บ์ ํค์ ๋๋ค. setup-java-linux-gradle-xxx ๋ผ๋ ์บ์ ํค ์ด๋ฆ์ actions/setup-java@v3 ์์ ์์ฑํด์ฃผ๋ ๊ฒ์ด๋ฉฐ, <repo name>-gradle-xxxx ๋ actions/cache@v3 ์์ .with.key ์ ๋ช ์ํ ์ด๋ฆ์ ๋๋ค.
์ด์ ์์ผ๋ก ์ด ์บ์ ํค๋ฅผ ๊ฐ์ง๊ณ ์ก์ ์ ์บ์ ๋ฐ์ดํฐ๋ฅผ ๋ณต์ํ๊ฒ ๋ฉ๋๋ค.
์ด ์บ์ ํค๋ฅผ ์ค์๋ก ์ญ์ ํด๋ ๊ฑฑ์ ์ ์ํ์ ๋ ๋ฉ๋๋ค. ๋ ์ก์ ์ ๋๋ฆฌ๋ฉด ์์ฑ๋๊ฑฐ๋ ์. ๋ค๋ง, build ํ ๋ ๋ ๋ง์ ์๊ฐ์ด ๊ฑธ๋ฆฌ๊ฒ ์ฃ ?
์บ์ ๋ฐ์ดํฐ๋ฅผ ์ฐ์ง ์๊ณ ์์ gradle build ๋ฅผ ์งํํ ๊ฒฐ๊ณผ 7๋ถ ์ ๋ ๊ฑธ๋ ธ์ต๋๋ค.
(CPU 1500Mi ๊ธฐ์ค์ด๋ฉฐ, ์คํ๋ง ํ๋ก์ ํธ๋ ์์ฃผ ๊ธฐ๋ณธ์ ์ธ dependency ๋ง ๊ฐ์ง๊ณ ์์)
๊ทธ๋ผ ์ด์ ์บ์๋ฅผ ์ฌ์ฉํ์ ๋ ์ด๋ ํ ๋ณํ๊ฐ ์๋ ์ง ์ดํด๋ณด์ฃ .
Cache ํ
์ด์ ์บ์ ๋ฐ์ดํฐ๊ฐ ์ ์ฅ์ด ๋์๊ณ , ์บ์ ํค๋ฅผ ํตํด์ ์ธ์ ๋ ์ง ์บ์ ๋ฐ์ดํฐ๋ฅผ ๋ณต์ํ ์ ์์ต๋๋ค. ๊ทธ๋ผ ๋ฐ๋ก Action ์ ์คํํด๋ณด์ฃ .
actions/setup-java@v3 ๊ณผ actions/cache@v3 ๋ชจ๋ ์บ์ ํค๋ฅผ ์ด์ฉํด์ ์ ๋ณต์ํ ๊ฑธ ํ์ธํ ์ ์์ต๋๋ค.
๊ทธ๋ฆฌ๊ณ gradle build ๊ณผ์ ์์ ์ถ๋ ฅ๋๋ ๋ก๊ทธ ๋ํ FROM-CACHE ๋ผ๋ ๋ฌธ๊ตฌ๋ฅผ ๋ณด์ฌ์ฃผ๋ ๊ฒ์ ๋ณด๋ ์บ์ฑ ๋ฐ์ดํฐ๋ฅผ ์ด์ฉํด์ ๋น๋ ํ๋ ๊ฒ์ ์ ์ ์์ต๋๋ค.
๊ทธ๋ผ ์ด์ Post Action ๋ฅผ ํ์ธํด๋ณด์ฃ . Post Action ๊ฐ์ ๊ฒฝ์ฐ In Action ์ ์ญ์์ผ๋ก ์งํ๋๊ธฐ ๋๋ฌธ์ actions/cache@v3 ๋จผ์ ์คํ๋ ๊ฑธ ๋ณผ ์ ์์ต๋๋ค. ๊ทธ๋ฆฌ๊ณ ์ฑ๊ณต์ ์ผ๋ก ์บ์ ์ฃผํค์ ์บ์ ํํธ๋ฅผ ํ๋ค๊ณ ๋์ต๋๋ค.
์ด๋ฏธ์ง์์๋ ์งค๋ ธ๋๋ฐ "Cache hit ~" ๋งจ ๋ค์ "not saving cache" ๋ผ๋ ๋ฌธ๊ตฌ ์๋๋ฐ ์ ๋ฐ์ดํธ ๋ ์บ์ ๋ฐ์ดํธ๊ฐ ์๊ณ , ์ด๋ฏธ ์บ์ ๋ฐ์ดํฐ๊ฐ ์๊ธฐ ๋๋ฌธ์ ๊ตณ์ด ์บ์๋ฅผ ์ ์ฅํ์ง ์์๋ค๋ ์๋ฏธ์ ๋๋ค.
๊ทธ๋ฆฌ๊ณ ์ก์ ๊ฒฐ๊ณผ์ ๋๋ค. ์บ์ฑ ์ ์๋ 7๋ถ 15์ด๊ฐ ๊ฑธ๋ ธ๋๋ฐ ์บ์ฑ ํ์๋ 2๋ถ 35์ด๊ฐ ์์๋์์ต๋๋ค. ์๋นํ ๋ง์ด ๋จ์ถ๋ ๊ฑธ ํ์ธ ํ ์ ์์ต๋๋ค. ๊ธ์์ ์ฌ์ฉ๋ ์คํ๋ง ํ๋ก์ ํธ๊ฐ ์์ฃผ ๊ฐ๋ฒผ์์ ๊ทธ๋ ์ง ๋ง์ฝ ์ค๋ฌด์์ ์ฌ์ฉ๋๋ ํ๋ก์ ํธ๋ผ๋ฉด ์๋ง ๋ ๋ง์ ์๊ฐ ๋จ์ถ์ ๊ธฐ๋ํ ์ ์์ ๊ฑฐ ๊ฐ์์.
์ค๋์ Github Action ์ ํต์ฌ์ธ Cache ์ ๋ํด ์์๋ณด์์ต๋๋ค. ์์์ ๋ณด์ฌ๋๋ฆฐ ๊ธฐ๋ฅ๋ง๊ณ ๋ ๋ ๋ค์ํ ๊ธฐ๋ฅ๋ค์ ์ ๊ณตํด์ฃผ๋ ๊ณต์ ๋ฌธ์๋ฅผ ํ์ธํด๋ณด์๊ธธ ๋ฐ๋๋๋ค.
๊ทธ๋ผ ์ค๋์ ์ฌ๊ธฐ๊น์ง!
'DevOps > Github Action' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Github Action] MacOS.. ๋ ์ ARC ์ง์์ด ์๋์... - Runner with MacOS (6) | 2023.11.12 |
---|---|
[Github Action] EKS, Karpenter ๊ทธ๋ฆฌ๊ณ Window Runner (7) | 2023.11.06 |
[Github Action] cmake ์ ์ผ๊ณฑ ํ์ด์ฌ (5) | 2023.10.06 |
[Github Action] ๋ cache ๋๊ฑฐ์ผ! - ccache ๋ฅผ ์ด์ฉํ c/c++ ๋น๋ (7) | 2023.10.05 |
[Github Action] ARC ๋ฅผ ์ด์ฉํ Gradle Build Cache (2) | 2023.03.06 |