오늘은 주로 트러블 슈팅에 관한 내용이다.
어제 구현한 배포를 오늘 팀 레포에 올리는 과정에서 매우 많은 오류와 직면했다.
사건의 발단
기존 레포에서 배포에 관련된 모든 작업 해줌 -> gradle 버전 맞지 않음 -> 새로운 레포지토리 만듦
결국 모든 작업을 해준 이후 새로운 레포지토리를 만드는게 모든 문제의 시작이였다.
문제1(Runner Token)
Runner를 만드는 과정에서 다음과 같은 코드를 입력했다.
./config.cmd --url https://github.com/rkdgusdnr99/docker_act --token "토큰값"
결과는 다음과 같았다
Cannot configure the runner because it is already configured.
To reconfigure the runner, run 'config.cmd remove' or './config.sh remove' first.
그동안 이 문제가 발생하면 위에 적힌대로 ./config.sh remove 를 입력하고 해당 runner사용을 삭제했다.
하지만 이 레포는 내 레포가 아니였다, 결과적으로 오류가 발생하며 삭제를 실패했다.
Failed: Removing runner from the server
The user 'System:PublicAccess;aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa'
is not authorized to access this resource.
여기에서 Gpt는 다음과 같은 방법을 추천했고, 역시 실패였다.
내 Persnal_token이든 이 팀 프로젝트를 만든 주인장의 Persnal_token이든 모두 실패해버렸다.
./config.sh remove --token YOUR_PERSONAL_ACCESS_TOKEN
여기서 나는 actions-runner 파일을 없앤다는 생각을 하지 못했다.
runner token을 없애는 방법을 찾아봤지만 찾지 못했고,
Docker도 다시 만들고, 주소도 바꿔보고, 중간과정들도 다시 모두 해봤다. 그 결과 엄청난 시간이 소요되었다.
문제1 해결
생각보다 싱겁게 끝났다.
기존의 actions-runner 파일을 지워주고 다시 runner를 해당 EC2 서버에 만들어주면 되는 문제였다.
# actions-runner 파일 삭제
rm -rf ~/actions-runner
하지만.. 너무 고된 과정이였다.
문제2(Docker run)
이전에도 겪었지만 작성하지 않은 오류이다. 찾는게 귀찮으므로 작성해 놓도록 하겠다.
도커가 정상적으로 생성되었지만 작동하지 않고있는 문제이다. 찾아서 켜주기만 하면 된다.
# 모든 도커 컨테이너 확인
docker ps -a
# 사용하지 않는 도커 컨테이너 삭제
docker rm 컨테이너_ID
# 컨테이너 재실행
docker restart 컨테이너_ID
문제3(CI/CD - gradlew test)
아래와 같은 코드가 뜨면서 실패한다.
RandomDriveProjectApplicationTests > contextLoads() FAILED
java.lang.IllegalStateException at DefaultCacheAwareContextLoaderDelegate.java:143
1 test completed, 1 failed
Caused by: org.springframework.beans.factory.UnsatisfiedDependencyException at ConstructorResolver.java:801
Caused by: org.springframework.beans.factory.BeanCreationException at ConstructorResolver.java:654
Caused by: org.springframework.beans.BeanInstantiationException at SimpleInstantiationStrategy.java:171
Caused by: org.springframework.boot.autoconfigure.jdbc.DataSourceProperties$DataSourceBeanCreationException at DataSourceProperties.java:186
가장 직접적인 해결방법은 아래 코드이다. gradlew.yml 파일의 gradlew build를 아래와 같이 바꾸는 것이다.
# Gradle Build (test 제외)
- name: Build with Gradle
run: ./gradlew clean build --exclude-task test
하지만 애초에 test에서 실패했단 뜻은 제대로 프로젝트가 돌아가지 않는다는 뜻이다.
나의 문제는 application.properties에서 DB 설정을 제대로 해놓지 않은 것이였고,
아래와 같이 application.properties를 작성했다.
spring.datasource.url=jdbc:mysql://나의엔드포인트:3306/기본DB이름
spring.datasource.username=나의USERNAME
spring.datasource.password=나의패스워드
spring.jpa.hibernate.ddl-auto=update
그래도 되지 않았지만 이는 RDS를 제대로 만들지 않아서였다.
위 사진을 보면 포트 3306으로 0.0.0.0/0 과 0/::0 을 열어주는데,
나는 원래의 보안 그룹을 맹신해서 위 과정을 생략해버렸다.
보안 그룹 문제까지 해결하니 gradlew.yml의 build.gradlew 문제를 해결할 수 있었다.
'프로젝트 > RanDrive' 카테고리의 다른 글
Random-Drive-Project 기본 MVC 구현(랜덤 네비게이션) (0) | 2023.10.14 |
---|---|
Random-Drive-Project 기본 MVC 구현(기본 네비게이션) (1) | 2023.10.14 |
Github Actions를 통한 CI/CD 구축(Docker + EC2) (0) | 2023.10.10 |
Docker와 EC2 사용한 배포 (0) | 2023.10.08 |
Docker 적용 (1) | 2023.10.07 |