GitHub Action으로 자동화 할 것
- CI/CD
- 테스트 코드 자동화
- keystore 관리
- tag/release 버전 자동화
CI, 테스트코드, keystore, tag/release 버전 자동화
과정
keystore 파일을 GitHub Action으로 처리할 것이다
GitHub Repository Setting의 Secrets and variables의 Actions로 이동한다
이곳에 keystore 정보들을 입력할 것이다
New repository secret에 store의 store password, key alias, key password를 만들어준다
keystore 파일도 base 64의 형식으로 secret에 넣어줄건데, 파일을 넣을 수 없기 떄문에 base64 -i key.jks -o keystore-b64.txt 를 터미널에 입력해서 텍스트 파일을 만든후 내용을 넣으면 된다
그 후 Build Gradle에 이걸 이용하기 위한 코드를 넣을 것이다
signingConfigs{ create("release") { storeFile = file("release.keystore") storePassword = System.getenv("STORE_PASSWORD") keyAlias = System.getenv("KEY_ALIAS") keyPassword = System.getenv("KEY_PASSWORD") } }
storePassword, keyAlias, keyPassword는 모두 secret에 이름과 동일시 해야한다
GitHub Repository 에서 Action 탭에서 Android 검색
Android CI를 Configure
받아온android.yml을 수정하여 작성해준다.
name: Android CI #GITHUB_TOKEN이 저장소 내 파일을 생성, 수정, 삭제할 수 있는 **쓰기** 권한을 부여받는다 permissions: contents: write #master 브랜치에 대한 push와 pull_request 이벤트가 발생할 때 Workflow가 실행된다. on: push: branches: [ "master" ] pull_request: branches: [ "master" ] jobs: build: #ubuntu-latest환경에서 작업을 시작한다. runs-on: ubuntu-latest #저장소의 최신 코드를 가져온다. #Temurin 배포판의 JDK 17을 설치하여 안드로이드 빌드 환경을 구성한다. #cache: grdle 은 Gradle 빌드에 필요한 의존성, 캐시 파일, 그리고 기타 빌드 관련 데이터를 저장해 두는 역할 steps: - name: 체크아웃 (Checkout) uses: actions/checkout@v4 with: fetch-depth: 1 - name: 셋업 JDK 17 uses: actions/setup-java@v4 with: java-version: '17' distribution: 'temurin' cache: gradle #GitHub Secrets에 저장된 base64 인코딩된 keystore 파일(KEYSTORE_B64)을 디코딩하여 release.keystore 파일로 app에 저장한다 - name: 디코드 Keystore run: | echo "$KEYSTORE_BASE_64" | base64 --decode > app/release.keystore env: KEYSTORE_BASE_64: ${{ secrets.KEYSTORE_BASE_64 }} - name: Gradlew에 대한 실행 권한 부여 run: chmod +x gradlew - name: 유닛테스트 실행 run: ./gradlew test --parallel #env 섹션에선 secret에서 keystore의 정보를 읽어온다 #이렇게 빌드된 bundle은 runner 내부에만 존재했다가 사라진다 - name: app 빌드 run: ./gradlew :app:bundleRelease --parallel env: STORE_PASSWORD: ${{ secrets.STORE_PASSWORD }} KEY_ALIAS: ${{ secrets.KEY_ALIAS }} KEY_PASSWORD: ${{ secrets.KEY_PASSWORD }} - name: commit 메시지에서 버전 추출(제목에서 x.y.z 부분만) id: extract_version run: | subject=$(echo '${{ github.event.head_commit.message }}' | head -n 1) version=$(echo "$subject" | grep -E -o '[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}') echo "version=$version" >> $GITHUB_OUTPUT #Release 노트를 작성해준다 #github.event_name == 'push'는 push일때만 작동하겠다는 뜻이다 #위에서 가져온 버전으로 Tag와 Release를 지정해주고 commit 메시지로 내용을 채운다 - name: Release 노트 생성 uses: actions/create-release@v1 if: github.event_name == 'push' id: create_release env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} with: tag_name: ${{ steps.extract_version.outputs.version }} release_name: ${{ steps.extract_version.outputs.version }} body: ${{ github.event.head_commit.message }} #위에서 만들어진 aab파일을 release 노트에 첨부한다 - name: Bundle 파일 릴리즈에 첨부 if: github.event_name == 'push' uses: actions/upload-release-asset@v1 env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} with: upload_url: ${{ steps.create_release.outputs.upload_url }} asset_path: ./app/build/outputs/bundle/release/app-release.aab asset_name: app-release.aab asset_content_type: application/vnd.android.package-archive
CD 자동화
- 추가예정
반응형
'AI,Notion,GitHub > GitHub' 카테고리의 다른 글
Library 배포용 Apache License 받기(Android Studio) (0) | 2025.02.18 |
---|---|
Git-Flow (0) | 2025.02.04 |