์๋ ํ์ธ์~
์ด๋ฒ ํฌ์คํ ์์๋ Github Action์ ๋ํ ์ค๋ช ๊ณผ Github์์ ์ด๋ป๊ฒ ์ฌ์ฉํ ์ ์๋์ง ์์ฑํด๋ณด๋ ค๊ณ ํฉ๋๋ค.
Github Action ์ด๋?
- Github ์ ์ฅ์๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ์ํํธ์จ์ด ๊ฐ๋ฐ Workflow๋ฅผ ์๋ํํ ์ ์๋ ๋๊ตฌ์ ๋๋ค. Github ๋ด๋ถ์์ ํ๋ก์ ํธ๋ฅผ ๋น๋, ํ ์คํธ, ๋ฆด๋ฆฌ์ฆ ๋๋ ๋ฐฐํฌ๋ฅผ ์ง์ํ๋ ๊ธฐ๋ฅ์ผ๋ก, Github์์ ์ ๊ณตํ๋ CI/CD ๋๊ตฌ๋ผ๊ณ ์๊ฐํ๋ฉด ํธํ ๊ฒ ๊ฐ๋ค์.
๊ทธ๋ฌ๋ฉด ์ด๋ป๊ฒ Github Action์ด ์ด๋ฃจ์ด์ ธ ์๋์ง ํ์ธํด ๋ณด๊ฒ ์ต๋๋ค.
Github Action์ ๊ตฌ์ฑ์์
1. Workflow
- Repository์ ์ถ๊ฐํ ์ ์๋ ์๋ํ ์ปค๋งจ๋์ ์งํฉ์ผ๋ก ํ๋ ์ด์์ Job์ผ๋ก ๊ตฌ์ฑ๋์ด ์์ผ๋ฉฐ Push๋ PR๊ณผ ๊ฐ์ ์ด๋ฒคํธ์ ์ํด ์คํ๋ ์๋ ์์ผ๋ฉฐ ํน์ ์๊ฐ๋์ ์คํ๋ ์๋ ์์ต๋๋ค.
- ์ด๋ฆ ๊ทธ๋๋ก ๊ทธ๋๋ก ์์ ์ ํ๋ฆ์ด๋ผ๊ณ ์๊ฐํ๋ฉด ์ข์ ๊ฒ ๊ฐ์ต๋๋ค.
2. Event
- Workflow๋ฅผ ์คํ์ํค๋ ํน์ ํ๋ ( Push, Pull Request, Commit ๋ฑ )์ ์๋ฏธํฉ๋๋ค. ์ผ์ข ์ ํธ๋ฆฌ๊ฑฐ๋ผ๊ณ ์๊ฐํ๋ฉด ์ข์ ๊ฒ ๊ฐ์ต๋๋ค.
3. Job
- Job์ด๋ ๋์ผํ Runner์์ ์งํ๋๋ Step์ ์งํฉ์ ์๋ฏธํฉ๋๋ค. ( ๋ค์ Runner์ Step๋ ์ค๋ช ํด ๋๊ฒ ์ต๋๋ค. )
- ํ๋์ workflow ๋ด์ ์ฌ๋ฌ Job์ ๋ ๋ฆฝ์ ์ผ๋ก ์คํ๋๋ ํ์์ ๋ฐ๋ผ ์์กด ๊ด๊ณ๋ฅผ ์ค์ ํ์ฌ ์์๋ฅผ ์ง์ ํ ์ ์์ต๋๋ค.
- ๊ฐ๋ น Test ์์ ๊ณผ Build ์์ ์ ์ํํ๋ Job๋ค์ด ํ๋์ workflow์ ์กด์ฌํ๋ค๋ฉด Build ์ดํ์ Test๊ฐ ์งํ๋์ด์ผ ํ๊ธฐ ๋๋ฌธ์ Build Job์ด ๋ง๋ฌด๋ฆฌ๋ ํ Test Job์ ์คํํ ์ ์๋๋ก ์ง์ ๊ฐ๋ฅํฉ๋๋ค(Build ์คํจ ์ Test๋ ์คํํ์ง ์๋๋ค๋ ๋ป).
4. Step
- ์ปค๋งจ๋๋ฅผ ์คํํ ์ ์๋ ๊ฐ๊ฐ์ Task๋ฅผ ์๋ฏธํ๊ณ , Shell ์ปค๋งจ๋๊ฐ ๋ ์๋ ์๊ณ , ํ๋์ Action์ด ๋ ์๋ ์์ต๋๋ค.
- ํ๋์ Job ๋ด์์ ๊ฐ๊ฐ์ Step์ ๋ค์ํ Task๋ก ์ธํด ์์ฑ๋ ๋ฐ์ดํฐ๋ฅผ ๊ณต์ ํ ์ ์์ต๋๋ค.
5. Action
- Job์ ๋ง๋ค๊ธฐ ์ํด Step์ ๊ฒฐํฉํ ์ปค๋งจ๋๋ก ์ฌ์ฌ์ฉ์ด ๊ฐ๋ฅํ Workflow์ ๊ฐ์ฅ ์์ ๋จ์๋ฅผ ๋งํฉ๋๋ค.
- ์ง์ ๋ง๋ค๊ฑฐ๋ Github Community์ ์ํด ์์ฑ๋ Action์ ๋ถ๋ฌ์ ์ฌ์ฉํ ์ ์์ต๋๋ค.
6. Runner
- Runner๋ Github Actions Workflow ๋ด์ ์๋ Job์ ์คํ์ํค๊ธฐ ์ํ ์ ํ๋ฆฌ์ผ์ด์ ์ ๋๋ค.
- Runner Application์ Github์์ ํธ์คํ ํ๋ ๊ฐ์ํ๊ฒฝ ํน์ ์ง์ ํธ์คํ ํ๋ ๊ฐ์ ํ๊ฒฝ์์ ์คํ ๊ฐ๋ฅํ๋ฉฐ Github์์ ํธ์คํ ํ๋ ๊ฐ์ ์ธ์คํด์ค์ ๊ฒฝ์ฐ ๋ฉ๋ชจ๋ฆฌ ๋ฐ ์ฉ๋ ์ ํ์ด ์กด์ฌํฉ๋๋ค.
Github Action ์ ์ฉ ๋ฐฉ๋ฒ
1. ์๋จ์ ๋ฉ๋ด ์ค Action์ ๋ค์ด๊ฐ๋๋ค.
2.set up a workflow yourself๋ฅผ ํด๋ฆญ
3. ๊ทธ๋ฌ๋ฉด ๋ค์๊ณผ ๊ฐ์ด ymlํ์ผ์ ๋ง๋ค ์ ์๊ฒ ํ๋ฉด์ด ๋์ค๊ฒ ๋ฉ๋๋ค.
์์ ์ค๋ช ๋๋ ธ๋ ์ฉ์ด๋ค์ด ๋ณด์ด๋ค์ : )
Xcodebuild๋ฅผ ์ด์ฉํด Test๊น์ง ํด๋ณด๋ ์ฝ๋๋ก ์์ฑํ๋ฉด ์๋์ ๊ฐ์ต๋๋ค.
(์ฃผ์์ผ๋ก ๊ฐ๋จํ ์ค๋ช ์ ๋ณด์ถฉํ๊ฒ ์ต๋๋ค)
# Actions ํญ์ ํ์๋ Workflow ์ด๋ฆ
name: CI
# Workflow๋ฅผ ์คํ์ํค๊ธฐ ์ํ Event ๋ชฉ๋ก
on: # ํธ๋ฆฌ๊ฑฐ
# ํ๋จ ์ฝ๋์ ๋ฐ๋ผ develop ๋ธ๋์น์ Push ๋๋ Pull Request ์ด๋ฒคํธ๊ฐ ๋ฐ์ํ ๊ฒฝ์ฐ์ Workflow๊ฐ ์คํ
push:
branches: [main]
# ํน์ ํ Branch์ ํธ์ฌ๋์์ ๋ ์ฌ์ฉํ๋ ค๋ฉด ๊ฐ๋ น feature/*๋ก ์์ฑํ๋ฉด ๋จ
pull_request:
branches: [main]
# ํด๋น ์ต์
์ ํตํด Actions ํญ์์ Workflow๋ฅผ ์คํ
workflow_dispatch:
# Workflow์ ํ๋ ์ด์์ Job
jobs:
# Job ์ด๋ฆ์ผ๋ก, build๋ผ๋ ์ด๋ฆ์ผ๋ก Job์ด ํ์
build:
# Runner๊ฐ ์คํ๋๋ ํ๊ฒฝ์ ์ ์
runs-on: macos-latest # iOS์ ๊ฒฝ์ฐ, ๋น์ฐํ macOS์์ ์คํํด์ผ๊ฒ ์ฅฌ~
# build Job ๋ด์ step ๋ชฉ๋ก
steps:
# uses ํค์๋๋ฅผ ํตํด Action์ ๋ถ๋ฌ์ด
# ์ฌ๊ธฐ์์๋ ํด๋น ๋ ํฌ์งํ ๋ฆฌ๋ก check-out ๋ฐ ๋ ํฌ์งํ ๋ฆฌ์ ์ ๊ทผํ ์ ์๋ Action์ ๋ถ๋ฌ์ด.
- uses: actions/checkout@v2
# ์คํ๋๋ ์ปค๋งจ๋์ ๋ํ ์ค๋ช
์ผ๋ก, Workflow์ ํ์
- name: Build
run: echo Hello, world!
# ํ๋์ ์ปค๋งจ๋๊ฐ ์๋ ์ฌ๋ฌ ์ปค๋งจ๋๋ ์คํ ๊ฐ๋ฅ
- name: Run tests
run: |
# Xcodebuild๋ฅผ ํตํด์ ํด๋น ํ๋ก์ ํธ๋ฅผ ํ
์คํธ ํ ์ ์์ต๋๋ค!
xcodebuild test -project "$XC_PROJECT" -scheme "$XC_SCHEME" -destination 'platform=iOS Simulator,name=iPhone 13'
# uses: Repository์ ์ฝ๋ ๋ณต์ฌ๋ณธ์ ๋ง๋๋ ๋ช
๋ น์ด
# name: ์์
์ ์ด๋ฆ
# run: ์ปดํ์ผ๋ฌ๋ก ๋น๋ํ๋ ๋ช
๋ น์ด
์์ฑ ์ดํ ์ปค๋ฐ ํน์ ํธ์๋ฅผ ํ๊ฒ ๋๋ฉด
Action์์ ์ ์๋ํ๋์ง ๋ฌธ์ ๊ฐ ์์๋์ง ํ์ธํ ์ ์์ ๊ฒ๋๋ค : )
4. ์ ๋์ํ๋์ง ํ์ธ!
๋น๋ ์ดํ ์๋์ ๊ฐ์ ์ด๋ฏธ์ง๋ผ๋ฉด ์์ฑํ Action์ด ์ ๋์ํ ๊ฒ๋๋ค!
์ด๋ ๊ฒ ๊ฐ๋จํ๊ฒ ๊ฐ๋ ๊ณผ ํ ์คํธ ์ ๋๊น์ง๋ง ์งํํ ์ ์๊ฒ ์์๋ดค์ต๋๋ค.
๋ค์ ํฌ์คํ ์์๋ TestFlight์ ๋ฐฐํฌํ๋ ๊ณผ์ ๊ณผ ์ ๊ฐ ๊ฒช์๋ ์ด์์ ๋ํ ํธ๋ฌ๋ธ ์ํ ์ ์ ๋ฆฌํด ๋ณด๊ฒ ์ต๋๋ค ~
๊ทธ๋ผ ์ด๋ง ๐๐ป ๐๐ป
[ TestFlight์ ๋ฐฐํฌํ๊ธฐ ์ํ ์ค๋น์ด๋ ํฌ์คํ ๐ง๐ป๐ป ]