2009-06-04 2 views
7

허드슨을 빌드 서버로 실험하기 시작했습니다. 전 Subversion을 사용하고 매분마다 폴링하도록 구성했습니다. 내가보고있는 문제는 리비젼 10의 빌드가 5 분이 걸리고 그 시간 동안 5 커밋이 있다면 허드슨은 리비전 15를 다음에 빌드 할 것입니다.Hudson을 모든 개정판을 빌드하도록 구성 할 수 있습니까?

모든 개정판을 빌드 할 수있는 방법이 있습니까?

+1

허드슨이 성능상의 문제를 일으키지 않도록주의해야합니다. 예를 들어, 몇 초마다 커밋이 발생하는 반면 허드슨 빌드는 몇 분이 걸립니다. 곧 빌드 대기열이 플러드됩니다. – toolkit

+1

내 인생에서 나는 이것이 왜 필요한지 알 수 없다. 왜 코드베이스의 현재 상태 이외의 것이 중요할까요? – sal

+3

안녕하세요,이 이유는 테스트입니다. 우리는 회귀 테스트를 통해 각 개정을 넣는 것을 목표로합니다. 따라서 각 개정판을 제작하지 않을 경우 각 개정판을 테스트하지 않습니다. rev n이 작동하지만 rev n + 10이 아니며 그 사이의 수정을 테스트하지 않은 경우 문제가 발생합니다. 어떤 변화가 회귀를 일으켰습니까? – CodeBuddy

답변

4

허드슨 아직이 기능을 가지고 있지 않지만, 메일 링리스트에서 몇 번 물었다. 당신은 정확히 각 개정 구축 할 수있는 몇 가지를해야 할 issue 673

+0

그 버그를 찾았습니다. 버그 추적기가 옮겨졌습니다. 문제는 http://issues.hudson-ci.org/browse/HUDSON-673에 있으며 아직 해결되지 않았습니다. – Bluehorn

+0

감사. 나는 링크를 업데이트했다. –

1

빌드 구성의 SCM 부분에는 빌드 트리거 섹션과 옵션 "스크립트에서 원격으로 트리거 빌드"가 있어야합니다. 이 옵션 옆에있는 도움말 정보에 따르면 커밋 후 작업을 스크립팅 할 수 있으므로 모든 커밋은 새 빌드를 실행합니다. 허드슨은 빌드 큐를 가지고 있기 때문에 모든 개정판을 만들어야합니다. 여기

당신에게 도움이 될 수있는 링크입니다 : https://hudson.dev.java.net/build.html

다음 매개 변수를 사용하여 빌드 작업을 시작하는 방법 예 (자세한 내용은 내 의견을 참조)입니다 : http://wiki.hudson-ci.org/display/HUDSON/Parameterized+Build

+0

직접 작업 할 것이라는 확신이 들지 않습니다. 첫 번째 커밋은 빌드를 트리거 한 다음 3 커밋 트리거 3은 첫 번째 완료 전에 빌드됩니다. 불행하게도 대기열의 두 번째 빌드는 업데이트를 수행하고 최신 버전을 빌드합니다. 다음 빌드도 마찬가지입니다. 리비전 번호를 빌드 요청에 전달하고 업데이트 중에이 번호를 사용할 수있게하려면 무엇이 필요합니다. –

+1

네 말이 맞아, 나는 그 명백한 시나리오에 대해 생각해 보지 않았다. 그러나 hudson 문서에서 볼 수 있듯이 매개 변수를 사용하여 빌드 작업을 호출 할 수 있으므로 RevisionToBuild 빌드 문자열 매개 변수를 정의하고 다음과 같은 스크립트에서 설정할 수 있습니다. "http : // server/job/myjob/buildWithParameters? RevisionToBuild = 1234 "물론 svn 저장소 경로를 수정하여 해당 매개 변수를 사용하십시오. – grapkulec

+0

하지만 빌드 대기열을 하나의 작업으로 깊게 만들 수 있습니다 (주어진 빌드 실행자가 "실행 프로그램 #"을 설정 한 경우). 그러면 병렬 빌드가 더 빠르더라도 결과가 나타납니다. – MattyT

10

참조 :

  • 저장소 URL에 ${REVISION} 매개 변수를 추가하여 작업에 REVISION 문자열 매개 변수를 추가를
    예 : https://server/path/myproject${REVISION}
  • REVISION 변수가 URL에서만 확장되기 때문에 로컬 폴더의 이름을 'myproject'로 설정합니다 (이전 예 참조). 그러나 폴더를 만들 때 허드슨은 확장하지 않습니다. resu 라는 이름의 폴더에 lting : myproject${REVISION}
  • 트리거로부터 매개 변수화 된 빌드처럼, 훅을 후 커밋 :

      : /usr/bin/wget \ --auth-no-challenge \ --no-check-certificate \ --user=me \ --password=mypasswd \ https: //server/path/job/jobname/buildWithParameters?delay=0sec\&REVISION=%40$REV \ -O /dev/null

    수동으로 빌드를 실행하려는 경우, 당신은 두 가지 가능성을 가지고

  • HEAD 개정판을 작성하려면 REVISION 매개 변수를 비워 두어야합니다. 특정 개정판을 작성하려면 012N을 입력해야합니다 (예 : @ 1234).
  • 이 모든 트릭은 서브 버전 플러그인 get revision NNN from repository at URL[email protected]을 해석하는 사실에 의존하기 때문에

@ 기호는 매우 중요합니다. @을 잊어 버린 경우 Subversion은 폴더 https://server/path/myprojectNNN을 찾을 수 없다고합니다. 따라서 wget 명령에서 %40REVISION=$REV 사이에 넣어야합니다. %40@의 이스케이프 문자입니다.

0

확인 모든 허드슨에 내장되어 커밋 만들기의 핵심은 "매개 변수화 된 빌드"이며, 만 트리거가 다른 매개 변수 값을 빌드하는 경우, 허드슨은 새로운 빌드이고 빌드 큐에서 개최해야한다고 생각합니다.아니면 그것이이 의미 빌드 이전

예와 비교있어 고려해야하기 때문에 허드슨에 의해 기록되지 않습니다 당신은 "Build Now"를 클릭하여 세 번 빌드를 시작하고 "para"를 "null"로 남겨 둘 수 있습니다. 처음 두 개의 빌드 만 허드슨 대기열에 있음을 알 수 있습니다. 세 번째 것은 무시 될 것입니다 : P cool하지만 어떤 문서에서는 발견되지 않았지만 시간에 대한 실험과 함께 발견되는 것은 정말 좋지 않습니다. (

0

위의 fchateaus 접근 방식을 사용하여 Mercurial과 작동하도록 수정했습니다.

중앙 서버에서 .hg/hgrc를 편집하고 변경 그룹 후크를 넣어야합니다. 변경 그룹은 첫 번째 변경 집합을 HG_NODE 환경 변수로 설정하기 때문에 hg 팁을 사용해야합니다. 진짜 팁 노드를 잡고 대신 URL을 통해 전달하십시오 .1 라이너에서해야 할 약간의 속임수이지만, 알아 냈습니다.

이것은 허드슨이 에서 실행될 때 수행 할 작업입니다. Windows.

[hooks] 
# this uses wget to hit the hudson url responsible for starting a build - %HG_NODE% only gets first changeset of changegroup, so use hg tip to grab changeset most recently added instead 
changegroup.hudson = for /f "tokens=*" %G IN ('hg tip --template {node}') DO "C:\Program Files (x86)\UnxUtils\usr\local\wbin\wget" --non-verbose --spider http://HudsonServer:8080/job/{Repository}/buildWithParameters?HgRevId=%G | ECHO Result of Hudson Polling Request For Node %G 
# TODO: when Hudson implements polling with parameters, change to something like this 
#changegroup.hudson = for /f "tokens=*" %G IN ('hg tip --template {node}') DO "C:\Program Files (x86)\UnxUtils\usr\local\wbin\wget" --non-verbose --spider http://HudsonServer:8080/job/{Repository}/polling?HgRevId=%G | ECHO Result of Hudson Polling Request For Node %G 
관련 문제