인프런 커뮤니티 질문&답변

kyb1208tg님의 프로필 이미지

작성한 질문수

비전공자도 이해할 수 있는 CI/CD 입문·실전

[실습] 컨테이너 기반의 프로젝트에서 많이 쓰는 CI/CD 구축 방법

환경변수 질문 있습니다

24.08.19 16:09 작성

·

33

0

저는 application.yml을 통째로 git secret에 작성하지 않고 다음과 같이 각각을 환경변수로 잡아서 민감한 정보를 숨겼습니다. 그리고 build step 에서 env를 통해 환경변수 값들을 전달해서 사용하려 하였는데, 실제 docker를 통해 실행할 때 해당 환경변수 값들을 찾을수 없다는 에러가 발생하는 상황입니다.

저는 build 단계에서 해당 환경변수 값들이 모두 들어간 상태의 완전한 상태로 build가 된다고 생각했지만 실제로는 해당 환경변수들을 일단 빈값으로 놔두고 build하기 때문이라고 알게되었는데 저의 이러한 방식보다는 그냥 application.yml을 통째로 git secret에 넣는 방식이 좋은걸까요..?

spring:
  datasource:
    driver-class-name: com.mysql.cj.jdbc.Driver
    url: {SQL_URL}
    username: {SQL_USERNAME}
    password: {SQL_PASSWORD}
  jpa:
    hibernate:
      ddl-auto: update
    properties:
      hibernate:
        format_sql: true

  data:
    redis:
      host: {REDIS_HOST:localhost}
      port: ${REDIS_PORT:6379}
name : Deploy To EC2

on:
    push:
        branches:
        - main
        - feat/ci_cd
jobs:
    deploy:
        runs-on: ubuntu-latest
        steps:
        - name: Checkout
          uses: actions/checkout@v4

        - name: JDK 17 version install
          uses: actions/setup-java@v4
          with:
            distribution: temurin
            java-version: 17

        - name: test and build
          run: |
            chmod +x ./gradlew
            ./gradlew clean build
          working-directory: ./
          env:
            SQL_URL: {{ secrets.DB_URL }}
            SQL_USERNAME: {{ secrets.DB_USERNAME }}
            SQL_PASSWORD: {{ secrets.DB_PASSWORD }}
            REDIS_HOST: {{ secrets.REDIS_HOST }}
            REDIS_PORT: {{ secrets.REDIS_PORT }}
            AWS_ACCESS_KEY: {{ secrets.AWS_ACCESS_KEY }}
            AWS_REGION: {{ secrets.AWS_REGION }}
            AWS_S3_BUCKET: {{ secrets.AWS_S3_BUCKET }}
            AWS_SECRET_KEY: {{ secrets.AWS_SECRET_KEY }}
            TOUR_INFO_KEY: {{ secrets.TOUR_INFO_KEY }}

        - name: AWS credential setup
          uses: aws-actions/configure-aws-credentials@v4
          with:
            aws-region: {{ secrets.AWS_REGION }}
            aws-access-key-id: {{ secrets.AWS_ACCESS_KEY }}
            aws-secret-access-key: {{ secrets.AWS_SECRET_KEY }}

        - name: ECR login
          id: login-ecr
          uses: aws-actions/amazon-ecr-login@v2

        - name: Docker image create
          run: docker build -t kkilogbu .

        - name: Docker tag
          run: docker tag kkilogbu {{ steps.login-ecr.outputs.registry }}/backend:latest

        - name: Docker image push to ECR
          run: docker push {{ steps.login-ecr.outputs.registry }}/backend:latest

        - name: EC2 connection with SSH
          uses: appleboy/ssh-action@v1.0.3
          with:
            host: {{ secrets.EC2_HOST }}
            username: {{ secrets.EC2_USERNAME }}
            key: {{ secrets.EC2_PRIVATE_KEY }}
            script: |
              docker stop kkilogbu || true
              docker rm kkilogbu || true
              docker pull {{ steps.login-ecr.outputs.registry }}/backend:latest
              docker run -d --name kkilogbu -p 8080:8080 ${{ steps.login-ecr.outputs.registry }}/backend:latest

답변 1

0

JSCODE 박재성님의 프로필 이미지
JSCODE 박재성
지식공유자

2024. 08. 20. 13:22

안녕하세요 kyb1208tg님!

강의 내용을 기반으로 응용해보셨군요👍

 

현재 환경변수가 제대로 작동하지 않는 이유가 문법 때문일 수도 있을 것 같아서

아래 사항 한 번 체크해보시겠어요 ?

 

application.yml에 보시면 ${ ____ }의 형태로 작성하지 않고 { _____ }의 형태로

작성되어 있는 코드가 다수 보입니다.

이 파일에서 $ { ______ }의 형태로 작성을 해도 에러가 발생하는 지 확인 해주실 수 있을까요~??