Next.js를 사용하면서 정적페이지로 배포하는 것이 아니기 때문에 서버에 배포하는 과정에서 도커를 사용하기로 하였고 코드를 dev, stage, main에 병합이 되는 순간 AWS의 ECR에 이미지가 생성이 되도록 하였습니다.

 

그 과정에서 환경변수(.env)를 어떻게 관리 해야되나 고민하였습니다. Repo에 민감한 정보가 있는 .env를 올리는 것도 아닌거 같고 서버 안에서 .env 생성하여 컨테이너가 그 환경변수를 바라보게 하는 것도 뭔가 좋아보이지 않았습니다. (방법을 모르는 것도 있습니다)

 

그래서 생각한 방법이 Github Action에서 도커 이미지를 생성할 때 옵션 값으로 환경변수(.env)를 넣기로 하였고 방법을 찾아봤습니다.

 

맞는 방법인지는 모르겠지만 CI/CD를 하는 방법을 아래와 같은 흐름으로 진행하기로 했습니다.

 

먼저 Github Action에서 Secrets를 설정하는 방법을 살펴보면 Settings -> Security -> Secrets and variables -> Actions에서 만들 수 있습니다.

브랜치별로 환경변수를 다르게 할 필요가 없다면 Repository secrets에 환경변수를 등록하면 되지만, 저는 main, stage, dev의 환경변수를 다 다르게 설정을 해줘야했습니다. 그래서 Environment secrets을 활용하기로 합니다.

 

환경에 대한 이름을 지어주고 

아래와 같이 Selected branches를 해서 원하는 브랜치 명을 입력해줍니다.

아래에서 Add secret을 입력해줍니다. 

이런 방식으로 dev, stage, main에 환경변수명과 값을 넣어주면 됩니다. 이제 이 secrets 값을 github action 스크립트 파일(yml)에서 도커로 주입을 해줘야합니다. 환경별로 다른 secrets을 넣기 위해서는 어떤 환경인지 선언을 해줘야합니다.

jobs:
    build:
        environment: dev // main 혹은 stage
 
run: |
  docker build \
  --build-arg "NEXT_PUBLIC_API_URL=${{ secrets.NEXT_PUBLIC_API_URL}}" \
  --build-arg "NEXT_PUBLIC_API_KEY=${{ secrets.NEXT_PUBLIC_API_KEY}}" \
  --build-arg "NAVER_CLIENT_ID=${{ secrets.NAVER_CLIENT_ID}}" \
  --build-arg "KAKAO_REST_API_KEY=${{ secrets.KAKAO_REST_API_KEY}}" \
  --build-arg "NEXT_PUBLIC_TOSS_CLIENTKEY=${{ secrets.NEXT_PUBLIC_TOSS_CLIENTKEY}}" \
  --build-arg "NEXT_PUBLIC_ORIGIN_URL=${{ secrets.NEXT_PUBLIC_ORIGIN_URL}}" \
  --build-arg "NEXT_PUBLIC_TEST_API_URL=${{ secrets.NEXT_PUBLIC_TEST_API_URL}}" \
  -t $ECR_REPOSITORY:$IMAGE_TAG .

Dockerfile을 통해서 빌드명령어를 실행 시킬 때 --build-arg에 다음과 같이 secrets을 넣어줍니다. 앞에서 environment: dev 로 설정해줬기 때문에 github에서 dev 환경에 해당하는 secrets 값이 들어가게 됩니다.

 

이제 Dockerfile이 실행되고 --build-arg로 넘겨줬던 변수를 받아서 env로 넣는 과정이 필요합니다. DockerFile 안에 다음과 같이 넣었습니다.

ARG NEXT_PUBLIC_API_URL
ARG NEXT_PUBLIC_API_KEY
ARG NAVER_CLIENT_ID
ARG KAKAO_REST_API_KEY
ARG NEXT_PUBLIC_TOSS_CLIENTKEY
ARG NEXT_PUBLIC_ORIGIN_URL
ARG NEXT_PUBLIC_TEST_API_URL

ENV NEXT_PUBLIC_API_URL=${NEXT_PUBLIC_API_URL}
ENV NEXT_PUBLIC_API_KEY=${NEXT_PUBLIC_API_KEY}
ENV NAVER_CLIENT_ID=${NAVER_CLIENT_ID}
ENV KAKAO_REST_API_KEY=${KAKAO_REST_API_KEY}
ENV NEXT_PUBLIC_TOSS_CLIENTKEY=${NEXT_PUBLIC_TOSS_CLIENTKEY}
ENV NEXT_PUBLIC_ORIGIN_URL=${NEXT_PUBLIC_ORIGIN_URL}
ENV NEXT_PUBLIC_TEST_API_URL=${NEXT_PUBLIC_TEST_API_URL}

 

코드가 자동으로 병합 됐을 때 다음과 같이 실행되는걸 볼 수 있습니다.

 

브랜치 별로 환경변수를 다르게 입력하고 싶었지만 yml 파일에서 환경변수를 입력하는 부분을 찾지 못해서 오랜 시간이 걸렸던 것 같습니다. 

jobs:
    build:
        environment: dev

이 부분만 빠르게 찾았다면 쉽게 했을 작업인데 한참 걸렸습니다. 이런 방법으로 도커를 배포하는게 좋은 방법인지는 더 찾아봐야되지만 Github Action에서 브랜치별로 secrets를 주입하는 기능에 대해서 이해하고 활용했다는 점에서 경험치를 쌓았다고 생각합니다.

 
 

 

 

반응형

'기타' 카테고리의 다른 글

이클립스 자주 쓰는 단축키  (0) 2016.09.04
소스코드에 색(Syntax)을 입혀주는 사이트  (0) 2016.01.13
추천 완성ctrl + space
자동 정렬ctrl + shift + f
자동 임포트ctrl + shift + o (영어 o)
해당 행 위아래 이동alt + ↑ or alt + ↓
해당 행 아래에 복사ctrl + alt + ↓
해당 행 삭제ctrl + d
세로 편집alt + shift + A
대문자 변환ctrl + shift + x
소문자 변환ctrl + shift + y
범위 들여쓰기ctrl + shift + tab
범위 내어쓰기shift + tab
범위 주석ctrl + shift + /
범위 주석 해제ctrl + shift + \
메서드나 필드가 참조하고 있는 곳으로 이동ctrl + shift + g
getter, setter 자동 생성alt + shift + s + r
default 생성자 자동 생성alt + shift + s + c
ulid 생성자 자동 생성alt + shift + s + o
저장ctrl + s
모두 저장ctrl + shift + s
되돌리기ctrl + z
앞으로ctrl + y
디버깅F11
디버깅 및 실행ctrl + F11


반응형

소스코드에 색 입히기

소스코드를 작성하고 블로그나 문서파일로 복붙을 하게 되는 경우가 많은데 매번 Syntax는 제외하고 복사가 됩니다. 

하나하나 색을 입히기도 힘들고 어떻게 소스코드에 색을 입힐 수 있나 찾는 중 좋은 사이트를 찾았네요.


아래와 같이 Syntax가 적용 안된 html 소스코드를 보면 가독성도 안좋고 갑갑합니다..

<html>

    <head></head>

    <body>

<input type="text">

    </body>

</html>


하지만 https://tohtml.com/ 에 가면 아래와 같이 Syntax가 적용된 html 소스코드로 바꿀 수 있습니다.

<html>
    <head></head>
    <body>
        <input type="text">
    </body>
</html>

https://tohtml.com/에 접속하면 아래와 같은 화면이 반깁니다. 


Source code 부분에 원하는 소스코드를 넣고 오른쪽에 Type 에서 어떤 언어의 Syntax로 바꾸고 싶은지 택하고 Style에서 배경을 택합니다. 

그리고 Highlight 버튼을 누르면 싹 변하게 됩니다.




짠 ! 하고 Syntax가 적용된 소스코드가 나옵니다. 이걸 복붙하면 끝!! 


반응형

+ Recent posts