본 포스팅에서는 Bitbucket 환경에서 Pipeline 기능을 사용하여 Android APK를 빌드하고 이를 Bitbucket Downloads 영역에 업로드하는 것을 다루고자 합니다.

젠킨스 CI 환경을 구축하는 방법도 있겠지만, 이미 Bitbucket을 사용하고 있다면 Bitbucket에서 제공하는 Pipeline 기능을 이용해보는 것도 좋겠다고 생각하여 찾아보게 되었습니다.


App password 생성

우선 App password를 생성해야 합니다.
왼쪽 하단 본인 프로필 아이콘 클릭 > Bitbucket settings > App passwords

왼쪽 하단 본인 프로필 아이콘 클릭 > Bitbucket settings
App passwords 클릭
Create app password 클릭
Repository에 대해 Read/Write 권한 부여

라벨 명을 적고 Repository에 대해 Read/Write 권한을 주고 생성합니다.
Create 버튼을 클릭하면 password가 생성되는데, 이 password는 다시는 볼 수 없으므로 반드시 안전한 곳에 따로 기록하시기 바랍니다.

Pipeline 기능 활성화

다시 Repository로 돌아와 왼쪽 메뉴 중 Pipelines를 선택합니다.
그럼 아래와 같이 Pipeline을 처음 구축하는 화면이 나옵니다.

bitbucket-pipelines.yml 파일 작성

위 화면 아래 쪽을 보면 bitbucket-pipelines.yml 파일을 편집할 수 있는 에디터 화면이 있습니다. 거기에 아래와 같이 작성해주세요.

image: mingc/android-build-box:latest
pipelines:
  default:
    - step:
        caches:
          - gradle

        script:
          # Build apk
          - chmod a+x ./gradlew
          - ./gradlew assembleDebug

그리고 commit 버튼을 눌러 bitbucket-pipelines.yml 파일을 올리게 되면 Pipeline이 구동하게 됩니다. 아마 대략 아래와 같은 화면을 보실 수 있습니다.

caches의 경우는 gradle로 받은 라이브러리들을 캐싱하는 옵션으로 보입니다. 빌드 시간 단축을 위해 캐시를 해두는 편이 좋을 것 같습니다.

script에 하고 싶은 작업을 작성하게 되는데, 먼저 gradlew에 권한을 부여한 뒤 assembleDebug를 통해 빌드하도록 하였습니다.

Bitbucket Downloads에 빌드한 APK 파일 업로드

빌드만 하는 것으로 끝내기는 조금 아쉽고, 빌드한 APK 파일을 팀원들에게 공유하기 위해 Downloads에 올려보겠습니다. Downloads는 아래와 같이 Bitbucket에서 기본적으로 제공하는 저장소(?)라고 보시면 됩니다. 무한정 올릴 수는 없고 용량 제한이 있으니 자세한 건 직접 확인하시기 바랍니다.

bitbucket-pipelines.yml을 아래와 같이 수정하세요.

image: mingc/android-build-box:latest
pipelines:
  default:
    - step:
        caches:
          - gradle

        script:
          # Build apk
          - chmod a+x ./gradlew
          - ./gradlew assembleDebug

        artifacts:
          - app/build/outputs/apk/debug/*.apk

    - step:
        script:
          # Saving artifact
          - curl -X POST --user "${BB_AUTH_STRING}" "https://api.bitbucket.org/2.0/repositories/${BITBUCKET_REPO_OWNER}/${BITBUCKET_REPO_SLUG}/downloads" --form files=@"app/build/outputs/apk/debug/app-debug.apk"

먼저 step이 하나 더 추가되었습니다. 첫 번째 step은 빌드를 돌리는 step이며 이것이 완료되면 두 번째 step이 수행됩니다. 두 번째 step에서는 첫 번째 step의 결과물을 Bitbucket Downloads 영역에 업로드 하는 기능을 수행하게 됩니다.

첫 번째 step 하단에 artifacts라는 것이 추가되었습니다. script를 돌린 결과물을 지정하는 것으로 보이며, 두 번째 step에서 사용하기 위해 저장하는 것으로 보시면 됩니다. 아래와 같이 우측 화면 상단에 Artifacts 탭이 있고 여기서 해당 apk를 받을 수 있습니다.

두 번째 step에서는 bitbucket의 REST API를 사용하여 업로드를 하게 되는데, 이때 3가지 정보가 필요합니다.

  1. API 사용하기 위한 인증 정보
  2. Repo owner 이름
  3. Repo 이름

Repo owner 이름과 Repo 이름은 별도 작업이 필요하지 않으며, 아래와 같이 기본적으로 제공되는 변수를 사용하면 됩니다.

${BITBUCKET_REPO_OWNER}
${BITBUCKET_REPO_SLUG}

BB_AUTH_STRING 정의

이제 API 사용을 위한 인증 정보를 만들도록 하겠습니다. 가장 처음에 만들었던 App password를 사용할 때가 되었군요.

아래와 같이 Settings > Repository variables 화면에 들어가 인증 정보를 입력합니다.

Name에는 BB_AUTH_STRING을, Value에는 사용자 이름과 앞서 만들었던 App password를 아래와 같이 조합하여 적습니다.

userid:appPassword

BB_AUTH_STRING은 다른 것으로 변경해도 무방하나 변경하게 되면 bitbucket-pipelines.yml 파일의 변수 명도 같이 변경해야 합니다.

그리고 Secured를 체크하여 생성합니다.

이제 해당 Repo에 커밋을 해보시면 Pipeline이 돌아가는 것을 확인할 수 있습니다.
그리고 빌드가 완료되면 Downloads에 빌드된 APK가 업로드되는 것도 확인할 수 있습니다.


0 Comments

댓글 남기기

이메일은 공개되지 않습니다. 필수 입력창은 * 로 표시되어 있습니다