Git & Github

[Git & Github] Github Action์œผ๋กœ TestFlight ์—…๋กœ๋“œ ํ•ด๋ณด๊ธฐ(1)

๊ฒฝํ‘ธ 2022. 6. 14. 19:59
๋ฐ˜์‘ํ˜•

์•ˆ๋…•ํ•˜์„ธ์š”~

 

์ด๋ฒˆ ํฌ์ŠคํŒ…์—์„œ๋Š” Github Action์— ๋Œ€ํ•œ ์„ค๋ช…๊ณผ Github์—์„œ ์–ด๋–ป๊ฒŒ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š”์ง€ ์ž‘์„ฑํ•ด๋ณด๋ ค๊ณ  ํ•ฉ๋‹ˆ๋‹ค.

 

Github Action ์ด๋ž€?

- Github ์ €์žฅ์†Œ๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ์†Œํ”„ํŠธ์›จ์–ด ๊ฐœ๋ฐœ Workflow๋ฅผ ์ž๋™ํ™”ํ•  ์ˆ˜ ์žˆ๋Š” ๋„๊ตฌ์ž…๋‹ˆ๋‹ค. Github ๋‚ด๋ถ€์—์„œ ํ”„๋กœ์ ํŠธ๋ฅผ ๋นŒ๋“œ, ํ…Œ์ŠคํŠธ, ๋ฆด๋ฆฌ์ฆˆ ๋˜๋Š” ๋ฐฐํฌ๋ฅผ ์ง€์›ํ•˜๋Š” ๊ธฐ๋Šฅ์œผ๋กœ, Github์—์„œ ์ œ๊ณตํ•˜๋Š” CI/CD ๋„๊ตฌ๋ผ๊ณ  ์ƒ๊ฐํ•˜๋ฉด ํŽธํ•  ๊ฒƒ ๊ฐ™๋„ค์š”.

 

๊ทธ๋Ÿฌ๋ฉด ์–ด๋–ป๊ฒŒ Github Action์ด ์ด๋ฃจ์–ด์ ธ ์žˆ๋Š”์ง€ ํ™•์ธํ•ด ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

 

Github Action์˜ ๊ตฌ์„ฑ์š”์†Œ

๊ตฌ์„ฑ๋„(์ถœ์ฒ˜: https://ios-development.tistory.com/788 )

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์— ๋ฐฐํฌํ•˜๊ธฐ ์œ„ํ•œ ์ค€๋น„์šด๋™ ํฌ์ŠคํŒ… ๐Ÿง‘๐Ÿป‍๐Ÿ’ป ]

 

[Git & Github] Github Action์œผ๋กœ TestFlight ์—…๋กœ๋“œ ํ•ด๋ณด๊ธฐ(2)

์•ˆ๋…•ํ•˜์„ธ์œ ~ ์ €๋ฒˆ ํฌ์ŠคํŒ…์— ์ด์–ด์„œ TestFlight์— ์–ด๋–ป๊ฒŒ ๋ฐฐํฌํ•  ์ˆ˜ ์žˆ๋Š”์ง€ ์•Œ์•„๋ณด๊ณ  ์—ฌ์œ ๊ฐ€ ๋œ๋‹ค๋ฉด ์ œ๊ฐ€ ๊ฒช์—ˆ๋˜ ์ด์Šˆ์— ๋Œ€ํ•œ ํŠธ๋Ÿฌ๋ธ” ์ŠˆํŒ…๋„ ํ•จ๊ป˜ ๊ธฐ๋กํ•ด๋ณผ๊ฒŒ์š”! ์ž์ž ์ €๋ฒˆ ํฌ์ŠคํŒ…์—์„œ Github Action์œผ

pooh-footprints.tistory.com

 

๋ฐ˜์‘ํ˜•