개발자 블로그
Azure DevOps Pipeline - 4. 배포 자동화 본문
✔ Firebase 관련 안내 이 예제에서는 배포 도구로 Firebase App Distribution을 사용합니다. 아직 Firebase 구성을 시작하지 않았다면 먼저 Firebase 프로젝트 설정을 완료해주세요. https://console.firebase.google.com/ |
✔ App Distribution 관련 안래 Firebase App Distribution을 사용하기 위해서는 몇 가지 설정을 먼저 진행해주셔야 합니다. 여기서는 해당 절차들에 대해서는 설명하지 않습니다. 자세한 내용은 아래 링크를 참고하세요. ● Firebase App Distrubution 개요 - https://firebase.google.com/docs/app-distribution?hl=ko ● 테스터를 위한 설정 - https://firebase.google.com/docs/app-distribution/android/set-up-for-testing?hl=ko ● Gradle을 사용하여 앱 배포 - https://firebase.google.com/docs/app-distribution/android/distribute-gradle?hl=ko |
✔ 릴리즈 빌드를 위한 gradle signing 설정 릴리즈 빌드를 위해서는 앱 사이닝 절차가 필요합니다. App 수준의 gradle 파일에 signingConfigs를 추가하면 자동으로 사이닝이 됩니다. 아래는 그 예시 코드입니다.
|
배포를 위한 gradle 설정
- 아래 링크를 참고해서 앱 수준의 gradle 파일에 배포 정보를 추가합니다.
firebaseAppDistribution {
releaseNotes="릴리즈 노트"
groups="tester_group_name, another_group_name"
testers="testerA@test.com, testerB@test.com"
}
파이프라인 스크립트 수정
- gradle 설정을 모두 파쳤다면 이제 빌드 파이프라인을 수정할 차례입니다.
- 아래는 수정하기 전 파이프라인 스크립트입니다.
trigger:
- azure-pipelines
pool:
vmImage: 'macos-latest'
steps:
- task: Gradle@2
inputs:
workingDirectory: ''
gradleWrapperFile: 'gradlew'
gradleOptions: '-Xmx3072m -Dorg.gradle.java.home=$(JAVA_HOME_11_X64)'
publishJUnitResults: false
testResultsFiles: '**/TEST-*.xml'
tasks: 'assembleDebug'
- 참고로 브랜치는 "azure-pipelines"라는 이름으로 새로 생성했습니다.
- gradleOptions에 "-Dorg.gradle.java.home=$(JAVA_HOME_11_X64)" 옵션은 디폴트로 붙는 옵션은 아닌데, 안드로이드 프로젝트의 gradle 버전이 최신이라면 추가해줘야 합니다.
- 위 옵션과 과련해서 더 자세한 내용은 아래 링크를 참고하세요.
✔ JDK 버전 문제 해결 TODO : 링크 추가 |
- 배포 자동화를 위해서 수정할 내용은 알와 같습니다.
- 릴리즈 버전을 배포하기 위해서 gradle task를 수정
- Firebase에 APK 업로드를 위한 gradle task 추가
- 아래는 위 수정사항을 적용한 파이프라인 스크립트입니다.
trigger:
- azure-pipelines
pool:
vmImage: 'macos-latest'
steps:
- task: Gradle@2
inputs:
workingDirectory: ''
gradleWrapperFile: 'gradlew'
gradleOptions: '-Xmx3072m -Dorg.gradle.java.home=$(JAVA_HOME_11_X64)'
publishJUnitResults: false
testResultsFiles: '**/TEST-*.xml'
tasks: 'assembleMarketRelease appDistributionUploadMarketRelease'
- task의 이름은 gradle에서 설정한 build flavor에 따라 다를 수 있습니다. 자세한 내용은 아래 링크를 참고해주세요.
✔ 빌드 변경 구성 https://developer.android.com/studio/build/build-variants?hl=ko |
- 참고로 전체 gradle task 목록은 아래 명령어로 확인 가능합니다.
./gradlew tasks --all
- 이렇게 파이프라인 수정이 모두 끝났습니다. 하지만 아직 한가지 단계가 더 남아있습니다.
파이프라인 Variable 추가
- Firebase에 APK를 업로드 하기 위해서는 인증 절차가 필요합니다. 자세한 내용은 페이지 상단의 링크에서 확인 가능합니다.
- 이 예제에서는 인증 토큰을 사용한 방법으로 진행합니다.
- 인증토큰 생성을 완료했다면, 해당 값을 파이프라인 Variables에 추가해줘야 합니다.
- YAML 편집 화면에서 상단에 있는 "Variables" 버튼을 클릭합니다.
- 그 다음 아래 이미지처럼 Name 항목에는 "FIREBASE_TOKEN"을 입력하고, Value 항목에는 생성된 인증 토큰 값을 입력합니다.
- "Keep this value secret" 옵션 체크는 선택사항입니다. 해당 체크박스를 체크하게되면 나중에 값을 다시 확인할 수 없습니다. 보안이 요구되는 항목에는 체크를 권장합니다.
- 다만 체크를 하게 되면 명시적으로 환경 변수로 매핑해야 됩니다.
✔ Secret value 안내 To use a secret variable in script, you must explicitly map it as and environment variable. |
- OK 버튼을 누르고, 모든 변경 사항을 저장합니다.
- 저장을 하면 azure-pipelines.yml 파일이 변경되기 때문에 자동으로 트리거되어 파이프라인이 실행되는데, 다음 예제를 위해 일단은 취소시킵니다.
Push를 통해 파이프라인 트리거
- 축하합니다! 빌드 파이프라인 구축이 모두 완료되었습니다.
- 트리거 브랜치("azure-pipelines")에 변경이 발생하면 빌드 파이프라인이 자동으로 동작합니다. 그렇게 되면 수작업으로 APK 파일을 테스터한테 배포할 필요 없이 자동으로 APK 파일이 전달됩니다.
- 트리거링을 위해서는 해당 브랜치에 commit, push, merge 등의 명령을 통해서 변경을 발생시키면 됩니다. 이 예제에서는 push를 사용해보겠습니다.
- Android Studio나 VCS 툴을 사용해서 코드를 수정 한 뒤 해당 브랜치에 push를 해줍니다.
- 저는 간단하게 아래와 같이 gradle 파일을 수정하였습니다.
firebaseAppDistribution {
releaseNotes="Azure DevOps Pipeline Test"
testers="email address here" // 테스터의 이메일 주소를 입력해주세요.
}
- push를 한 뒤 azure에서 파이프라인을 확인합니다.
- 자동으로 빌드 파이프라인이 실행 된 것을 확인 할 수 있습니다.
- 파이프라인 수행이 모두 완료되면 Firebase App Distribution에 들어가서 APK 파일이 정상적으로 업로드 되었는지 확인합니다.
- 릴리즈 노트와 배포 타겟 모두 gradle 파일에서 설정한 대로 정상적으로 배포 된 것을 확인 할 수 있습니다.
- 테스터에게는 Firebase에서 자동으로 메일이 발송됩니다.
- 테스트 앱 설치는 메일에 안내 된 절차대로 진행하면 됩니다.
이걸로 끝?
- 지금까지의 과정을 통해 코드 커밋 한 번으로 테스터에게 자동으로 APK 파일을 전달할 수 있는 환경을 설정하였습니다.
- 하지만 이것은 시작에 불과합니다.
- 지금의 빌드 파이프라인은 런닝 타임이 13분에 달할 정도로 속도가 매우 느립니다. 이 시간이면 지금 제가 쓰고 있는 3년전 i7따리 구형 맥북에서도 진작에 빌드 끝내고 배포까지 한 다음에 커피 한 잔 할 수 있는 시간입니다.
- 이제 이 문제를 개선해보겠습니다.
'프로그래밍 > DevOps' 카테고리의 다른 글
Azure DevOps Pipeline - 5. git 체크아웃 속도 개선 (0) | 2022.08.30 |
---|---|
Azure DevOps Pipeline - 3. YAML로 만들기 (0) | 2022.07.31 |
Azure DevOps Pipeline - 2. GUI(Classic Editor)로 만들기 (0) | 2022.07.31 |
Azure DevOps Pipeline - 1. 시작하기 (0) | 2022.07.31 |
Comments