Jenkins의 build queue를 살펴볼 일이 생겼다.
1. Build Queue
우선 Jenkins에서의 build queue는 수행될 job이 수행되기 전에 쌓이는 공간으로 여기서 대기하다가 job이 executor (slot)에 들어갈 수 있는 상태(executable)가 되면 executor로 이동된다.
Executor에 빈 slot이 없어서 실행되지 못하는 상황에 build queue에 job이 쌓이기도 하지만 동일한 이름의 job이 실행중인 경우 같은 job이 build trigger 된다면 이전에 실행중인 job이 종료될 때 까지 build queue에서 대기한다.
2. Build Queue를 사용하려는 이유
자동화에 Jenkins를 사용하고 있는데 remote로 build trigger를 하려다보니 무작정 job을 trigger 할 수 없다. 현재 build queue에 어떤 job이 있는지 executor에는 어떤 job 이 있어서 build 중인지를 확인하고 나서 적합한 job을 trigger 하는게 올바른 접근일 것이다.
3. Build Queue 접근
Jenkins에 authentication 설정이 걸려 있다고 해도 build queue api 접근은 가능하다. 이 페이지가 공식적으로 제공되고는 있는데 API에 대한 설명 같은게 없어서 일단은 구현하면서 대략의 구조를 살펴보게 되었는데, 제공되는 API는REST 방식으로 제공된다고 하는데 HTTP / get으로 간단히 접근할 수 있다.
4. Build Queue 구조
id
buildableStartMilliseconds
task (color, name, url)
inQueueSince
stuck
blocked
params
why
actions
┣━━━━ parameters (name, value)
┗━━━━ causes (shortDescription, userId, userName)
buildable
문서가 없어서 각 요소의 정확한 내용은 아직 알 수가 없지만 Jenkins developer group에 문의를 한 상태다. 이름과 얻어낸 값으로 예상한 내용은 아래와 같다.
Key
Type
Description
Note
id
Integer
Trigger된 job의 ID
계속 변경되는 값으로 보임
buildableStartMilliseconds
Long
?
알 수 없음
task > color
String
상태에 대한 이미지
이전 상태 나타내는 이미지로 보임
task > name
String
Job의 이름
–
task > url
String
Job의 url
–
inQueueSince
Long
Build Queue에 쌓인 시간
–
stuck
Boolean
막혔는지 여부
Build Queue에 쌓인 시간이 오래되면 true로 변경됨
blocked
Boolean
?
stuck과의 차이를 알 수 없음
params
String
Trigger 될 때의 parameter
줄바꿈된 문자열로 나열되어 활용 어려움
why
String
Build Queue에 쌓인 이유
동일한 job이 실행중인지 등의 이유에 대한 설명
actions > parameters > name
String
Parameter의 name
–
actions > parameters > value
String
Parameter의 value
–
actions > causes > shortDescription
String
Job 실행에 대한 간단한 설명
–
actions > causes > userId
String
Job을 실행한 사용자의 ID
–
actions > causes > userName
String
Job을 실행한 사용자의 이름
–
buildable
Boolean
Build 가능 여부
–
참고
actions의 parameters 항목의 경우 job에 parameter를 받는게 아니라면 값이 비어있는게 아니라 아예 생성되지 않는다.
이것은 parameter가 Jenkins 기본 기능이 아니라 parameterized plugin을 이용하는 거라 그런 것으로 생각된다.