Image
CI\CD/GitHub Actions

[GitHub Actions] upload-artifact Action 사용해 결과 파일 다운로드 가능하게 만들기

이전 시간까지의 내용

이전 시간에서 우리는 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 라 불리는 액션이다.

 

 

GitHub - actions/upload-artifact

Contribute to actions/upload-artifact development by creating an account on GitHub.

github.com

 

이 액션은 특정한 폴더 혹은 파일을 업로드 시켜준다.

 

따라서 아래와 같이 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에 업로드 하는 방법은 다루지 않는다.

반응형

 

이 글의 저작권은 '조세영의 Kotlin World' 에 있습니다. 글, 이미지 무단 재배포 및 변경을 금지합니다.

 

 

Kotlin, Android, Spring 사용자 오픈 카톡

오셔서 궁금한 점을 질문해보세요!
비밀번호 : kotlin22

open.kakao.com