์๊ฐ
์ด ๊ฐ์ด๋์์๋ Gradle ๋น๋ ์์คํ ์ ์ฌ์ฉํ์ฌ Java ํ๋ก์ ํธ์ ๋ํ CI(์ฐ์ ํตํฉ)๋ฅผ ์ํํ๋ ์ํฌํ๋ก๋ฅผ ๋ง๋๋ ๋ฐฉ๋ฒ์ ๋ณด์ฌ ์ค๋๋ค. ๋ง๋ ์ํฌํ๋ก๋ฅผ ์ฌ์ฉํ๋ฉด ๋์ด์ค๊ธฐ ์์ฒญ์ ์ปค๋ฐํ ๋ ๊ธฐ๋ณธ ๋ถ๊ธฐ์ ๋ํ ๋น๋ ๋๋ ํ ์คํธ ์ค๋ฅ๊ฐ ๋ฐ์ํ๋ ๊ฒฝ์ฐ๋ฅผ ํ์ธํ ์ ์์ต๋๋ค. ์ด ๋ฐฉ๋ฒ์ ์ฝ๋๊ฐ ํญ์ ์ ์์ธ์ง ํ์ธํ๋ ๋ฐ ๋์์ด ๋ ์ ์์ต๋๋ค. CI ์ํฌํ๋ก๋ฅผ ํ์ฅํ์ฌ ํ์ผ์ ์บ์ํ๊ณ ์ํฌํ๋ก ์คํ์์ ์ํฐํฉํธ๋ฅผ ์ ๋ก๋ํ ์ ์์ต๋๋ค.
GitHub ํธ์คํธ ์คํ๊ธฐ์๋ JDK(Java Development Kit) ๋ฐ Gradle์ ํฌํจํ๋ ์ํํธ์จ์ด๊ฐ ์ฌ์ ์ค์น๋ ๋๊ตฌ ์บ์๊ฐ ์์ต๋๋ค. JDK ๋ฐ Gradle์ฉ ์ํํธ์จ์ด ๋ฐ ๋ฏธ๋ฆฌ ์ค์น๋ ๋ฒ์ ๋ชฉ๋ก์ GitHub ํธ์คํ ์คํ๊ธฐ์(๋ฅผ) ์ฐธ์กฐํ์ธ์.
ํ์ ์กฐ๊ฑด
YAML ๋ฐ GitHub Actions์ ๊ตฌ๋ฌธ์ ๋ํด ์ ์๊ณ ์์ด์ผ ํฉ๋๋ค. ์์ธํ ๋ด์ฉ์ ๋ค์์ ์ฐธ์กฐํ์ธ์.
Java ๋ฐ Gradle ํ๋ ์์ํฌ๋ฅผ ๊ธฐ๋ณธ์ ์ผ๋ก ์ดํดํ๋ ๊ฒ์ด ์ข์ต๋๋ค. ์์ธํ ๋ด์ฉ์ Unity ์ฌ์ฉ์ ์ค๋ช ์๋ฅผ ์ฐธ์กฐํ์ธ์.
Gradle ์ํฌํ๋ก ํ ํ๋ฆฟ ์ฌ์ฉ
๋น ๋ฅด๊ฒ ์์ํ๋ ค๋ฉด ์ํฌํ๋ก ํ
ํ๋ฆฟ์ ๋ฆฌํฌ์งํ ๋ฆฌ์ .github/workflows
๋๋ ํฐ๋ฆฌ์ ์ถ๊ฐํฉ๋๋ค.
GitHub์(๋) ๋๋ถ๋ถ์ Gradle ๊ธฐ๋ฐ Java ํ๋ก์ ํธ์์ ์๋ํ๋ Gradle ์ํฌํ๋ก ํ ํ๋ฆฟ์ ์ ๊ณตํฉ๋๋ค. ์ด ๊ฐ์ด๋์ ํ์ ์น์ ์์๋ ์ด ์ํฌํ๋ก ํ ํ๋ฆฟ์ ์ฌ์ฉ์ ์ง์ ํ๋ ๋ฐฉ๋ฒ์ ๋ํ ์์๋ฅผ ์ ๊ณตํฉ๋๋ค.
-
GitHub์์ ๋ฆฌํฌ์งํ ๋ฆฌ์ ๊ธฐ๋ณธ ํ์ด์ง๋ก ์ด๋ํฉ๋๋ค.
-
๋ฆฌํฌ์งํ ๋ฆฌ ์ด๋ฆ ์๋์์ ์์ ์ ํด๋ฆญํฉ๋๋ค.
-
๋ฆฌํฌ์งํ ๋ฆฌ์ ์ํฌํ๋ก๊ฐ ์ด๋ฏธ ์๋ ๊ฒฝ์ฐ ์ ์ํฌํ๋ก๋ฅผ ํด๋ฆญํฉ๋๋ค.
-
"์ํฌํ๋ก ์ ํ" ํ์ด์ง์๋ ๊ถ์ฅ๋๋ ์ํฌํ๋ก ํ ํ๋ฆฟ์ ์ ํ ํญ๋ชฉ์ด ํ์๋ฉ๋๋ค. "Java with Gradle"์ ๊ฒ์ํฉ๋๋ค.
-
"Java with Gradle" ์ํฌํ๋ก์์ ๊ตฌ์ฑ์ ํด๋ฆญํฉ๋๋ค. ์ด ์ํฌํ๋ก๋ ๋ค์ ๋จ๊ณ๋ฅผ ์ํํฉ๋๋ค.
-
ํ๋ก์ ํธ ๋ฆฌํฌ์งํ ๋ฆฌ์ ๋ณต์ฌ๋ณธ์ ์ฒดํฌ ์์ํฉ๋๋ค.
-
Java JDK๋ฅผ ์ค์ ํฉ๋๋ค.
-
Gradle ํ๊ฒฝ์ ์ค์ ํฉ๋๋ค. ์ด
gradle/actions/setup-gradle
์์ ์ ์ํฌํ๋ก ์คํ ๊ฐ์ ์บ์ฑ ์ํ๋ฅผ ์ฒ๋ฆฌํ๊ณ ๋ชจ๋ Gradle ์คํ์ ๋ํ ์์ธํ ์์ฝ์ ์ ๊ณตํฉ๋๋ค. -
"Gradle์ ์ฌ์ฉํ์ฌ ๋น๋" ๋จ๊ณ๋ Gradle ๋ํผ๋ฅผ ์ฌ์ฉํ์ฌ
build
์์ ์ ์คํํฉ๋๋ค. -
ํ์์ ๋ฐ๋ผ ์ํฌํ๋ก๋ฅผ ํธ์งํฉ๋๋ค. ์๋ฅผ ๋ค์ด Java ๋ฒ์ ์ ๋ณ๊ฒฝํฉ๋๋ค.
์ฐธ๊ณ ํญ๋ชฉ
- ์ํฌํ๋ก ํ ํ๋ฆฟ์๋ GitHub์์ ์ธ์ฆ๋์ง ์์ ์์ ์ด ํฌํจ๋์ด ์์ต๋๋ค. ์ 3์๊ฐ ์ ๊ณตํ๋ ์์ ์ ๋ณ๋์ ์๋น์ค ์ฝ๊ด, ๊ฐ์ธ ์ ๋ณด ๋ณดํธ ์ ์ฑ ๋ฐ ์ง์ ๋ฌธ์๋ฅผ ์ ์ฉํฉ๋๋ค.
- ํ์ฌ์ ์์ ์ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ ์ปค๋ฐ SHA์์ ์ง์ ํ ๋ฒ์ ์ ์ฌ์ฉํด์ผ ํฉ๋๋ค. ์์ ์ ์์ ํ๊ณ ์ต์ ๋ฒ์ ์ ์ฌ์ฉํ๋ ค๋ ๊ฒฝ์ฐ SHA๋ฅผ ์ ๋ฐ์ดํธํด์ผ ํฉ๋๋ค. ํ๊ทธ ๋๋ ๋ถ๊ธฐ๋ฅผ ์ฐธ์กฐํ์ฌ ๋ฒ์ ์ ์ง์ ํ ์ ์์ง๋ง ๊ฒฝ๊ณ ์์ด ์์ ์ด ๋ณ๊ฒฝ๋ ์ ์์ต๋๋ค. ์์ธํ ๋ด์ฉ์ ๋ณด์ ์ฌ์ฉ ์ฐธ์กฐ์(๋ฅผ) ์ฐธ์กฐํ์ธ์.
-
๋ณ๊ฒฝ ๋ด์ฉ ์ปค๋ฐ์ ํด๋ฆญํฉ๋๋ค.
gradle.yml
์ํฌํ๋ก ํ์ผ์ด ๋ฆฌํฌ์งํ ๋ฆฌ์ .github/workflows
๋๋ ํฐ๋ฆฌ์ ์ถ๊ฐ๋ฉ๋๋ค.
Java ๋ฒ์ ๋ฐ ์ํคํ ์ฒ ์ง์
์ํฌํ๋ก ํ
ํ๋ฆฟ์ x64 ํ๋ซํผ์ ๊ฒฝ์ฐ OpenJDK 8์ ํฌํจํ๋๋ก PATH
์(๋ฅผ) ์ค์ ํฉ๋๋ค. ๋ค๋ฅธ ๋ฒ์ ์ Java๋ฅผ ์ฌ์ฉํ๊ฑฐ๋ ๋ค๋ฅธ ์ํคํ
์ฒ(x64
๋๋ x86
)๋ฅผ ๋์์ผ๋ก ์ง์ ํ๋ ค๋ ๊ฒฝ์ฐ setup-java
์์
์ ์ฌ์ฉํ์ฌ ๋ค๋ฅธ Java ๋ฐํ์ ํ๊ฒฝ์ ์ ํํ ์ ์์ต๋๋ค.
์๋ฅผ ๋ค์ด x64 ํ๋ซํผ์ฉ Adoptium์์ ์ ๊ณตํ๋ JDK ๋ฒ์ 11์ ์ฌ์ฉํ๋ ค๋ฉด setup-java
์์
์ ์ฌ์ฉํ๊ณ java-version
, distribution
๋ฐ architecture
๋งค๊ฐ ๋ณ์๋ฅผ ๊ฐ๊ฐ '11'
, 'temurin'
๋ฐ x64
๋ก ๊ตฌ์ฑํ ์ ์์ต๋๋ค.
steps: - uses: actions/checkout@v4 - name: Set up JDK 11 for x64 uses: actions/setup-java@v4 with: java-version: '11' distribution: 'temurin' architecture: x64
steps:
- uses: actions/checkout@v4
- name: Set up JDK 11 for x64
uses: actions/setup-java@v4
with:
java-version: '11'
distribution: 'temurin'
architecture: x64
์์ธํ ๋ด์ฉ์ setup-java
์์
์ ์ฐธ์กฐํ์ธ์.
์ฝ๋ ๋น๋ ๋ฐ ํ ์คํธ
์ฝ๋๋ฅผ ๋น๋ํ๊ณ ํ ์คํธํ๊ธฐ ์ํด ๋ก์ปฌ์์ ์ฌ์ฉํ๋ ๊ฒ๊ณผ ๋์ผํ ๋ช ๋ น์ ์ฌ์ฉํ ์ ์์ต๋๋ค.
์ํฌํ๋ก ํ
ํ๋ฆฟ์ ๊ธฐ๋ณธ์ ์ผ๋ก build
์์
์ ์คํํฉ๋๋ค. ๊ธฐ๋ณธ Gradle ๊ตฌ์ฑ์์ ์ด ๋ช
๋ น์ ์ข
์์ฑ์ ๋ค์ด๋ก๋ํ๊ณ , ํด๋์ค๋ฅผ ๋น๋ํ๊ณ , ํ
์คํธ๋ฅผ ์คํํ๊ณ , ํด๋์ค๋ฅผ ๋ฐฐํฌ ๊ฐ๋ฅํ ํ์(์์: JAR ํ์ผ)์ผ๋ก ํจํค์งํฉ๋๋ค.
๋ค๋ฅธ ๋ช
๋ น์ ์ฌ์ฉํ์ฌ ํ๋ก์ ํธ๋ฅผ ๋น๋ํ๊ฑฐ๋ ๋ค๋ฅธ ์์
์ ์ฌ์ฉํ๋ ค๋ ๊ฒฝ์ฐ ํด๋น ๋ช
๋ น์ ์ง์ ํ ์ ์์ต๋๋ค. ์๋ฅผ ๋ค์ด ci.gradle
ํ์ผ์ ๊ตฌ์ฑ๋ package
์์
์ ์คํํ ์ ์์ต๋๋ค.
steps: - uses: actions/checkout@v4 - uses: actions/setup-java@v4 with: java-version: '17' distribution: 'temurin' - name: Setup Gradle uses: gradle/actions/setup-gradle@017a9effdb900e5b5b2fddfb590a105619dca3c3 # v4.4.2 - name: Build with Gradle run: ./gradlew -b ci.gradle package
steps:
- uses: actions/checkout@v4
- uses: actions/setup-java@v4
with:
java-version: '17'
distribution: 'temurin'
- name: Setup Gradle
uses: gradle/actions/setup-gradle@017a9effdb900e5b5b2fddfb590a105619dca3c3 # v4.4.2
- name: Build with Gradle
run: ./gradlew -b ci.gradle package
์ข ์์ฑ ์บ์ฑ
์ํฌํ๋ก ์คํ ์๋๋ฅผ ๋์ด๊ธฐ ์ํด ๋น๋ ์ข
์์ฑ์ ์บ์ํ ์ ์์ต๋๋ค. ์ฑ๊ณต์ ์ธ ์คํ ํ gradle/actions/setup-gradle
์ Gradle ์ฌ์ฉ์ ํ ๋๋ ํฐ๋ฆฌ์ ์ค์ํ ๋ถ๋ถ์ ์บ์ํฉ๋๋ค. ์ดํ ์์
์์๋ ๋น๋ ์คํฌ๋ฆฝํธ๋ฅผ ๋ค์ ์ปดํ์ผํ ํ์๊ฐ ์๊ณ ์๊ฒฉ ํจํค์ง ๋ฆฌํฌ์งํ ๋ฆฌ์์ ์ข
์์ฑ์ ๋ค์ด๋ก๋ํ ํ์๊ฐ ์๋๋ก ์บ์๊ฐ ๋ณต์๋ฉ๋๋ค.
์บ์ฑ์ gradle/actions/setup-gradle
์์
์ ์ฌ์ฉํ ๋ ๊ธฐ๋ณธ๊ฐ์ผ๋ก ์ฌ์ฉํ๋๋ก ์ค์ ๋ฉ๋๋ค. ์์ธํ ๋ด์ฉ์ gradle/actions/setup-gradle
๋ฅผ ์ฐธ์กฐํ์ธ์.
์ํฌํ๋ก ๋ฐ์ดํฐ๋ฅผ ์ํฐํฉํธ๋ก ํจํค์ง
๋น๋์ ์ฑ๊ณตํ๊ณ ํ ์คํธ๋ฅผ ํต๊ณผํ ํ์๋ ๊ทธ์ ๋ฐ๋ฅธ Java ํจํค์ง๋ฅผ ๋น๋ ์ํฐํฉํธ๋ก ์ ๋ก๋ํ ์ ์์ต๋๋ค. ๊ทธ๋ฌ๋ฉด ์ํฌํ๋ก ์คํ์ ์ผ๋ถ๋ก ๋น๋๋ ํจํค์ง๋ฅผ ์ ์ฅํ๊ณ ๋ค์ด๋ก๋ํ ์ ์์ต๋๋ค. ์ํฐํฉํธ๋ ๋ณํฉ๋๊ธฐ ์ ์ ๋ก์ปฌ ํ๊ฒฝ์์ ๋์ด์ค๊ธฐ ์์ฒญ์ ํ ์คํธํ๊ณ ๋๋ฒ๊ทธํ๋ ๋ฐ ๋์์ด ๋ ์ ์์ต๋๋ค. ์์ธํ ๋ด์ฉ์ ์ํฌํ๋ก ์ํฐํฉํธ์ ๋ฐ์ดํฐ ์ ์ฅ ๋ฐ ๊ณต์ ์(๋ฅผ) ์ฐธ์กฐํ์ธ์.
Gradle์ ์ผ๋ฐ์ ์ผ๋ก build/libs
๋๋ ํฐ๋ฆฌ์ JAR, EAR ๋๋ WAR๊ณผ ๊ฐ์ ์ถ๋ ฅ ํ์ผ์ ์์ฑํฉ๋๋ค. upload-artifact
์์
์ ์ฌ์ฉํ์ฌ ํด๋น ๋๋ ํฐ๋ฆฌ์ ์ฝํ
์ธ ๋ฅผ ์
๋ก๋ํ ์ ์์ต๋๋ค.
steps: - uses: actions/checkout@v4 - uses: actions/setup-java@v4 with: java-version: '17' distribution: 'temurin' - name: Setup Gradle uses: gradle/actions/setup-gradle@017a9effdb900e5b5b2fddfb590a105619dca3c3 # v4.4.2 - name: Build with Gradle run: ./gradlew build - name: Upload build artifacts uses: actions/upload-artifact@v4 with: name: Package path: build/libs
steps:
- uses: actions/checkout@v4
- uses: actions/setup-java@v4
with:
java-version: '17'
distribution: 'temurin'
- name: Setup Gradle
uses: gradle/actions/setup-gradle@017a9effdb900e5b5b2fddfb590a105619dca3c3 # v4.4.2
- name: Build with Gradle
run: ./gradlew build
- name: Upload build artifacts
uses: actions/upload-artifact@v4
with:
name: Package
path: build/libs