본문 바로가기
개발 잡담

Jenkins 용량 부족, 결국...캐시 삭제(자동화) ㅡㅅㅡ

by 휴일이 2024. 6. 11.

 

 

 

언젠가 aws 에서 t2.micro 인스턴스를 사용할 때 Jenkins 서버가 계속 끊겼었다.

이유는 컴퓨팅 리소스 부족..:(

 

현재 테스트 서버(t2.medium, 볼륨 50GiB)에서 Jenkins 를 사용하고 있는데 노드 용량이 부족하다는 경고 메시지가..'0';

게다가 얼마 전 연차를 즐기고 있는데 배포가 안 된다는 전화가 와서 확인해보니 노드가 내려감..ㅠ

수동으로 노드 올려서 배포하긴 했지만 가용 용량이 넘나 간절했다.

당장 인스턴스나 볼륨을 업그레이드하긴 힘든 여건이라..부득이하게 서버 내에서 어떻게든 용량을 확보해야한다.

 

 

그래서 일단 "캐시 삭제"로 용량을 확보하기로 했다.

빌드나 배포 시간이 늘어나는 문제는 있지만 당장 젠킨스가 동작하지 않을 가능성이 있기 때문에..캐시 삭제가 당장은 더 중요했다.

이것도 일단 일일히 명령어 치기 귀찮으니까 "자동화"하기로 했다.

 

 

 

일단

1. 젠킨스 서버(on docker)에서 gradle 캐시 삭제

2. ubuntu 서버 에서 docker 캐시 삭제 

가 필요했다.

 

젠킨스 서버(on docker)에서 gradle 캐시 삭제

처음엔 ansible-playbook 으로 배포하는 설정 파일에 gradle 캐시 삭제 명령줄을 추가하려고 했으나

배포와 캐시 삭제는 좀 다른 성격이라고 생각했고 용량이 늘어나면 캐시 삭제하는 명령을 삭제할 수도 있다고 생각하여

remove-cache-ansible.yml 파일을 따로 만들어 실행시켰고

 

ubuntu 서버 에서 docker 캐시 삭제 

이건 ubuntu 위에서 실행해야하는 거라 ansible-playbook 명령들이 끝난 후

docker system prune -f 명령을 추가시켰다.

 

 

 

 

(이름은 좀 수정했음)

 

저걸 ssh server 명령할 때 실행시켰다.

docker system prune -f 명령은 캐시 삭제 명령이니 ssh 서버 명령으로 실행시키는 건 좀 안 어울리지 않나 생각도 했지만

1. 어차피 젠킨스 서버 명령 중 캐시 삭제 명령이 있는데 이건 Jenkins 서버가 실행해야해서 ssh-server 명령으로 들어가야 맞음.

2. 그러면 그냥 배포 후 따라가야할 명령을 다 저기로 넣는 게 낫겠다고 생각.

3. 배포 성공 후 command 를 실행시키기 위해 다른 플러그인을 설치하면 된다고 보긴 했는데(확실치 않음), 플러그인을 설치하면 또 용량을 잡아먹어서...ㅡㅅㅡ 의미 없는 짓이라고 생각함.

 

 

 

 

어쨌든 이렇게 캐시 삭제도 자동화시켜서

귀찮게 한 번씩 일일히 명령어 치는 일이 없어지도록 했다..ㅎ;;

728x90