github의 action 을 사용할때 , 환경변수등을 설정할 필요가 있습니다.
이때 활용 할 수 있는 것이 이와 같습니다.
특히 android release 빌드를 할때는 keystore 가 반드시 필요한데, 이 keystore는 외부에 노출하면 안되는 것이라 참 난감합니다.
그런데 이를 지원해줄 수 있는 github의 secret variable 저장 기능이 있습니다.
이를 한번 알아봅시다.!
유사한 내용이지만 둘다 모두 필요한 내용이 있어서 정리를 위해 링크 남깁니다.
https://www.droidcon.com/2023/09/08/build-sign-and-create-release-build-using-github-actions/
위 내용들이 mac에서 셋업을 하면서 보니까. 약간 차이점들이 있었습니다. 그리고 오류도 좀 있고요.
저도 순서를 하나씩 짚어보면서 정리해보도록 하겠습니다.
1. github 에서 action 과 과련한 secret 파일들을 설정할 수 있는 부분이 있습니다.
github/[내프로젝트]/settings 에서 Secrets and variables 메뉴가 있습니다.
Secrets에 secret들을 하나씩 추가해봅시다.
KEYSTORE_BASE_64
RELEASE_KEYSTORE_ALIAS
RELEASE_KEYSTORE_PASSWORD
RELEASE_KEY_PASSWORD
이렇게 4가지를 차례대로 만들 예정입니다.
이미 키가 있다는 전제하에 설명합니다.(키 만드는 것은 여기서 확인!)
KEYSTORE_BASE_64
사용하고 있는 key file이 있으실텐데 해당 key file을 사용하시면 됩니다.
저는 여기서 key.jks 라는 이름의 파일 이라고 가정하고 진행합니다.
base64 인코딩 하기
github의 secret 에는 파일을 추가 할 수 없습니다. 따라서 text를 이용해야 합니다. 때문에 key 파일을 문자열로 변환하기 위해 base64 인코딩합니다.
형식 : base64 -i <in-file> -o <outfile>
$ base64 -i key.jks -o keystore-b64.txt
이렇게 keystore-b64.txt를 열어서 해당 text를 KEYSTORE_BASE_64 에 저장합니다.
나머지 RELEASE_KEYSTORE_ALIAS / RELEASE_KEYSTORE_PASSWORD / RELEASE_KEY_PASSWORD
들은 키를 만들때 사용했던 alias, keystore passowrd, key passoword 를 적어주면 됩니다.
2. build.gradle 을 수정합니다.
이제 gradle 파일을 수정하러 가야 합니다.
android/app/build.gradle
signingConfigs{
releaseWithSignedKey {
storeFile file("../keystore.jks")
storePassword System.getenv("RELEASE_KEYSTORE_PASSWORD")
keyAlias System.getenv("RELEASE_KEYSTORE_ALIAS")
keyPassword System.getenv("RELEASE_KEY_PASSWORD")
}
}
:
buildTypes {
release {
signingConfig = signingConfigs.releaseWithSignedKey
System.out.println("signingConfig:$signingConfig")
}
}
signingConfigs 를 추가하고 buildType의 release에서 이 정보를 이용하도록 설정합니다.
자! 코드를 보셔서 아시겠지만, 로컬에서 release로 빌드를 하려면 어떻게 해야 할까요?
환경변수에 RELEASE_KEYSTORE_ALIAS,RELEASE_KEYSTORE_PASSWORD,RELEASE_KEY_PASSWORD 를 설정 해야 겠죠.
이건 쉬우니까 구글링 해서 찾어보시면 됩니다.
3. github action 의 workflow 수정 하기.
github action에서 핵심은 base64로 encoding 된 key를 다시 keystore.jks로 변환하여 사용하는 것과 환경 변수 세팅입니다.
steps:
- name: Checking out branch
uses: actions/checkout@v3
- name: Setup Java
uses: actions/setup-java@v3
with:
distribution: 'zulu' # See 'Supported distributions' for available options
java-version: '17'
cache: 'gradle'
- name: Decode Keystore
env:
ENCODED_STRING: ${{ secrets.KEYSTORE_BASE_64 }}
RELEASE_KEYSTORE_PASSWORD: ${{ secrets.RELEASE_KEYSTORE_PASSWORD }}
RELEASE_KEYSTORE_ALIAS: ${{ secrets.RELEASE_KEYSTORE_ALIAS }}
RELEASE_KEY_PASSWORD: ${{ secrets.RELEASE_KEY_PASSWORD }}
run: |
echo $ENCODED_STRING > keystore-b64.txt
base64 -d -o keystore.jks < keystore-b64.txt
- name: Setup flutter
uses: subosito/flutter-action@v2
with:
flutter-version: '3.24.1'
- run: flutter pub get
- run: flutter build apk --debug
위와 같이 Decode Keystore를 actions/setup-java 다음에 추가해줍니다.
바로 아래 항목입니다.
- name: Decode Keystore
env:
ENCODED_STRING: ${{ secrets.KEYSTORE_BASE_64 }}
RELEASE_KEYSTORE_PASSWORD: ${{ secrets.RELEASE_KEYSTORE_PASSWORD }}
RELEASE_KEYSTORE_ALIAS: ${{ secrets.RELEASE_KEYSTORE_ALIAS }}
RELEASE_KEY_PASSWORD: ${{ secrets.RELEASE_KEY_PASSWORD }}
run: |
echo $ENCODED_STRING > keystore-b64.txt
base64 -d -o keystore.jks < keystore-b64.txt
여기까지 해주면 action 에서 release build 테스트를 위한 환경이 끝났습니다.
깃 커밋하시면 자동으로 릴리즈 빌드를 시험해보실 수 있습니다.
#해피코딩
'git' 카테고리의 다른 글
[git] commit되어있는 파일의 변경 사항을 무시하는 방법 (0) | 2024.04.24 |
---|---|
[git] git reviewer 자동으로 추가하기 (0) | 2019.02.25 |
[git] git, git hub 사용을 위한 간단한 팁들 (0) | 2017.08.03 |
git 사용시 수정사항 backup script (0) | 2014.02.13 |