Github 자동 배포를 위해 민감한 환경 변수들을 Github Secret에서 관리하고 있었다.
기존에는 각 환경변수 하나마다 하나의 repository secret을 만들어서 사용하였다.
매 프로젝트마다 각 변수를 설정하고 수정하는 것이 번거롭고, 특히 이전에 적용했던 값들을 따로 기록해서 관리해야 하는 것이 불편했다.
프로젝트의 모든 환경변수가 들어있는 env 파일을 직접 관리하고, 깃허브 시크릿에 바로 올려 사용하고 싶었다. 파일의 보안만 잘 신경쓴다면, 각 프로젝트별로 하나의 env파일만 사용할 수 있어 편리할 것 같았다.
특히!! 인텔리제이에서 프로젝트별로 .env 파일을 등록해서 환경변수로 사용하고 있었는데, 그 파일을 별도의 수정 없이 깃허브 시크릿에 바로 사용하고 싶었다.
Github Actions Workflow를 수정해 보자
기존대로 1환경변수 1시크릿을 사용한다면, 다음과 같이 `${{ secrets.시크릿명 }}`을 통해 가져올 수 있다.
이를 하나의 시크릿을 사용하도록 변경하기 위해서, 다음 방법을 선택하였다.
1. 깃허브 시크릿의 내용을 깃허브 액션 셸에서 파일(`.env`)로 저장하기
2. 저장한 파일을 `source`하거나 `grep`하여 해당 셸의 환경변수로 등록하기
`grep`을 사용하여 파일에서 환경변수를 각각 가져와 사용하는 방법도 있지만, 향후 확장성을 생각했을 때 더 범용적인 `source` 명령어를 사용하는 편이 좋을 것이라고 생각하였다.
이렇게 설정된 환경변수는 해당 `run`의 셸에서만 유지되므로, 다른 run을 사용한다면 다시 source를 해주어야 한다.
ssh-action에 환경변수 내용 적용하기
EC2와의 연결을 위해서 appleboy의 `ssh-action`을 사용하였다. 기존에는 시크릿에서 `EC2_HOST`나 `EC2_USER` 등을 가져와 파라미터로 사용하였다.
문제는 ssh-action의 파라미터를 사용할 때, 아까 source했던 셸 환경변수를 가져와서 사용하지 못한다는 것이었다. `run`이나 스크립트 파트가 아니어서, 파라미터로는 깃허브 시크릿을 끌어와서 사용해야 한다.
그래서 .env를 저장할 때, 워크플로 단위로 저장되는 `GITHUB_ENV`에 `EC2_HOST`와 `EC2_USER`를 등록해 해당 값을 가져와서 사용하였다.
SSH Key를 Base64 변환하기
EC2 연결을 위해 Github actions에 EC2 SSH key를 전달해야 한다. 로컬 환경에서 .env 파일을 가져다가 사용하거나, 시크릿에 환경변수를 각각 등록할 때는 RSA key가 여러 줄이여도 따로 신경써줄 필요가 없었다.
하지만 환경변수 파일을 통째로 깃허브 시크릿에 올려서 사용할 때는 문제가 발생한다.
RSA key의 개행 때문에 깃허브 셸에서 정상적으로 사용할 수가 없었다.
따라서 RSA key는 Base64로 인코딩하여 시크릿에 등록했고, `GITHUB_ENV`에 저장하기 전에 디코딩하여 `private_key` 파일로 만들어 사용하였다.
`.env`, `private_key` 파일은 ec2에서 배포 후 삭제하도록 했다.
아래와 같이 하나의 시크릿으로 환경변수를 관리할 수 있게 되었다!!
'해결 및 개선' 카테고리의 다른 글
홈 서버 SSH 연결 오류 해결하기 (1) | 2025.01.31 |
---|---|
우분투가 설치된 삼성 노트북에서 배터리 관리하기 (실패) (1) | 2025.01.26 |
[Spring] Swagger Doc 관련 문제 해결하기 (0) | 2024.12.30 |