CI 서비스를 GitHub Actions로 변경하고 나서 application.yml 설정파일에 있는 민감정보들을 어떻게 숨겨야할지 고민이 생겼습니다.
기존의 Travis에서는 숨기고자 하는 설정파일을 tar 파일로 압축한 뒤 enc파일로 암호화 시켜서 Travis가 복호화시키는 방법을 사용했었는데요, 이번 방법도 흐름은 비슷할 것 같습니다.
암호화하기 전에 테스트용으로 my_secret.json
파일을 하나 만들겠습니다.
그리고 아래의 명령어로 암호화 시키겠습니다.
(저는 윈도우 사용자라서 WSL을 사용하여 ubuntu 환경에서 암호화 했습니다)
gpg --symmetric --cipher-algo AES256 my_secret.json
패스워드 설정 창이 나오는데요 반드시 비밀번호를 기억해주세요.
비밀번호를 까먹기 전에 등록하겠습니다.
해당 프로젝트의 Github 페이지 > Settings > Secrets > Actions > New repository secret
이름은 LARGE_SECRET_PASSPHRASE
으로 테스트용으로 간단하게 패스워드를 설정했습니다.
'Add secret' 버튼을 눌러서 등록해줍니다.
저는 프로젝트의 ./scripts
디렉토리에 아래의 스크립트 파일을 생성했습니다.
decrypt_secret.sh
#!/bin/sh
# --batch to prevent interactive command
# --yes to assume "yes" for questions
gpg --quiet --batch --yes --decrypt --passphrase="$LARGE_SECRET_PASSPHRASE" --output ./src/main/resources/my_secret.json ./src/main/resources/my_secret.json.gpg
Github Actions의 workflow 설정 파일을 수정합니다.
main.yml
jobs:
build:
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v3
- name: Grant execute permission for decrypt_secret.sh
run: chmod +x ./scripts/decrypt_secret.sh
shell: bash
- name: Decrypt Secret
run: ./scripts/decrypt_secret.sh
env:
LARGE_SECRET_PASSPHRASE: ${{ secrets.LARGE_SECRET_PASSPHRASE }}
# This command is just an example to show your secret being printed
# Ensure you remove any print statements of your secrets. GitHub does
# not hide secrets that use this workaround.
- name: Test printing your secret (Remove this step in production)
run: cat ./src/main/resources/my_secret.json
...
실제 배포 상황에는 name: Test printing your secret
을 반드시 삭제해 주세요.
정상적으로 Github Actions가 복호화를 하는것을 알 수 있습니다.
서버 인스턴스에도 정상적으로 해당 파일들이 들어간 것을 알 수 있습니다!