Github Actions
프로젝트의 Workflow를 쉽게 구성할 수 있도록 하는 Github의 기능.
목표
- 테스트 자동화
- 빌드 자동화
- 원격 저장소(s3)에 Artifacts 파일 업로드
- Slack Notification
Github Secrets
원격 레포지토리에 업로드 할 수 없는 소스 코드를 Github Actions에서 사용하기 위함.
- 안드로이드 빌드 패스워드 (KEY_PASSWORD, UPLOAD_PASSWORD)
- 안드로이드 릴리즈 키
- AWS 정보
- Slack Webhook Endpoint
테스트 자동화
jobs:
install-and-test:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- name: Install npm dependencies
run: |
yarn install && npx jetify
- name: Build typescript & run all tests
run: |
yarn build && yarn test --forceExit --detectOpenHandles
yarn
,npm
,npx
등의 패키지 관리 라이브러리는 기본적으로 설치되어 있음- Actions 환경에서 테스트 실행 후 종료되지 않는 이슈가 발생한다면
--forceExit --detectOpenHandles
옵션을 추가하여 실행할 것
빌드 자동화
- 의존성 설치
build-android:
needs: [install-and-test]
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- name: Install npm dependencies
run: |
yarn install && npx jetify
needs
에 본 작업 실행 전 필요한 작업을 작성함 (동기적으로 실행)
- Release Key 발급
- name: Generate Release Key
run: |
echo "$" | base64 -d > android/app/app-key.keystore
xx.keystore
파일은 깃허브에 업로드 하지 않기 때문에 파일을 base64로 전환한 후 Github Secrets로 등록하여 사용 ($
)
- Build
- name: Build Android Release
run: |
cd android && ./gradlew assembleRelease -PAPP_STORE_PASSWORD='$' -PAPP_KEY_PASSWORD='$' && cd ..
- 안드로이드 빌드 패스워드 2가지를 Github Secrets로 등록하여 사용
- Branch 이름 추출
- name: Extract branch name
shell: bash
run: echo "##[set-output name=branch;]$(echo ${GITHUB_REF#refs/heads/})"
id: extract_branch
- S3 업로드 시 파일 이름에 작업 브랜치 이름을 사용하기 위하여
yml
에key
로 등록한 후 사용함
- S3 업로드
- name: Upload artifact to S3
uses: shallwefootball/upload-s3-action@v1.1.2
with:
aws_key_id: $
aws_secret_access_key: $
aws_bucket: $
source_dir: 'android/app/build/outputs/apk/release/'
destination_dir: release-apk:$
- AWS 계정 정보(
key_id
,secret_access_key
)와 bucket 정보를 입력해야 함
- Slack Notification
- name: Slack notification
if: success()
uses: rtCamp/action-slack-notify@master
env:
SLACK_CHANNEL: '@username'
SLACK_COLOR: '#3278BD'
SLACK_MESSAGE: https://s3.ap-northeast-2.amazonaws.com/{BUCKET_NAME}/{FILE_PATH}/{FILE_NAME}
SLACK_TITLE: 'App Build 성공'
SLACK_USERNAME: 'build-bot'
SLACK_WEBHOOK: $
- Slack Incomming webhook을 이용하여 슬랙에 메세지를 전송
- Webhook Endpoint는 Github Secrets에 등록하여 사용함
SLACK_MESSAGE
에는 업로드된 apk 파일을 다운로드 할 수 있는 public endpoint를 기입함