Open psy-choi opened 1 year ago
1) 1차 시도 : actions>secrets 에 하나씩 넣는 방법
너무 비효율적이라고 느꼈음
심지어 yml 파일도 길어지기에 추가적으로 변수가 추가 될때마다 secret 키와 2개의 코드를 추가해야 하는데 이 방법은 번거로웠다.
gradle.yml 파일
name: Create .env file run: | echo "$MONGODB_URI" >> .env echo "$REDIS_URI" >> .env .....
env: REDIS_URI: ${{secrets.REDIS_URI}} MONGODB_URI: ${{secrets.MONGODB_URI}} ...
2) 2차 시도 : json으로 한꺼번에 넣어서 보관함
.env 파일을 json 파일로 만들어서 key value 로 쪼개어 나눠서 .env로 만들겠다는 생각
해당 방법은 원래 .env 를 바꿔야 한다는 번거로움이 있기 때문에 변경하기로 함
gradle.yml
name: Create .env file run: | jq -r 'to_entries|map("(.key)=(.value|tostring)")|.[]' <<< "$SECRETS_CONTEXT" > .env env: SECRETS_CONTEXT: ${{ toJson(secrets) }}
해당 코드를 통해서 SECRETS_CONTEXT에 json 파일을 모두 갖다놓고, 해당 파일을 key=value 값으로 .env로 놓겠다는 것이다.
3) 3차 시도 : 그냥 .env 파일을 아예 secrets 키로 넣어버리기로 함
.env 파일 자체를 secrets 키에 보관하기로 함
gradle.yml
name: Create .env file run: | echo "$SECRETS_CONTEXT" >> .env env: SECRETS_CONTEXT: ${{secrets.SECRETS_CONTEXT}}
매우 깔끔하고 정렬된 코드. 이걸로 결정했다!
1) MongoDB는 h2 형태로 내부로 저장할 수 있는 DB가 있는데, 이걸로 해결 가능 2) Redis
Elasticache와 직접 연동 Redis는 AWS의 elasticache와 연동할 수도 있겠지만, 그러면 inbound 규칙을 추가해 줘야 하는데 이는 보안의 위험이 있다. 또, MONGO DB와 다르게 test 코드에서 redis의 db를 나눠주지 않았기 직접 사용하는 것에는 데이터 관리 면에서도 좋지 않다고 판단.
Docker container로 Redis 생성
work flow에 container로 redis를 생성하고, test 할 때에 http://127.0.0.1:6379
라는 endpoint로 연동할 수 있도록 한다. 해당 방법이 적합한 것 같아서 선택했다.
gradle.yml
jobs:
build:
runs-on: ubuntu-latest
services:
# Label used to access the service container
redis:
# Docker Hub image
image: redis
ports:
# Opens tcp port 6379 on the host and service container
- 6379:6379
이렇게 jobs를 build 할 때 step를 시작하기 이전에 Redis를 container로 만들고 6379 port로 접근할 수 있도록 열어준다.
성공한 사진
test 성공
CI/CD의 신이 되어버리셨군요.. 고생하셨습니다 기성님 짱입니다!
✏️ Description
CI 기능까지 할 수 있도록 한 github actions yml 파일을 생성한다.
🛠 Features
❗️Warnning