비트라이즈 회원가입 및 프로젝트 생성법은 아래, 이전 게시글에서 확인이 가능합니다.
지금까지 우리는 비트라이즈 회원가입과 함께 프로젝트를 생성해보았다.
하지만 우리는 이 프로젝트를 통해 코드를 어떻게 테스트하고 배포할지에 대한 단계들을 아직 지정해주지 않았기에, 이대로 마무리를 짓는다면 프로젝트 생성 당시 설정한 Default Branch 의 Push 만 트리거 될 것이며, 트리거가 됨에 따라 실행되는 기능 테스트 또한 최소한의 테스트만 진행하게 될 것이다.
그렇기에 우리는 워크플로우를 우리의 입맛에 맞게 뜯어 고칠 필요가 있다.
# 비트라이즈 워크플로우 생성 전 알아야 할 것들
Bitrise - Mobile Continuous Integration and Delivery - iOS & Android Build Automation
app.bitrise.io
이전과 마찬가지로 위의 링크를 타고 Bitrise 로 이동하여 Bitrise CI 를 클릭해보자
Bitrise CI 를 클릭하게 되면 이전과 다른 화면이 보일 것이다.
플랜 설정 이후 프로젝트를 생성했기 때문인데, 이 화면 오른쪽을 잘 보면 우리가 생성한 프로젝트가 존재하는 것을 알 수 있다.
해당 프로젝트를 눌러 다시 한 번 더 내부로 들어가보도록 하자.
프로젝트 내부로 들어가게 된다면 많은 버튼들이 보이게 될 것인데, 우리가 비트라이즈를 사용하면서 가장 많이 활용할 것은 WorkFlows 버튼이다.
비트라이즈는 이 Workflows 에 설정된 Workflow Pipeline 들을 통해 우리의 특정 Repository Branch 를 트리거하여, 자동적으로 CI/CD 를 진행해준다.
물론 현재는 따로 설정해주지 않았으므로 기본값만 존재하니, 워크플로우와 트리거 등을 추가해주기 위해서 Workflows 버튼을 클릭하여 내부로 다시 또 들어가보자.
# WorkFlow
Workflow 내부 모습
내부로 들어오면 현재 Workflow 를 볼 수 있는데, Workflow 는 각 Step 들을 지정하고 실행 순서를 정하여 앱의 테스트 및 배포까지 정상적으로 진행되도록 설정한 자동화 프로세스라고 보면 된다.
기본적으로 생성되어있는 build_apk 워크플로우의 각 스텝에 대한 설명은 다음과 같다.
1. Activate SSH Key : 깃허브에 접근 가능하도록 SSH 키 활성화
2. Git Clone Repository : 레포지토리에서 프로젝트를 클론
3. Install Missing Android SDK Componenet : 찾지 못한 Android SDK 설치
4. Change Android VersionCode and VersionName : 안드로이드 버전코드와 버전네임 변경
5. Android Lint : 안드로이드 린트 검사 실행
6. Android Unit Test : 안드로이드 유닛 테스트 실행
7. Android Build : 안드로이드 빌드
8. Android Sign : 안드로이드 signing 설정 (키스토어 및 AAB, APK 저장 위치 지정)
9. Deploy to Bitrise.io : Bitrise 에 빌드된 앱 파일 배포
하지만 이러한 자동화 프로세스가 실행될 때 몇몇 변수가 사용경우, 중요한 파일이 사용되어야 하는 경우가 존재하기 때문에 이를 처리하기 위한 기능이 추가적으로 필요하다.
# Env Vars
워크플로우 스텝에서 사용되는 변수로 암호화가 필요하지 않는 간단한 데이터를 저장할 때 사용된다.
나의 경우 다음과 같이 빌드할 Module 과 BuildType 들만 지정해놓고, 나머지는 딱히 지정하지 않았다.
Environment 변수의 경우 직접 추가하지 않고, 스텝 내에서도 추가가 가능하다
하지만 이와 달리 스텝 내에서 or 프로젝트 코드 내에서 선언해주는 변수들이 존재하는데 이러한 것들은 Secret 에서 정의를 해줘야한다.
# Secret
Secret 에서는 남들에게는 쉽게 알려져서는 안되는 정보들을 정의한다.
예를 들어 키스토어 정보나 WebHook URL, API KEY 등을 의미한다.
# Trigger
Bitrise Trigger 는 Repository 에서 우리가 Trigger 로 발동시킬 Branch 에 Push, Pull Request, Tag 이벤트가 발생하면 지정한 Workflow 가 실행되게 만든다.
현재는 기본 설정된 값으로 만들어져있는데, Master Branch 에 Push 가 실행되는 경우, 비트라이즈가 이를 트리거로 workflow 중 run_tests 라는 것을 실행시키는 기능이다.
** 왜인지는 모르겠으나 나의 경우 기본 생성된 Trigger 가 정상작동하지 않아 삭제 후 다시 만들었다.
나와 같은 버그가 발생하거나, 새로운 조건을 추가하고 싶은 경우 Add Push Trigger 버튼을 통해 새로운 트리거를 만들 수 있으니 이를 활용하자
이로써 CI/CD 를 위한 모든 기본 설정단계는 끝마쳤다.
단, 플레이스토어 배포를 위해 KeyStore 를 등록해야하는 중요한 작업이 남아있으므로 이를 설명하도록 하겠다.
# KeyStore 등록
안드로이드 APK/AAB 파일 생성을 위해서는 키스토어 등록이 필수적이다.
만약 키스토어가 존재하지 않으면 Android Studio 와 동일하게 빌드 에러가 발생하며, CI/CD 가 불가능하므로 키스토어를 등록해주도록 하자.
다음은 Keystore 를 등록하는 방법이다.
CI 프로젝트에 진입하여 오른쪽 위의 Project Settings 를 클릭한다.
이후 Project Settings - Code Signing으로 이동하고 Android 를 클릭한다음 Add Keystore File 을 눌러 키스토어 파일을 등록한다.
키스토어 파일을 등록하면 위와 같이 BITRISE 자체적으로 구현되는 URL, PASSWORD, ALIAS, KEY_PASSWORD 환경 변수가 생성된다.
이제 키스토어까지 모두 등록을 마쳤으므로 워크플로우를 구현해보도록 하자 !
# Custom Workflow 생성 및 구현하기
이전과 마찬가지로 Bitrise CI -> Project -> WorkFlows 를 클릭한다.
이후 Workflow Editor 에서 워크플로우 이름이 적힌 곳을 클릭하면 위와 같이 Create Workflow 라는 버튼을 볼 수 있게 메뉴가 펼쳐지는데, 이를 클릭하자.
Name 은 마음에 드는대로 짓고, Based On 은 build_apk 로 설정해준다.
새 워크플로우를 생성한다면 위와 같이 구성이 될 것인데, 현재는 build_apk workflow 를 베이스로 설정하여 build_apk 와 동일한 워크플로우로 구성되어 있다.
우리는 워크플로우에 구현되어 있는 스텝들을 이용하여 APK 의 테스트를 진행하고, 빌드하고 배포를 진행하게 된다.
물론 이러한 기본적인 설정들 말고도 추가적인 작업이 필요하므로 몇 가지 스텝을 더 구현하도록 하겠다.
Set Java Version
비트라이즈의 경우 Default 로 돌아가는 Java Version 이 11이기 때문에, 안드로이드 프로젝트에 맞는 자바 버전을 실행해줘야 에러가 발생하지 않는다.
나의 경우 프로젝트에 설정된 Java Version 이 17이기 때문에 Set Java Version 파이프라인을 추가로 설정하고, 17로 설정해주었다.
스텝을 추가하는 법은 아이콘 아래의 + 버튼을 누르면 새로운 스텝 (플러그인) 들을 추가할 수 있게된다.
혹시 순서를 바꾸고 싶은 경우 마우스 왼쪽 버튼을 꾹 눌러서 스텝을 잡은 다음 옮기고 싶은 순서에 놓게 되면 실행 순서가 바뀌게 된다 !
Script
Set Java Version 아래로는 KeyStore 파일을 생성하고 Google Json 파일을 생성할 수 있도록 Script Step 을 추가해주었다.
위 단계의 스크립트를 설명하자면, 이전에 등록한 키스토어 파일의 주소와 환경 변수 BITRISEIO_ANDROID_KEYSTORE_URL 을 추출하여 데이터를 다운로드 한 이후 새로운 환경변수 BITRISE_KEYSTORE_PATH 에 값을 넣어주는 것이다.
이렇게 설정한 이유는 안드로이드 스튜디오 내에서 APK 나 AAB 를 빌드할때는 Build.gradle.kts 에서 키스토어 설정을 해줘야 하는데, Build.gradle.kts 에서 키스토어 설정값들을 지정해주면 이 파일들을 찾을 수 없어 워크플로우 단계에서 Signing Config 에러가 발생하기 때문이다.
나의 경우 안드로이드 스튜디오에서 직접 파일을 생성하는 경우가 있어 환경변수가 존재하면 비트라이즈 변수를, 존재하지 않으면 Local Properties 에 설정된 값을 사용하도록 설정하였다.
이에 대한 자세한 내용은 비트라이즈 배포 시 Signing config 에러 해결법 참조
Build Step 설정
Project Location, Module, Varient 를 각각 설정하자.
값을 설정하는 법은 $ 버튼을 눌러 Env Vars 에서 선언한 값을 가져와 사용하거나 $ 버튼을 눌렀을때 나타나는 + Create 버튼을 클릭하여 바로 생성 후 사용할 수 있다.
Android Sign 설정
안드로이드 AAB/APK 파일 생성시 필요한 서명을 작업한다.
만약 Target SDK 가 30이상이라면 enables apksigner 를 True 로 설정해주고 APK Signature Scheme 는 V2 나 Automatic 로 설정해준다.
Google Play 배포
Google Play 배포를 원하는 경우 + 버튼을 눌러 Google Play Deploy 스텝을 추가한다.
Google Play 에 앱을 자동화 배포하기 위해서는 위에서 요구하는 Service Account Json 파일이 필요하므로 GCP 에서 파일을 생성하고 다운로드 받은 뒤 Project Settings -> Files 에 업로드한 후 설정해준다.
이후 App File Path 는 Android Sign 단계에서 설정한 Path 를 등록해주고 Track 은 Production. Status 는 completed 로 설정해준다.
Track 과 Status 의 경우 자신이 원하는 설정으로 해주면 되는 만큼 내가 설정한 값이 필수는 아니다.
이제 이렇게 모든 설정을 끝마쳤으면 마지막으로 CI/CD 가 성공적으로 마무리 되었다는 알림을 슬랙으로 받을 수 있게 설정해보자
Slack 연동하기
CI/CD 테스트가 끝났다는 것을 슬랙 알림으로 받기 위해서는 사전 설정이 한 가지 필요하다.
해당 설정을 하기 위해 슬랙으로 이동해보자.


슬랙 사이드 바 가장 아래의 앱 추가 버튼을 클릭한 뒤 Incoming WebHooks 라는 것을 추가해주자.
Incoming WebHooks 를 클릭하면 위와 같은 화면이 나오게 되는데, 여기서 채널을 선택해주고 통합 앱 추가를 눌러준다.
이후 수신 웹후크 통합 앱 추가 버튼을 눌러 나오는 URL 을 복사한다.
** 채널 선택을 할 때는 화살표 버튼을 눌러줘야 메뉴가 펼쳐지므로 유의하기 **
다시 비트라이즈로 넘어와 Secrets 메뉴에 들어온다음 Add new 를 클릭해주자.
그리고 위와 같이 변수를 지정해주고 KEY 에는 자신이 사용할 이름을, Value 에는 아까 저장했던 Webhooks Incoming 의 URL 을 등록해준다.
설정이 끝났으면 SAVE 를 눌러준다. (보호하지 않을 것이라면 Protected 를 체크하지 않아도 된다.)
Secret 변수 설정을 끝마쳤으니, Workflow 로 돌아와 Send a Slack Message 스텝을 추가한다.
그리고 위와 같이 Slack Webhook URL 에 아까 설정해뒀던 변수를 넣어준다 ($ 를 클릭하여 설정한 이름으로 검색)
추가로 슬랙 알림을 전송할 채널 이름과 메세지도 정의해주자.
만약 실패에 대한 채널과 메세지 등도 설정하고 싶은 경우 가장 아래로 스크롤을 내리면, 실패 처리에 대한 메뉴가 나오게 되는데 그곳에서 설정하면 된다.
실행
실행이 완료되면 위와 같은 메시지를 슬랙에서 받을 수 있게 된다 !
'프로그래밍 > 안드로이드' 카테고리의 다른 글
[안드로이드] AndroidTest BuildType 에 맞춰 테스트 및 TestBuildType 을 동적으로 변경하기 (0) | 2024.10.04 |
---|---|
[안드로이드] 비트라이즈 배포 시 Signing config 에러 해결 (not found for signing config ..) (2) | 2024.10.04 |
[안드로이드] 비트라이즈 (Bitrise) 를 통해 손쉬운 CI/CD 파이프라인 구축하기 - 1. Bitrise 회원가입 및 프로젝트 생성 (1) | 2024.10.03 |
[안드로이드] CI/CD 가 무엇인지 빠르게 알아보기 (0) | 2024.10.02 |
[Android] 안드로이드 10초만에 한 프로젝트의 앱을 빌드 타입에 따라 나눠 설치하는 방법 (0) | 2024.10.01 |