Github Secrets 하나만으로 모든 환경변수 관리하기

2025. 1. 21. 12:16·해결 및 개선

Github 자동 배포를 위해 민감한 환경 변수들을 Github Secret에서 관리하고 있었다.

기존에는 각 환경변수 하나마다 하나의 repository secret을 만들어서 사용하였다.

1환경변수 1시크릿

 

 

매 프로젝트마다 각 변수를 설정하고 수정하는 것이 번거롭고, 특히 이전에 적용했던 값들을 따로 기록해서 관리해야 하는 것이 불편했다.

프로젝트의 모든 환경변수가 들어있는 env 파일을 직접 관리하고, 깃허브 시크릿에 바로 올려 사용하고 싶었다. 파일의 보안만 잘 신경쓴다면, 각 프로젝트별로 하나의 env파일만 사용할 수 있어 편리할 것 같았다.

 

특히!! 인텔리제이에서 프로젝트별로 .env 파일을 등록해서 환경변수로 사용하고 있었는데, 그 파일을 별도의 수정 없이 깃허브 시크릿에 바로 사용하고 싶었다.

 

 

 

Github Actions Workflow를 수정해 보자

기존대로 1환경변수 1시크릿을 사용한다면, 다음과 같이 `${{ secrets.시크릿명 }}`을 통해 가져올 수 있다. 

기존 workflow yml

 

 

이를 하나의 시크릿을 사용하도록 변경하기 위해서, 다음 방법을 선택하였다.

 

1. 깃허브 시크릿의 내용을 깃허브 액션 셸에서 파일(`.env`)로 저장하기

2. 저장한 파일을 `source`하거나 `grep`하여 해당 셸의 환경변수로 등록하기

 

`grep`을 사용하여 파일에서 환경변수를 각각 가져와 사용하는 방법도 있지만, 향후 확장성을 생각했을 때 더 범용적인 `source` 명령어를 사용하는 편이 좋을 것이라고 생각하였다.

 

이렇게 설정된 환경변수는 해당 `run`의 셸에서만 유지되므로, 다른 run을 사용한다면 다시 source를 해주어야 한다.

 

 

 

ssh-action에 환경변수 내용 적용하기

EC2와의 연결을 위해서 appleboy의 `ssh-action`을 사용하였다. 기존에는 시크릿에서 `EC2_HOST`나 `EC2_USER` 등을 가져와 파라미터로 사용하였다.

기존 ssh-action 파라미터

 

 

문제는 ssh-action의 파라미터를 사용할 때, 아까 source했던 셸 환경변수를 가져와서 사용하지 못한다는 것이었다. `run`이나 스크립트 파트가 아니어서, 파라미터로는 깃허브 시크릿을 끌어와서 사용해야 한다.

그래서 .env를 저장할 때, 워크플로 단위로 저장되는 `GITHUB_ENV`에 `EC2_HOST`와 `EC2_USER`를 등록해 해당 값을 가져와서 사용하였다.

$GITHUB_ENV 에 저장
${{env. }}로 사용

 

 

 

SSH Key를 Base64 변환하기

EC2 연결을 위해 Github actions에 EC2 SSH key를 전달해야 한다. 로컬 환경에서 .env 파일을 가져다가 사용하거나, 시크릿에 환경변수를 각각 등록할 때는 RSA key가 여러 줄이여도 따로 신경써줄 필요가 없었다.

 

하지만 환경변수 파일을 통째로 깃허브 시크릿에 올려서 사용할 때는 문제가 발생한다.

 

RSA key의 개행 때문에 깃허브 셸에서 정상적으로 사용할 수가 없었다.

 

따라서 RSA key는 Base64로 인코딩하여 시크릿에 등록했고, `GITHUB_ENV`에 저장하기 전에 디코딩하여 `private_key` 파일로 만들어 사용하였다.

 

.env 생성 시 key를 디코딩하여 private_key에 저장

 

ssh-action에서는 저장한 key_path를 파라미터로 전달

 

 

`.env`, `private_key` 파일은 ec2에서 배포 후 삭제하도록 했다.

 

 

아래와 같이 하나의 시크릿으로 환경변수를 관리할 수 있게 되었다!!

'해결 및 개선' 카테고리의 다른 글

홈 서버 SSH 연결 오류 해결하기  (1) 2025.01.31
우분투가 설치된 삼성 노트북에서 배터리 관리하기 (실패)  (1) 2025.01.26
[Spring] Swagger Doc 관련 문제 해결하기  (0) 2024.12.30
'해결 및 개선' 카테고리의 다른 글
  • 홈 서버 SSH 연결 오류 해결하기
  • 우분투가 설치된 삼성 노트북에서 배터리 관리하기 (실패)
  • [Spring] Swagger Doc 관련 문제 해결하기
j30ngwoo
j30ngwoo
  • j30ngwoo
    Jeongwoo's Dev Blog
    j30ngwoo
  • 전체
    오늘
    어제
  • 글쓰기 관리
    • 분류 전체보기 (15)
      • 정리 및 생각 (4)
      • Problem Solving (2)
      • 해결 및 개선 (4)
      • Projects (3)
  • 인기 글

  • 태그

    spring
    티스토리챌린지
    kupc2023
    backend
    whenwhen
    오블완
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.1
j30ngwoo
Github Secrets 하나만으로 모든 환경변수 관리하기
상단으로

티스토리툴바