groovy로 특정 빌드 노드의 정해진 executor에서 빌드 수행하는 방법??

287 views
Skip to first unread message

joonhee park

unread,
Mar 21, 2013, 1:39:19 AM3/21/13
to jenkin...@googlegroups.com
오랜만에 한국 사용자 그룹에 글을 남깁니다. 
다들 바쁘신지 요새 활동들이 뜸하시군요.

제가 요즈음 jenkins-ci를 하부 인프라로 활용한 빌드 시스템을 하나 개발해보려고 하고 있는데요.

jenkins-ci의 기능들을 원격에서 제어하는 인터페이스로 groovy와 jenkins-cli.jar를 활용해보려 하고 있습니다.
(서울 meetup행사 때, 장승희 선임께서 groovy로 jenkins를 제어하는 tip을 공유해 주셨던게 기억이 있어서...)

하다가 보니 몇 가지 정리가 안되는 부분들이 있어서 이렇게 글을 올려봅니다.

** 특정 빌드 노드의 특정 executor에서 빌드를 진행을 수행하도록 하는 방법이 있는가?

   구현하고자 하는 시스템의 특징중 하나가 빌드가 실패한 경우 원인을 해결하고 다시 시작하면  처음부터 
   다시 빌드가 진행되는 것이 아닌 빌드가 실패하여 중단되었던 지점부터 다시 빌드를 수행되어야 합니다.
   이게 가능하기 위해서는 빌드 재시작시 실패된 빌드가 있었던 worksapce에서 빌드가 수행이 되어야 하는데요.
   특정 빌드 노드와 executor를 지정하여 빌드를 수행할 수 있어야 합니다. 

** 빌드노드 추가/삭제가 가능한가?

    원격지에서 1회성으로 빌드 노드를 추가하여 사용하고, 삭제하는 것에 대한 방안이 있는가가 고민입니다.
    jenkins-cli.jar에서 connect-node 인터페이스가 제공되는 것은 확인하였습니다만 node를 추가하는 인터페이스는 없다군요.
    groovy script로 node를 추가하는 인터페이스가 구현가능한지 궁금합니다. 
    ssh 방식으로 사용자 id와 password등을 넘겨 받아 생성할 수 있으면 합니다.

그 외에 groovy로 jenkins를 제어하는데 참고할만한 자료가 있으면 공유 부탁드리겠습니다.

감사합니다.

joonhee park

unread,
May 13, 2013, 1:54:48 AM5/13/13
to jenkin...@googlegroups.com
오랜만에 글 남깁니다. 어느 덧 2013년도 중반을 향해 달려가고 있습니다.

제가 올렸던 질문에 대해 자문 자답합니다~
비슷한 과업이 있으신 분들에게 도움이 되셨으면 좋겠습니다.

1. 특정 빌드 노드에서 수행하는 방법

nodelabel plugin을 사용하면, 빌드 실행 시점에서 수행할 빌드 노드를 지정할 수 있습니다.
저희가 현재 구현하고 있는 시스템에서는 이를 사용하여 원하는 빌드 노드에서 빌드가 수행되게끔 처리하고 있습니다.

2. 빌드 노드 추가/삭제 및 상태 제어

삭제, 상태 제어는 jenkins-cli로 비교적 쉽게 처리 가능합니다. (delete-node, online-node, offline-node)

노드 추가는 조금 복잡한데 groovy script를 사용하여 구현할 수 있습니다.
제가 행한 방법은 jenkins-ci 풀소스 디버깅 환경을 구성해 놓고 노드 추가를 하면서 어떤 흐름을 타는지 파악한 이후에,
이를 groovy script로 구현하였습니다.

Jenkins-CI 한국 커뮤니티가 보다 활발해졌으면 하는 기대가 있는데, 쉽지는 않군요.
번개라던가 이런거 한번 있었으면 좋겠는데...

2013년 3월 21일 목요일 오후 2시 39분 19초 UTC+9, joonhee park 님의 말:

장승희

unread,
Jul 18, 2013, 3:28:08 AM7/18/13
to jenkin...@googlegroups.com
최근 서버 인프라 이전으로 폭풍같은 나날을 보내고 이제야 정신을 좀 차렸습니다. ㅠㅠ
혹시 도움이 될지 몰라 코멘트를 남깁니다.

executor 지정은 플러그인으로도 간단하게 처리하기가 어려운 문제입니다.
저같은 경우에는 안정및 관리 편의성등 여러가지 이유로 인해 노드하나당 executor를 하나만 운영합니다.
한 대의 서버에 여러개의 executor가 필요한 경우에는 노드를 하나더 추가하는 방식으로 운영중입니다.

원격지에서 1회성으로 빌드노드를 추가하는건 job을 하나 만들어서 해당 job이 트리거 되면 임시노드가 생성되도록 하시면 될거 같습니다.
아래 API를 사용하시면 노드를 추가 삭제 할 수 있습니다.
Hudson.getInstance().removeNode()  //노드 삭제
Hudson.getInstance().addNode(new DumbSlave()) // 노드 추가

joonhee park

unread,
Jul 23, 2013, 2:19:17 AM7/23/13
to jenkin...@googlegroups.com
다들 바쁘게 사시는군요. 
저도 요새 과제 막바지 중에 있습니다.

버젼낼때 필요한 cherry-pick merge 협업을 원활이 지원하는 특화 빌드 시스템을 만들고 있습니다.
여러 다양한 시나리오를 수용해야 해서 어려운 점이 많았습니다만, 구축하고 보니 맘에 드는군요~

2013년 7월 18일 목요일 오후 4시 28분 8초 UTC+9, 장승희 님의 말:

Kyunam Jo

unread,
Jul 23, 2013, 8:33:02 PM7/23/13
to jenkin...@googlegroups.com
cherry-pick merge 빌드라면 제가 회사에서 쓰는 방법과 유사하네요 전 gerrit에서 git pull로 소스를 반영후 빌드 검증을 하고있습니다 ^^ 특별히 cherry-pick을 하시는 이유가 있으신지요?

joonhee park

unread,
Aug 6, 2013, 9:37:08 PM8/6/13
to jenkin...@googlegroups.com
동일 코드 기반으로 여러 제품이 나가야 하다보니, 서로 다른 제품 구성이 필요합니다.

제품에 적용할 피쳐를 반영하는 Commit을 반영하기 위한 작업이라 생각하시면 될 것 같네요.

제품 브랜치를 생성하고 베이스 브랜치에서 제품 브랜치에 반영할 커밋들을 cherry-pick 머지 합니다.

2013년 7월 24일 수요일 오전 9시 33분 2초 UTC+9, Kyunam Jo 님의 말:

Shane Kim

unread,
Oct 23, 2013, 2:16:43 PM10/23/13
to jenkin...@googlegroups.com
꽤 늦은 감도 있고 도움이 될지도 모르겠지만 짧게 답변 올립니다...


On Sunday, May 12, 2013 10:54:48 PM UTC-7, joonhee park wrote:

1. 특정 빌드 노드에서 수행하는 방법
 
slave node를 작성할때 unique한 label을 제공한후 특정한 job에서 그 label만을 사용하라고 하시면 간단하게 처리가 되죠. 더 자세한 내용은 집에 돌아간 후에 업데이트 하겠습니다.

2. 빌드 노드 추가/삭제 및 상태 제어

이런 식으로 slave를 사용한 적이 없어서 자세한 상황은 잘 모르겠지만, https://wiki.jenkins-ci.org/display/JENKINS/Swarm+Plugin Swarm플러그인이 그 상황을 도와준가도 사람들이 말을 하더군요. 저간은 경우는 virtualbox를 사용해 virtual environment를 미리 만들어서 사용하고 있습니다. virtualbox plugin이 있지만 그건 작동이 잘 되지 않아서 만약 target environment가 linux기반이면 http://www.vagrantup.com/을 사용하여 virtualbox를 vigrant virtual envrionment로 변형을 시킨후에 vigrant plugin을 사용하시면 됩니다. 전 windows의 virtual box를 사용하기 때문에 vigrant를 사용할 수가 없었죠.

virtualbox를 사용하면 새로운 hardware가 필요 없을 테니 프로젝트 시작할때 미리 virtualbox envionment를 만들어서 사용하시면 되지 않을까요?

Kyunam Jo

unread,
Oct 23, 2013, 7:02:14 PM10/23/13
to Shane Kim, jenkin...@googlegroups.com

음 늦은감이있지만 파라메터 빌드에 빌드노드값을 정해서 빌드가능합니다 ^^

2013. 10. 24. 오전 3:16에 "Shane Kim" <shins...@gmail.com>님이 작성:
--
Google 그룹스 'Jenkins Korean user group' 그룹의 주제에 가입했으므로 이 메시지를 받으셨습니다.
이 주제에서 탈퇴하려면 https://groups.google.com/d/topic/jenkinsci-kr/cfL2KsHEkMw/unsubscribe을(를) 방문하세요.
이 그룹 및 그룹의 모든 주제에서 탈퇴하려면 jenkinsci-kr...@googlegroups.com에 이메일을 보내세요.
더 많은 옵션을 보려면 https://groups.google.com/groups/opt_out을(를) 방문하세요.
Reply all
Reply to author
Forward
0 new messages