이전 시간까지의 내용
이전 시간에서 우리는 test를 돌리는 Job과 build를 실행하는 Job을 순서대로 실행하는 방법에 대해 알아보았다.
Test를 실행하는 Job은 다음과 같았고,
test:
runs-on: ubuntu-latest
steps:
- name: Check out Repository
uses: actions/checkout@v3
- name: set up JDK 11
uses: actions/setup-java@v3
with:
java-version: '11'
distribution: 'temurin'
cache: gradle
- name: Grant execute permission for gradlew
run: chmod +x gradlew
- name: Test with Gradle
run: ./gradlew test
Build를 하는 Job은 다음과 같았다.
build:
needs: test
runs-on: ubuntu-latest
steps:
- name: Check out Repository
uses: actions/checkout@v3
- name: set up JDK 11
uses: actions/setup-java@v3
with:
java-version: '11'
distribution: 'temurin'
cache: gradle
- name: Grant execute permission for gradlew
run: chmod +x gradlew
- name: Build with Gradle
run: ./gradlew assembleRelease
하지만 위 빌드에는 문제가 있었다. 바로 ./gradlew assembleRelease를 하면 아래 그림과 같이 build/output 폴더에 apk 파일이 나오게 되는데 이를 확인할 방법이 없는점이다.
이번 시간에는 GitHub Action의 Job Artifacts 기능을 사용해 빌드한 안드로이드 파일을 저장소에 upload 하고 다운로드 가능한 상태로 만드는 방법에 대해 알아볼 것이다.
Job Artifacts를 활용해 빌드 파일 다운로드 가능하게 만들기
나온 파일을 업로드 하는 과정은 매우 복잡하다. 하지만, GitHub Action은 역시 편리하게 나온 결과물을 업로드하고 다운 가능한 상태로 보여주는 아주 편리한 기능을 제공한다. 바로 upload-artifact 라 불리는 액션이다.
이 액션은 특정한 폴더 혹은 파일을 업로드 시켜준다.
따라서 아래와 같이 actions/upload-artifact@v3 를 사용하고, with을 통해 Artifact의 이름을 지정하는 name 프로퍼티와 어떤 폴더를 압축해서 업로드 할 것인지를 결정하는 path 프로퍼티를 지정하면 빌드가 끝나면 자동으로 서버에 업로드되어 다운로드 가능한 상태로 변경된다.
- name: Upload Apk
uses: actions/upload-artifact@v3
with:
name: android-artifact # Artifact 이름
path: app/build/outputs/apk/release # 폴더 지정 : 이 폴더 아래의 모든 파일들이 하나의 artifact로 저장된다.
따라서 위의 build Job 마지막에 위 코드를 추가한 후 커밋을 남겨보도록 하자.
build:
needs: test
runs-on: ubuntu-latest
steps:
- name: Check out Repository
uses: actions/checkout@v3
- name: set up JDK 11
uses: actions/setup-java@v3
with:
java-version: '11'
distribution: 'temurin'
cache: gradle
- name: Grant execute permission for gradlew
run: chmod +x gradlew
- name: Build with Gradle
run: ./gradlew assembleRelease
- name: Upload Apk
uses: actions/upload-artifact@v3
with:
name: android-artifact # Artifact 이름 지정
path: app/build/outputs/apk/release # 폴더 지정 : 이 폴더 아래의 모든 파일들이 하나의 artifact로 저장된다.
그러면 빌드가 다 돌아갔을 때 다음과 같이 나온다.
android-artifact.zip 파일을 다운로드 한 후 열어보면 다음과 같이 파일이 나오는 것을 확인할 수 있다. 위에서 ./gradlew assembleRelease를 실행했을 때 만들어지는 파일들(app-release-unsigned.apk, output-metadata.json) 이 모두 포함된 것을 확인할 수 있다.
* 위 빌드파일은 app을 위한 signing key가 설정되지 않은 apk 파일이다. 이 글의 목적은 결과물을 다운로드 가능하게 만드는 것이기 때문에 signing key를 설정하고 play store에 업로드 하는 방법은 다루지 않는다.