본문 바로가기

Android/CI CD

[Github Actions] Github Actions를 사용해보자 - 3. APK 생성 및 업로드

728x90

본 게시글은 이전 게시글에 이어서 작성된 부분입니다.

2022.03.23 - [Android/CI CD] - [Github Actions] Github Actions를 사용해보자 - 1. 기본 개념 정리

2022.03.24 - [Android/CI CD] - [Github Actions] Github Actions를 사용해보자 - 2. 기본 Setting

 

[Github Actions] Github Actions를 사용해보자 - 2. 기본 Setting

본 게시글은 이전 게시글에 이어서 작성된 부분입니다. 2022.03.23 - [Android/CI CD] - [Github Actions] Github Actions를 사용해보자 - 1. 기본 개념 정리 [Github Actions] Github Actions를 사용해보자 - 1...

heegs.tistory.com

 

이번에는 Github Action을 사용하여 APK를 생성하고 이것을 Workflow에서 다운로드할 수 있도록 Upload 하는 작업에 대하여 알아 볼 예정이다.

해당 작업을 확인하기 위해 커밋을 시도했을 때, Actions에서 빌드를 수행하는 시간이 짧으면 2분 30초, 길면 6분의 시간까지 걸려서 사실 빌드를 기다리는 시간이 더 오래 걸렸던 것 같다.


우선 APK를 생성하고 업로드 하는 부분에 대하여,

어떠한 코드를 작성해야 하는지 찾아보자.

 

- name: Build debug APK
   run: ./gradlew assembleDebug
- name: Upload APK
   uses: actions/upload-artifact@v1
   with:
       name: app
       path: app/build/outputs/apk/debug

 

assembleDebug를 사용하여 debug apk를 생성하고, actions/upload-artifact를 사용하여 지정된 path에 있는 파일을 업로드할 수 있게 된다.

 

여기서, 필자는 이전 글에서 개인 환경에 따라 경로가 달라질 수 있음을 인지했다.

app/~ 으로 되어있지만 필자의 예제에서는 app모듈을 presentation으로 바꾸어서 사용하였다.

따라서, app으로 선언되어있는 부분을 presentation으로 변경하여 작성한다.

 

- name: Build debug APK
   run: ./CleanArchitectureStudy/gradlew assembleDebug --stacktrace
- name: Upload APK 
   uses: actions/upload-artifact@v3
   with: 
       name: app 
       path: presentaion/build/outputs/apk/debug

 

필자는 따라서 이처럼 yml파일을 수정하여서 빌드를 해보았다.

--stacktrace를 넣은 이유는, 에러가 발생했을 때 에러 내용에 대해서 확인하기 위하여 추가한 부분이므로 없어도 무관하다.

 

 

이쯤 되면 한 번에 빌드가 성공할 것이라고 기대조차 하지 않게 된다.

에러 내용을 찾아보니 clean 키워드를 넣어보란다.

clean assembleDebug 를 사용하게 되면, assembleDebug 작업이 이루어지기 전에 clean을 통해 build 디렉토리를 삭제하고 진행한다는 의미이다.

즉, 빌드 디렉토리에서 뭔가 문제가 있는 경우에도 해당 에러가 발생하는 것으로 추정된다.

(*추가 : 정상적으로 빌드가 되고 나서 한번 더 확인해 보았는데, Clean으로 작업을 한번 진행한 후 Clean을 지우고 사용해도 문제없이 APK 빌드가 되는것을 확인했다.)

 

 

역시 안된다.

그래서 구글링을 하다가, Github Community Forum에서 다음과 같은 글을 발견했다.

 

해당 글을 확인해 보면 필자랑 거의 동일한 프로젝트 구조를 갖고있는 사람이 정상적으로 동작이 안 하고 있었고, 답글을 보면 프로젝트 구조가 한 Depth 더 들어가 있으면 안된다는 글을 확인할 수 있었다.

 

 

즉, root 프로젝트에 app 모듈이 존재해야 한다. 이 말은 필자의 프로젝트로 생각하면 presentation 모듈이 root 프로젝트에 존재해야 한다는 것이다.

물론 이것이 정확한 문제가 아니고 경로 상의 문제 때문일 수 있지만, 우선 두 번째 게시글에서도 볼 수 있었듯이 다른 예제와 프로젝트 구조가 다르기 때문에 이것을 동일하게 맞춰주도록 하였다.

 

그렇게 하고 다시 커밋을 하여 해당 Action이 실행되었는데,

 

 

APK에 대한 빌드는 성공하고 이번엔 업로드 쪽에서 문제가 발생하였다.

일단, 오류가 발생했지만 해당 부분은 github에서 지원하는 actions을 사용하는 부분이기 때문에 해당 github부터 먼저 확인을 해보았다.

 

 

아, 마지막에 /를 안 붙여서 발생한 것 같다.

따라서 /를 추가하고 커밋을 해보았다.

 

 

정상적으로 빌드가 되었음을 확인할 수 있었다.

하지만, Artifacts 부분을 보자.

정상적으로 빌드는 되지만, 업로드된 파일이 있어야 할 곳에 보이지 않는다.

 

 

Warning을 확인해보니, 역시나 여기서도 업로드할 파일이 존재하지 않는다고 업로드가 되지 않는다.

 

필자는 이미 이전 게시글에서 경로가 맞지 않았을 때 오류가 발생할 수 있음을 정확하게 인지하고 있기 때문에,

당황하지 않고 경로에 대해서 알아보려고 하였다.

 

그런데, VM 환경에서 apk가 생성되는 경로는 어떻게 파악을 해야하는가?

여기서 필자는 APK 파일도 업로드가 가능하니까, apk파일을 만들고 프로젝트 파일 자체를 업로드해서 확인해보면 된다.라고 생각하였다.

 

다시 github Action에서 upload actions가 작성된 github를 확인해 보았다.

와일드카드를 사용하여 간단하게 파일 자체를 업로드할 수 있는 것으로 보인다.

 

- name: Upload APK 
   uses: actions/upload-artifact@v3
   with: 
       name: apk-artifact 
       path: ./*

 

이렇게 yml파일을 수정하고 업로드해본다.

정상적으로 빌드가 되었고, 설레는 마음으로 업로드된 파일을 확인하러 들어가 보았다.

 

 

정상적으로 설정한 이름으로 파일이 업로드된 것을 확인할 수 있었다.

 

이제 압축돼서 올라간 해당 프로젝트 파일을 압축 해제하여 debug-apk 파일이 들어간 위치를 확인해준다.

 

presentaion/build/outputs/apk/debug/presentaion-debug.apk

 

이제 다시 yml 파일로 돌아가서, path 부분에 해당 경로를 넣어주도록 한다.

 

- name: Upload APK 
   uses: actions/upload-artifact@v3
   with: 
       name: apk-artifact
       path: ./presentaion/build/outputs/apk/debug/presentaion-debug.apk

 

이처럼 수정한 후에 Commit 하여 workflow가 동작하도록 확인해보면, 

 

 

정상적으로 파일이 올라간 것을 확인할 수 있고, 다운로드를 수행해보면 debug.apk 파일이 다운로드되는 것을 확인할 수 있다.


이번에는 이전에 경험했던 문제 덕분에 좀 더 빠르게 성공적으로 적용할 수 있었다.

 

테스트용으로 작업 중인 것이라 Slack과 같은 곳에 연동을 시키거나 하지 않았는데,

이처럼 새로 Commit 된 버전에 따른 apk를 바로바로 다운로드할 수 있다는 것만으로도 많은 도움을 줄 것이라고 생각한다.

QA나 앱 빌드가 필요한 곳에 해당 github 주소를 알려주고, 알아서 받으라고 말만 한다면 별도로 빌드를 해주거나 그러한 프로세스를 생략할 수 있으니 말이다.

 

다음 Github Actions에 대한 게시글은 여기서 조금 더 확장시켜 붙일 수 있는 무언가를 찾아보고, 붙여볼 예정이다.

728x90