.env for GitHub Actions

악식·2023년 8월 3일
0

Secret 은 커밋하지 마세요.

코드 레포지토리에는 인증정보(Secret)을 커밋해선 안됩니다. 심지어 프라이빗 레포지토리도 안됩니다.

깃허브는 프라이빗 저장소를 포함해서 해킹 당한 적이 있습니다. 해당 사건 이후 몇몇 사용자가 GitLab을 비롯한 자체 호스팅 레포지토리를 사용하기 시작한 것으로 압니다.

이 문제에 대응하기 위한 올바른 해결책 중 하나는 .env를 사용하는 것입니다. .env 파일에 시크릿을 저장해놓고, dotenv 라이브러리가 이 시크릿을 환경변수로 적용시켜줍니다.

로컬 구동시에는 파일을 직접 전달 받고, 인스턴스에 배포할 때는 해당 인스턴스에 직접 업로드 해놓으면 해결이 가능하지만, 매번 .env 파일에 변경이 있을 때마다 직접 갱신을 해줘야 합니다.

문제는 GitHub Actions를 이용해서 자동 배포할 때에 발생합니다. 서비스 가동을 위해 Secrets이 필요한데, 코드 레포지토리는 이 값들을 가지고 있지 않습니다. 이를 해결하기 위해서 Github Secrets가 있습니다.

GitHub Secrets

repository > Settings > Security > Secrets and Variables > New repository secret

GitHub Secrets 에 원하는 환경변수를 저장해놓으면, GitHub Actions 에서 명령어를 실행할 때 {{ secrets.secret_name }} 의 형태로 가져와서 사용할 수 있습니다. AWS 도 실행이 가능하고, 환경변수도 저장이 가능합니다.

단, 아직 문제가 존재합니다.

.env

.env 파일에 갱신이 발생하는 경우가 잦습니다. 작은 수정이라면 괜찮지만, 갯수가 많으면 상당히 번거로워집니다.

"커밋 하나로 배포가 완료되도록" 구성한 것이 GitHub Actions 인데, 이 GitHub Actions 를 가동하기 위해서 일이 늘어나게 됩니다.

GitHub Actions Workflow

.env 파일에 수정이 발생할 경우 수정해줘야 하는 곳은 3군데나 됩니다.

  • .env 파일의 갱신
  • GitHub Secrets 의 갱신.
  • Github Workflow의 설정 yml 파일 갱신.

이러고 나서야 GitHub Actions로 배포 자동화가 가능합니다.
간단한 스크립트를 사용하여 자동화하도록 합시다.

python-create-env-github-action

https://github.com/pjc1991/python-create-env-github-action

python create_env.py

위의 스크립트는 다음의 절차를 걸쳐 문제를 해결합니다.

  1. .env 에서 파일내에 존재하는 모든 변수의 이름을 수집합니다.
  2. 1의 내용을 기반으로 "echo {변수명}=%{{ secrets.변수명 }} > .env \n" x n 의 문자열을 생성합니다.
  3. .env 의 모든 변수를 불러와서 GitHub API를 통해 GitHub Secrets 에 갱신해줍니다.
  4. Workflow 파일을 yaml로 불러와서, 특정한 작업명("CREATE_DOT_ENV_FILE")을 찾습니다.
  5. 해당 작업의 RUN 항목에 2에서 생성한 문자열을 넣어줍니다.
  6. 파일 실행 한 번으로 github secrets 갱신과, workflow 파일 갱신이 끝났습니다.
  7. .env 파일에 변화가 생길 때마다, 새롭게 create_env.py 를 실행해주면 됩니다.

어플리케이션을 개발하는 것이 아니라 스크립트를 짠다는 느낌으로 개발했습니다.

profile
Wandering wondering.

0개의 댓글