이번에 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. 참고
댓글