본문 바로가기
프로젝트/RanDrive

팀 Repo에 Docker및 CI/CD 구축

by HWK 2023. 10. 11.

오늘은 주로 트러블 슈팅에 관한 내용이다.

어제 구현한 배포를 오늘 팀 레포에 올리는 과정에서 매우 많은 오류와 직면했다.

 

사건의 발단

기존 레포에서 배포에 관련된 모든 작업 해줌 -> 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 문제를 해결할 수 있었다.