11# 워크플로우 이름
22name : Spring CI/CD Pipeline (Develop)
33
4- # develop 브랜치 PR에서만 실행
54on :
65 pull_request :
76 branches :
1514 - ' .github/workflows/**'
1615
1716jobs :
18- # ==================================
19- # CI: Test and Build and Push Docker Image
20- # ==================================
2117 ci :
2218 runs-on : ubuntu-latest
2319 env :
2420 SENTRY_AUTH_TOKEN : ${{ secrets.SENTRY_AUTH_TOKEN }}
2521
26-
27- # CI 작업이 실행되는 동안 RabbitMQ 서비스 컨테이너를 함께 실행
2822 services :
2923 rabbitmq :
3024 image : rabbitmq:3-management
3125 ports :
3226 - 5672:5672
33- # RabbitMQ가 완전히 준비될 때까지 기다리는 상태 확인 옵션
3427 options : >-
3528 --health-cmd "rabbitmq-diagnostics check_running"
3629 --health-interval 10s
3730 --health-timeout 5s
3831 --health-retries 5
3932
4033 steps :
41- # 1. 소스 코드 체크아웃
4234 - name : Checkout source code
4335 uses : actions/checkout@v4
4436
45- # 2. JDK 21 설치
4637 - name : Set up JDK 21
4738 uses : actions/setup-java@v4
4839 with :
4940 java-version : ' 21'
5041 distribution : ' temurin'
5142
52- # 3. Gradle 캐시 설정
5343 - name : Cache Gradle packages
5444 uses : actions/cache@v4
5545 with :
@@ -60,21 +50,43 @@ jobs:
6050 restore-keys : |
6151 ${{ runner.os }}-gradle-
6252
63- # 4. gradlew 실행 권한 부여
6453 - name : Grant execute permission for gradlew
6554 run : chmod +x ./gradlew
6655
67- # 5. Gradle 테스트 실행
56+ # ----------------------------------
57+ # 1. 테스트용 임시 디렉토리 생성 + secrets yml 생성
58+ # ----------------------------------
59+ - name : Create temp directory for secrets
60+ run : |
61+ TMP_DIR=$(mktemp -d)
62+ # application-secrets.yml
63+ echo "${{ secrets.APPLICATION_SECRET_YML }}" > $TMP_DIR/application-secrets.yml
64+ echo "OPENAI_API_KEY: ${{ secrets.OPENAI_API_KEY }}" >> $TMP_DIR/application-secrets.yml
65+ echo "spring.cloud.aws.region.static: ${{ secrets.AWS_REGION }}" >> $TMP_DIR/application-secrets.yml
66+ echo "spring.cloud.aws.credentials.access-key: ${{ secrets.AWS_ACCESS_KEY_ID }}" >> $TMP_DIR/application-secrets.yml
67+ echo "spring.cloud.aws.credentials.secret-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }}" >> $TMP_DIR/application-secrets.yml
68+ echo "spring.cloud.aws.s3.bucket: ${{ secrets.AWS_S3_BUCKET_NAME }}" >> $TMP_DIR/application-secrets.yml
69+ echo "spring.cloud.aws.stack.auto: false" >> $TMP_DIR/application-secrets.yml
70+ echo "liveblocks.secret-key: ${{ secrets.LIVEBLOCKS_SECRET_KEY }}" >> $TMP_DIR/application-secrets.yml
71+ # application-secrets-server.yml
72+ echo "${{ secrets.APPLICATION_SECRET_SERVER_YML }}" > $TMP_DIR/application-secrets-server.yml
73+ echo "OPENAI_API_KEY: ${{ secrets.OPENAI_API_KEY }}" >> $TMP_DIR/application-secrets-server.yml
74+ echo "TMP_DIR=$TMP_DIR" >> $GITHUB_ENV
75+
76+ # ----------------------------------
77+ # 2. Gradle 테스트 실행
78+ # ----------------------------------
6879 - name : Test with Gradle
69- # 테스트 단계에서 RabbitMQ 연결을 위한 환경 변수 설정
7080 env :
7181 SPRING_RABBITMQ_HOST : localhost
7282 SPRING_RABBITMQ_PORT : 5672
7383 SPRING_RABBITMQ_USERNAME : guest
7484 SPRING_RABBITMQ_PASSWORD : guest
75- run : ./gradlew test
85+ run : ./gradlew test -Dspring.config.additional-location=${TMP_DIR}/
7686
77- # 6. 테스트 결과 요약 출력
87+ # ----------------------------------
88+ # 3. 테스트 결과 요약
89+ # ----------------------------------
7890 - name : Show test results
7991 run : |
8092 echo "==== Test Results ===="
@@ -91,26 +103,29 @@ jobs:
91103 echo "No test results found."
92104 fi
93105
94- # 7. Gradle 빌드 실행 (테스트 성공 시)
106+ # ----------------------------------
107+ # 4. 테스트용 secrets 임시 디렉토리 삭제
108+ # ----------------------------------
109+ - name : Remove temp secrets directory
110+ run : rm -rf ${TMP_DIR}
111+
112+ # ----------------------------------
113+ # 5. Gradle 빌드 (테스트 제외)
114+ # ----------------------------------
95115 - name : Build with Gradle
96116 run : ./gradlew build -x test
97117
98- # 8. GHCR 로그인
99118 - name : Log in to GHCR
100119 uses : docker/login-action@v2
101120 with :
102121 registry : ghcr.io
103122 username : ${{ github.repository_owner }}
104123 password : ${{ secrets.GITHUB_TOKEN }}
105124
106- # 9. Docker 이미지 빌드 & 푸시
107125 - name : Build & Push Docker Image
108126 run : |
109127 IMAGE_NAME=ghcr.io/${{ github.repository }}/zoopzoop
110-
111- docker build -t $IMAGE_NAME:${GITHUB_SHA} .
128+ docker build -t $IMAGE_NAME:${GITHUB_SHA} .
112129 docker tag $IMAGE_NAME:${GITHUB_SHA} $IMAGE_NAME:latest
113-
114130 docker push $IMAGE_NAME:${GITHUB_SHA}
115131 docker push $IMAGE_NAME:latest
116-
0 commit comments