git
Github actions에서 Secrets로 환경변수 관리
알면 알 수록 재밌다!
2024. 4. 18. 07:20
.env 파일과 달리 .json 파일은 github action에 변수로서 관리하기 까다롭다.
json 파일의 내용을 base64로 인코딩하여 일련의 문자열로 치환하고, 이를 secrets에 저장한 뒤에, 워크플로에서 다시 decode하여 사용할 수 있다.
기존 .env
- name: Setting .env file
run: |
echo "POSTGRESQL_DEV_HOST=${{ secrets.POSTGRESQL_DEV_HOST }}" >> .env
echo "POSTGRESQL_PASSWORD=${{ secrets.POSTGRESQL_PASSWORD }}" >> .env
echo "AWS_ACCESS_KEY_ID=${{ secrets.AWS_ACCESS_KEY_ID }}" >> .env
echo "AWS_SECRET_ACCESS_KEY=${{ secrets.AWS_SECRET_ACCESS_KEY }}" >> .env
echo "SECRET_KEY=${{ secrets.SECRET_KEY }}" >> .env
echo "REFRESH_TOKEN_SECRET=${{ secrets.REFRESH_TOKEN_SECRET }}" >> .env
echo "AWS_ACCOUNT_ID=${{ secrets.AWS_ACCOUNT_ID }}" >> .env
cat .env
위처럼 .env 파일은 변수로써 넣어두고 secret에 그 값을 넣어서 쉽게 처리할 수 있다.
.json 파일 자체를 base64로 인코딩하려고 한다.
//test.json
{ "test": "1234" }
임시로 프로젝트의 root 디렉토리에 test.json 파일을 만들었다.
openssl base64 -in test.json -out test.json.base64
out 명령어는 새로운 파일로 base64로 encoding 된 파일을 덮어씌운다.
그래서 -out 할때 똑같이 test.json으로 하면 기존 파일 내용이 사라져버리니 새로운 파일로 만드는게 낫다.
//test.json.base64
wdwdvddwdwdwdfr516115RVCg==
위처럼 인코딩된 데이터가 있는 파일이 생성되었다.(예시이다)
$ cat test.json.base64 | base64 --decode
{ "test": "1234" }
위처럼 디코딩하면 원래 내용도 출력해준다.
그럼 이 test.json.base64의 인코딩된 데이터를 디코딩해 준다.
그럼 .json 파일이 없으면 생성해준다.
// .github/workflows/main.yml
- name: Decode and save secret value to file
run: |
echo "${{ secrets.TEST_JSON }}" | base64 --decode >> test.json
위처럼 사용하면 secret으로 json 파일을 관리할 수 있게 된다.