본문 바로가기
🤵🏼‍♂️Jenkins

Jenkins 동시 빌드 제한하기

by 캔 2024. 5. 15.

 

 

지난주 개발 서버 배포 후 개발 서버에 접속이 안 된다는 연락이 와서 서버를 확인해 보니 정말 서버에 들어가지지 않았다. 톰캣이 제대로 실행되고 있지 않았는데 이는 젠킨스에서 배포를 두 번 하면서 파이프라인 마지막 스텝인 서버 재시작이 두 번 이뤄지면서 생긴 일이었다.

 

현재 해당 프로젝트(잡)는 깃허브에 폴링 방식으로 최신 커밋을 확인하고 새로운 커밋이 제출됐다면 빌드를 실행한다. 그런데 어찌 된 일인지 같은 커밋인데도 불구하고 다른 커밋으로 인식하여 새로운 빌드를 수행했다. 그러다 보니 위에서 언급한 서버 재시작 스텝이 겹쳐서 실행돼 버린 것이다.

 

같은 커밋을 새로운 훅으로 인식한 문제는 일단 차치하고 이미 빌드가 시작된 프로젝트에서 또다시 빌드가 이뤄질 수 있는 것은 문제다. 하나의 작업에 대해 두 개의 스레드가 작업을 수행하면서 리소스를 낭비하고 이번 사례처럼 서버 재시작 두 번 하는 예측할 수 없는 상황을 만들어 낼 수 있기 때문이다.

 

젠킨스 레퍼런스를 확인해 본 결과 동시 빌드를 제한하기 위해서는 프로젝트 구성에서 General - Do not allow concurrent builds를 설정해 주면 된다고 한다.  conccurrent builds란 같은 프로젝트 빌드를 동시에 실행하는 것을 의미한다. 동일한 빌드를 분산 환경에서는 여러 노드들이 동시에 실행하거나 나의 경우처럼 하나의 노드에서 같은 잡을 여러 개 실행하는 경우를 가리킨다.

 

 

이렇게 해주면 동시 빌드가 발생하지 않게 되며, 이미 빌드가 실행되었을 때 기존 빌드를 중단하고 새로운 작업을 실행하려면 아래의 Abort previous builds를 설정하면 된다.