BackEnd/Jenkins

[Jenkins] Jenkins에서 TestCotnainer가 동작하지 않는 문제 ("Could not find a valid Docker environment")

샤아이인 2022. 12. 14.

이번에 Jenkins Pipeline을 구축하여 CI 과정을 수행하던 도중, gradle test가 정상적으로 수행되지 않는 문제를 경험하였다.

 

1. 문제 상황

우선 다음 출력된 로그를 살펴보면 다음과 같다.contextLoads() 부터 FAILED인것으로 미루어 보았을 때

contextLoads() 부터 FAILED인것으로 미루어 보았을 때 든 생각은 2가지 였다.

1) DB와 connection이 정상적으로 연결되지 않았다.

2) TestContainer가 정상적으로 생성되지 않고있다.

 

처음에는 1번 문제인줄 알고 계속 properties.yml을 수정하고, 설정을 변경함으로써 해결하려 했지만... 2일동안 삽질만 하고 있었던것 같다.

 

다시 test를 수행하면서 log를 debug로 수행하였더니 다음과 같은 로그를 확인할수 있었다.

./gradlew test --debug

 

Docker environment가 이상하구나??

 

그럼 이말은

1) Docker가 실행중이지 않거나

2) 어떠한 이유에서 Docker 컨테이너를 시행하지 못하고 있다는 의미라 생각됬다.

 

하지만 다음 명령어를 통해 확인해본 결과 Docker는 active상태임이 확실했다.

systemctl status docker

 

남은건 하나, Docker 컨테이너 자체가 안뜨는것 같은데??

 

2. 해결 방법

이 오류는 Root권한 없어서 생기는 문제였습니다!

 

Linux(EC2에서 사용중)를 사용하는 경우 도커는 컨테이너를 만들 수 있는 권한이 필요하며, 테스트 컨테이너는 Runtime때 이 권한이 없기 때문에 컨테이너를 생성할수가 없었던 것 입니다.

 

그래서 핵심은 sudo 없이 도커를 실행할 수 있게 만들어야 하는것 입니다!

우선 아직은 docker ps를 수행했을 때 권한이 없다 나올것 입니다.

docker ps

 

다음과 docker group을 생성해주고, 연결되있는 user와 jenkins를 docker group에 추가해줍시다.

sudo groupadd docker
sudo usermod -a -G docker ec2-user
sudo usermod -a -G docker jenkins
sudo service docker restart

 

그룹이 잘 추가되었는지 확인해봅시다!

sudo cat /etc/group | grep -e jenkins -e ec2-user

docker그룹에 ec2-user와 jenkins가 추가된것을 확인할 수 있습니다.

 

마지막으로 권한을 추가해줍시다!

sudo chmod 666 /var/run/docker.sock

이후 ec2에 접속을 한번 끊었다가 재접속 해주세요!

 

이러면 정상적으로 테스트가 수행되는 것을 확인할 수 있었습니다.

제가 구축한 Pipeline이 정상적으로 동작하게 되었습니다 ㅎㅎ

 

혹시 만약 이래도 안되면, Jenkins에서 sudo 권한을 아예 부여해버리는 방식도 있을것 입니다.

ec2 에서는 다음과 같이 sudo를 vi로 열어서

sudo visudo

 

다음과 같이 문장을 추가해주면 됩니다.

## Allow root to run any commands anywhere
root    ALL=(ALL)       ALL

jenkins ALL=(ALL)       NOPASSWD: ALL # 추가된 문장

 

따로 EC2로 집적 접속해서 실행 해봤는데, 이또한 정상적으로 수행되었습니다.

 

3. 참고

https://stackoverflow.com/questions/61108655/test-container-test-cases-are-failing-due-to-could-not-find-a-valid-docker-envi

 

Test Container test cases are failing due to "Could not find a valid Docker environment"

I am very new to using test containers. My test is failing with below exception. Running com.mastercard.example.testcontainers.testcontainersexampple.DemoControllerTest 2020-04-08 14:27:08.441 IN...

stackoverflow.com

https://1gold.tistory.com/83

 

JENKINS 다른 계정 홈디렉토리

AWS의 기본 사용자는 ec2-user이다. ec2-user의 기본 홈디렉토리는 /home/ec2-user이다. 젠킨스 배포시 사용되는 사용자는 jenkins이다. jenkins의 기본 홈디렉토리는 /var/lib/jenkins이다. 하지만! 내가 기존에 설

1gold.tistory.com

 

댓글