django로 프로젝트할 때 CI/CD를 해보고 싶어서 미리 레포지토리 파서 테스트하던 중에 Github Acitons에서 제공하는 장고 .yml 파일에서 파이썬 버전만 바꿔서 실행했는데..
🚨 FileNotFoundError: [Errno 2] No such file or directory: '/home/runner/work/django-github-action/django-github-action/secrets.json'
.gitignore
에 넣어두고 로컬에서만 쓰던 secrets.json이 있을리가 없다.
그래서 생각한 아이디어는
Actions secrets and variables에 secrets.json 내용 복사하고 깃헙 액션으로 secrets.json을 만들어주면 해결되지 않을까? 해서 시도해봤다.
secrets.json에 있는 값 하나하나 변수로 저장하기는 귀찮아서 Repository secrets에 json파일을 그대로 복사해서 생성해주었다.
이제 이 SECRET_JSON으로 빌드할 때 secrets.json을 만들어주는 Github Action을 만들어주면 된다. build job에 아래 코드를 추가해주었다.
- name: create secrets file
run: |
touch secrets.json # 파일 생성
echo "${{ secrets.SECRET_JSON }}" >> secrets.json # 복사
python manage.py test
실행 중에 발생한 문제이므로 이 코드를 실행하는 step 위에 적어두었다.
🚨 json.decoder.JSONDecodeError: Expecting value: line 2 column 1 (char 1)
Error: Process completed with exit code 1.
Github Action 문제는 아니고 파이썬에서 secrets = json.loads(f.read())
로 파일을 읽어오는 부분에서 문제가 생겼나보다.
여기서 두가지 선택을 할 수 있다.
- secrets.json 말고 .env 파일에서 secret key 가져오도록 프로젝트 코드 수정
→ {"KEY":"value"} 형식 대신 KEY=value로 단순하게 저장할 수 있다.- .json 파일 읽을 수 있게 .yml 수정
나는 secret key 써둔 곳이 너무 많아서 1번 수정이 더 귀찮을 것 같았다.
그래서 굳이굳이 2번을 선택했다.. 히히
검색을 하다가 secrets에 저장하면서 "SECRET" : "..."에서 ""가 생략되고 plain text로 저장된다는 자료를 봤다 ! 추가로 Github Actions에서는 json 저장을 지양한다고 하는데...
- name: create-json
id: create-json
uses: jsdaniell/create-json@1.1.2
with:
name: "secrets.json"
json: ${{ secrets.SECERT_JSON }}
위 코드로 빌드 테스트는 성공했다 ❕
#10이 삽질의 흔적이다🥺
EC2 연결하고 배포하고 RDS랑 S3 연결하고 CICD도 하고 우와 삽질의 연속이다
참고 자료 링크
어디서 무엇을 어떻게 참고했는지는 기억이 안나서 그냥 링크 다 가져왔습니다🥲
django를 Docker & Github Action으로 배포하기
github action, secrets.json 처리
[CI/CD] Github Actions로 .env / dotenv 파일 만들기
Github) Github actions에서 Secrets로 환경변수 관리하기
[Github Actions] secret에 json 넣고 싶을 때
create-json
https://docs.github.com/en/actions/security-guides/using-secrets-in-github-actions#storing-large-secrets
저는 json 첨부하기 위해서 github에서 권장하는 가이드 따라 갔어요!