2010-11-23 2 views
3

우리는 최근 Hudson을 지속적으로 통합하여 자동화 된 테스트, 정적 분석 등의 이점을 누리기 시작했습니다. 다음 단계는 성가신 수동 릴리스 프로세스를 진행하는 것입니다. 내가 상상 한 것은 2 단계 프로세스이다.Hudson + Ant + Subversion을 사용한 자동화 된 릴리스

  1. 릴리스 라인. 우리 개발 라인이 안정화되면, 우리는 지회를하고 싶습니다. 저밀도의 수요가 많은 사용자가 있기 때문에 정식 릴리스 이후 약간의 활동이 종종 발생하며 릴리스 라인의 시작 부분에서 약간의 중단 및 개발이 이루어집니다 (우리는 이것에 대한 메인 라인 개발을 막고 싶다.) 편리한 시간에 분기하는 연습을 한 다음 안정화 윈도우 (하루 또는이 시간)를 허용하는 것이 합리적이다. (이 작업은 서브 버전에서 수행되며 일반적으로 분기 이전에 개발 릴리스에 태그를 지정한 다음 분기하고 병렬 개발을 수행합니다)

  2. 분기에서 릴리스를 잘라냅니다. 현재 관련이 있습니다

    1. 속해있는 릴리스 번호를 지정하는 "fixup"비트입니다.
    2. 재치
    3. 태그
    4. 수출
    5. "오류 복구"을 "은 devel/스냅 샷"릴리스 번호를 반환의
    6. 비트를 구축 할 수 있습니다.
    7. 재치
    8. 허드슨이 뭔가를 운용 할에

그래서 깨끗하게 어떻게 우리를 할 수 있습니다

  • 허드슨에서 분기 작업을 실행하는 지점 나무, 새 릴리스 제공 분기 이름을 생성하고 새로운 Hudson 작업을 생성하여 해당 분기에 대한 새로운 연속 빌드 라인을 만듭니다. (기존 -trunk 구성의 복사본에 가깝지만 일부 작업 영역 이름과 사물을 대체해야합니다 ...)

  • 논리는 Subversion과 상호 작용하기 위해 어디에 속합니까? (아마도 개미 스크립트에있을 수 있으며 별도의 스크립트 일 수 있으며 허드슨/플러그인도이 논리를 제공하는 것으로 보입니다.)

  • 허드슨/보조 프로세스에 대한 사용자/권한에 대한 생각 쓰기 모드에서 repo?

  • 위의 질문도 마찬가지입니다.이 같은 논리를 자동화하기 위해 릴리스 플러그인을 사용할 수 있습니까?

    편집 추가 ...

나는 허드슨 및 릴리스 플러그인 설명서를 정독했지만, 오히려 드문 드문 그리고 엔드 - 투 - 엔드에서 뻗어 일을 많은 예제가 없습니다 : "Maven을 고려해 보셨습니까?" 답변 ... 고맙습니다. Maven은 아마도 적절한 장기적인 솔루션이지만 Maven의 정확한 제약 조건으로 이동하고 기술 담당자를 교육하는 것은 모든 실행과 함께 빌드 시스템 전환이 가능하지 않음을 이해합니다. 가까운 장래에 아마도 앤트와 약간의 팔꿈치 기름으로 이것을 할 수있는 방법이있을 것입니다 ...

+0

Maven을 사용 해본 적이 있습니까? Maven에서는 테스트에서 배포로 대상을 변경했습니다. :-P –

+0

@Peter Lawrey : 우리는 Maven을보고 있습니다. 몇 년 전 Maven 프로젝트에서 불에 타거나 좌절 한 것을 인정합니다. 나는 이것이 오래된 뉴스라고 들었고, Maven으로의 전환을 살펴 보겠다. 그러나 장기적인 것일 것이다. (안정성/생산성 문제를 구축하라.) – andersoj

+0

Maven을 고려하지 말라. 메이븐 (Maven)은 끔찍하고 부서지며 딱딱하고 무가치하고 바보입니다. 당신은 쉽게 자신을 잘 할 수 있습니다. –

답변

1

단기 개미 기반의 프로세스

을 감안할 때 당신의 Ant 빌드 프로세스 약속 (그 잘못된 것은 당신이 놓치고있는 케이크를 제외하고 없다) 난 당신이 메이븐을 반영하는 것이 좋을 것 접근하지만 앤트 (Ant) 내부에서 해보십시오. 그럼 철저하게 read of this article that shows how to use SVNAnt 있습니다. @ 피터 Lawray 언급했듯이 장기

에 대한

이상적인 솔루션, Maven은 여기에 당신의 친구입니다. 특히 프로젝트의 "금 릴리스"버전으로 Subversion 저장소에 태그를 지정하는 프로세스를 관리 할 릴리스 플러그인을 살펴보십시오. 근본적으로, 당신이 당신의 이슈를 검증하기위한 기능 테스트를 포함하여 전체 빌드를 수행하면 Maven이 Subversion repo에 태그를 지정하고 마지막으로 프로젝트 pom.xml 파일을 실행하고 다음 레벨로 다시 버전을 변경합니다 (스냅 샷으로).

빌드 프로세스 측면에서 Hudson은 Maven과 함께 즐겁게 작업하고 Maven pom.xml에 지정한 순서대로 이슈 (JAR, WAR, EAR 등)를 빌드하고 테스트합니다.

원하는 경우 SeleniumRC를 연결하고 다중 브라우저 자동 기능 테스트 환경을 제공 할 수 있습니다. 메이븐 (Maven)은 빌드에서 아티팩트를 빌드 서버에 배포 한 다음 릴리스 프로세스에 의한 마지막 서명으로 후속 기능 테스트에 이르기까지 모든 것을 처리합니다.

관심이 있으시면 blogged a little about this입니다.

+0

+1 Maven은 우리에게 장기 목표입니다. 하지만 우리는 Ant를 사용하여 최소한의 파괴적인 솔루션을 필요로하고 개발자의 정상적인 작동 모드에 큰 영향을 미치지 않아야합니다 ... – andersoj

+0

@andersoj 응답에서 내 대답을 편집했습니다 –

+0

@Gary Rowe : 훌륭한 자료, 나는 어떻게해야할지 모르겠다. 나는 그것을 켜지 않았다 ... 나는 SVNAnt의 주변을 알고 있었지만 그 기능 세트의 범위를 깨닫지 못했다. 다른 참여자를 유치 할 순간에 질문을 열어 두지 않겠습니다. StackOverflow에 영구적 인 홈 페이지를 갖기 위해 일부 콘텐츠를 가져올 기회를주세요. c.f. answer.7565/why-is-linking-bad와 msmvps com/blogs/jon_skeet/archive/2009/02/17/answering-technical-questions-helpfully.aspx – andersoj

1

이것은 당신이 제 위치에 maven을 가질 때까지 해결책으로 만들어졌습니다.

모든 작업 (개미 및/또는 배치/셸 스크립트)을 수행하는 스크립트를 만들어야한다고 생각합니다. Batch Task plugin을 살펴보십시오. 이렇게하면 작업의 현재 작업 영역에서 릴리스를 실행할 수 있습니다. 귀하의 스크립트는 모든 작업을 수행하기위한 것입니다. remote api을 사용하여 현재 작업의 사본을 설정할 수 있습니다. JobName과 같은 환경 변수를 사용할 수없는 경우 작업 이름을 하드 코드해야합니다 (또는 빌드 중에 작업 영역의 파일에 기록해야 할 수 있습니다). 마지막에는 업데이트 된 트렁크 (dev 행), 새로운 릴리스 라인 (브랜치) 및 릴리스 브랜치에서 모든 CI를 실행하는 작업이 있습니다.

+0

Scheutze : +1, 좋은 도움이 여기에 있습니다. 따라서 원격 API를 사용하는 것은 처음에는 허드슨 내부에서 작업 복사/수정 작업을 수행하라는 모든 호출이 있기 때문에 다소 서투른 것처럼 보입니다. 플러그인/옵션이 없을 것입니다 (아마도 매개 변수화 된 빌드의 경우)? " 현재 작업의 새 복사본 생성 "? – andersoj

+0

나는 플러그인을 모르고있다. 플러그인 목록 (http://wiki.hudson-ci.org/display/HUDSON/Plugins)을 살펴보십시오. 원격 API를 사용하여 Windows와 Unix 시스템간에 빌드 아티팩트를 이동합니다.아티팩트는 마스터 (Windows)에서 생성되며 슬레이브 (Unix)와 연결된 다른 작업에 의해 선택됩니다. 완벽하지는 않지만 실제로는 슬레이브 작업의 총 런타임과 비교할 때 성능에 미치는 영향은 미미합니다. –

+0

방금 ​​바보 같은 생각이 들었습니다. 매개 변수화 된 직업은 어떻습니까? 매개 변수는 프로젝트의 SVN URL입니다. 그런 다음 프로젝트 (분기 또는 대상)에 대한 올바른 URL로 매개 변수화 된 작업을 호출하는 SVN에서 커밋 트리거를 작성합니다. 유감스럽게도, 당신은 svn에서 빌드를 트리거 할 수 있도록 매년 (또는 과거의 해결책 - 과거의 해결책이 실제로 작동하는지 모르겠다) 같은 Subversion을 가져 오도록 프로젝트를 구성해야합니다. 트리거는 유효한 트리거 (트렁크 및 릴리즈 브래치) 만 보냈는지 확인해야합니다. 빨리 ... (다음 주석을보십시오) –

0

빌드의 일부로 분기 및 태그 지정을 수행하지 않겠습니다. 손으로 직접 처리 할 것입니다. 아마도 이것은 철학적 인 차이 일 것입니다. 저는 허드슨이 코드 라인을 조작하기위한 도구 라기보다는 코드 라인의 현재 상태를 가져 와서 아티팩트를 만드는 방법이라고 봅니다. 큰 컴파일러와 비슷하지만 IDE가 아닙니다.

그래서, 내 프로세스가 같을 것이다 (우리의 과정, 사실 생겼) :

  1. 태그를
  2. 지점이 지점에서 릴리스 포인트 (root_release23_20101124 호출)에서 (호출 release23_20101124)
  3. 편집 방출 특성 파일은 릴리스 번호를 추가하고 확인해 구축)
  4. 템플릿 작업을 복사하여 (새로운 허드슨 작업을 설정 지점에 다른 픽스 업을
  5. 확인을 할 수 , 작업 그래서

을 실행하여 새로운 버전을 설치는 지점

  • 에서 체크 아웃, 구성, 완화하는 것은 관리자의 작업을 구축/개발자이지만, 실제로 구축 출시 허드슨에 의해 이루어집니다.

    릴리스 설정에는 수작업이 필요하지만 태그 지정, 분기, 일부 파일 편집, 커밋, 작업 생성 및 분기 이름 변경에는 얼마나 오래 걸리는지 지루하다고 할 수는 없습니까?

  • +2

    건식의 문제입니다. 이 일을 많이 해 여러 번 나 또는 다른 사람이 잘못했거나 순서가 맞지 않고, 단계를 건너 뛰고, 약간 다른 태그 명명 체계를 사용하는 것이 얼마나 쉬운 지 압니다 ... 반복적 인 경우, 손으로 직접 처리하고 싶습니다. 프로그래밍 방식으로 인코딩 된 프로세스를 원합니다 ... – andersoj

    +0

    공정합니다. 그래도 허드슨 일이 될 필요는 없다고 생각합니다. 쉘 스크립트가 할 수 있습니다. –

    +0

    하지만 내가 말할 때 내 편견을 배신하고있어! –

    관련 문제