.gitgnore에 추가된 application.properties을 CI/CD로 관리

YeJin Lee·2024년 10월 1일

Spring Boot

목록 보기
6/11

application.yml

src > resources > application.properties

민감한 파일을 application.properties(yml) 파일로 많이 관리한다.

github에 있는 캐싱 때문에 yml 파일이 추적이 되고 있다.
# ignore할 수 있는 cach를 리프레시
git rm -r --cached .

Error
warning: in the working copy of '.java', LF will be replaced by CRLF the next time Git touches it

맥 또는 리눅스를 쓰는 개발자와 윈도우 쓰는 개발자가 Git으로 협업할 때 발생하는 Whitespace 에러라고 한다.

유닉스 시스템에서는 한 줄의 끝이 LF(Line Feed) 로 이루어지는 반면, 윈도우에서는 줄 하나가 CR(Carriage Return)LF(Line Feed) , 즉 CRLF로 이루어지기 때문이다.

따라서 어느 한 쪽을 선택ㅎ살 지 Git에게 혼란이 온 것이다.

이를 자동 변환 시켜주는 core.autocrlf 라는 기능을 켜는 것이다.

이 기능은 개발자가 git에 코드를 추가했을 때(예컨대 커밋할 때)에는 CRLF를 LF로 변환해주고, git의 코드를 개발자가 조회할 때 (예컨대 clone을 한다거나 할 때)에는 LF를 CRLF로 변환시켜준단다.

core.autocrlf -> 너무 감사합니다!

.
.
.

.gitignore 파일에 application.yml을 추가를 안해서 발생한 에러였다...

LF CRLF 알았으니까... 괜찮다고 하자...

.gitignore에 application.yml 추가

application.yml 추적 안함

문제점

git pull origin main

git pull을 당기면 yml 파일이 당겨지진 않는다.
yml 파일을 직접 만들어 줘야하면 수동 배포가 된다.

# 코드 수정
name: Deploy To EC2

on:
  push:
    branches:
      - main

jobs:
  Deploy:
    runs-on: ubuntu-latest
    steps:
      - name: SSH(원격접속)로 EC2에 접속하기
        uses: appleboy/ssh-action@v1.0.3
        # 라이브러리 스크립트 안에서 secrets 변수를 사용하고 싶다.
        # 변수를 사용하려면 env: 를 사용해야 한다.
        # 환경 변수에 관련된 변수를 선언해.
        env:
          APPLICATION_PROPERTIES: ${{ secrets.APPLICATION_PROPERTIES }}
        with:
          host: ${{ secrets.EC2_HOST }}
          username: ${{ secrets.EC2_USERNAME }}
          key: ${{ secrets.EC2_PRIVATE_KEY }}
          # 어떤 변수를 쓸 지 선언을 해야만 
          envs: APPLICATION_PROPERTIES
          script_step: true
          script: |
            cd /home/ubuntu/board-server
            # 원래 기존에 있던 yml 파일 삭제
            rm -rf src/main/resources/application.yml
            git pull origin main
            # 여기에 있는 변수값들을 요 파일에 작성하게끔 해준다
            # yml 파일을 다시 생성
            # 이렇게 쓸 수 있다.
            echo "$APPLICATION_PROPERTIES" > src/main/resources/application.yml
            ./gradlew clean build
            sudo fuser -k -n tcp 8080 || true
            nohup java -jar build/libs/*SNAPSHOT.jar > ./output.log 2 >& 1 &

환경변수 사용법

Pass environment variable to shell script

  - name: pass environment
    uses: appleboy/ssh-action@v1.0.3
+   env:
+     FOO: "BAR"
+     BAR: "FOO"
+     SHA: ${{ github.sha }}
    with:
      host: ${{ secrets.HOST }}
      username: ${{ secrets.USERNAME }}
      key: ${{ secrets.KEY }}
      port: ${{ secrets.PORT }}
+     envs: FOO,BAR,SHA
      script: |
        echo "I am $FOO"
        echo "I am $BAR"
        echo "sha: $SHA"

ssh remote commands 공식 문서

secrets에 APPLICATION_PROPERTIES 적용

AWS에 pull 된 application.yml 파일

secrets application.yml 파일 AWS 업데이트

업데이트는 secrets에서 수동으로 수정해줘야 한다.

Test 통과 안되면 배포가 안되는지 체크

Commit - Push - Build - Test - Success

# 테스트 코드 실행
./gradlew test
# 테스트까지 포함되어 있다
./gradlew clean build

위의 코드에서 BUILD FAILED가 되고 더이상 진행하지 않는다.

profile
안녕하세요, 영문과코딩 입니다.

0개의 댓글