2010-04-01 8 views
1

서문 :메이븐 + SSDM은 빌드 및 런타임 환경 자동화

내 회사, 가장 좋아하는 여러 런타임 환경과 자신이 다양한 항아리의 다른 버전으로 구성되어 여러 릴리스 버전이 있습니다.

예를 들어, 우리가 개발자 컴퓨터, 테스트 또는 생산에 배포 할 수 있습니다 릴리스 버전 1.1, 1.2, 및 소프트웨어 X 1.3을 생각해 보자.

Software-x-1.1 자체는 jarA-0.9.1과 jarB-0.7.5로 구성되어 있지만 software-x-1.3은 jarA-1.7.31과 jarB-0.8.1로 구성됩니다.

현재 우리는 (예 : 데이터베이스 자격 증명 등) 런타임 변수를 구성하지만, 속성 또한 릴리스 버전으로 변경하는 Spring의 PropertyPlaceholderConfigurer와를 사용합니다.

또한 Maven 2 POM 버전 4를 사용하여 코드의 어떤 버전을 사용해야하는지 지정합니다. 우리는 jar의 버전 번호를 부모 pom 내부의 프로파일 (dev, test, prod) 내의 속성으로 배치 한 다음 모든 프로젝트 poms의 해당 버전 번호를 참조합니다.

지금 현재, 우리는 버전이 최신이 아닌 다른 주어진 자료와 관련있는 프로젝트를 지정하는 방법이 없습니다. 또한 런타임 구성을 SSDM 픽업에 배포합니다. 그러면 SSDM 픽업은 소프트웨어의 빌드 된 버전으로 정의 된 서비스를 구성하고 만듭니다.

-

질문 :
우리는 단지 런타임 환경과 버전 번호를 제공하여 우리의 제품을 구축하는 데 사용할 수있는 절차/도구가 있습니까? IE "빌드 1.1 dev"?

어쨌든 각 릴리스 빌드에 필요한 jar 버전을 저장할 수 있습니까? 우리는 현재 부모 pom을 포함하여 모든 파일을 버전 화하고 있지만 단순히 부모 pom을 버전 관리하면 해당 부모 pom과 관련된 릴리스 버전이 기록되지 않습니다.

빌드 프로세스를 자동화하기 위해 우리가 할 수있는 다른 조치는 무엇입니까? 예를 들어

, 우리는 올바른 방향으로 단계가 될 것 부모 치어 내에서 런타임 구성을 관리 할 수 ​​있지만,이 범위를 위반처럼 보인다합니다.

우리의 프레임 워크 이외의 모든 도구가 아니라 먼 미래에,이 시점에서 생각할 수있다.

요약 :

우리가 어떻게 오류가 발생하기 쉬운되지 않고 최대한 우리의 빌드 프로세스를 자동화 할 수 있습니다? 이 테스트의 차이점을 처리하기 위해 프로필을 사용하는 올바른 방법이 될 것 같았다 소프트웨어 X의 출시 버전 1.1, 1.2 및 1.3에 대한 부분을 바탕으로

+0

개발 모듈 계층 구조 외부에 별도의 릴리스/어셈블리 모듈을 갖는 것이 합리적입니까? 나는이 릴리스에서 사용 된 종속성을 나열하는 Software X의 pom을 생각하고 있습니다. 그러나 귀하의 사례를 명확하게 이해하지 못합니다. – lexicore

+0

질문을 명확히하기 위해 제공 할 수있는 것이 있습니까? 상황이 다소 복잡해 졌기 때문에 나는 힘든 시간을 보냈다 ... – Randy

답변

0

, 생산 등 환경. 소프트웨어 자체는 다른 이야기입니다. 난 당신이 개발의 상태를 저장하는 버전 제어 도구 (VCT)를 사용하고 있다고 가정합니다. 따라서 Software-x-1.1을 준비하는 동안 루트 pom을 변경하고 종속성을 정의하십시오 (jarA-0.9.1, jarB-0.7.5). 태그 릴리스 1.1을 만듭니다. 릴리스 1.2를 계속 진행하는 것보다 ... 릴리스 1.3을 개발하는 동안 pom 또는 루트 pom으로 변경되는 종속성 (jarA-1.7.31 및 jarB-0.8.1)을 변경하기로 결정했습니다. 나는 너의 진짜 문제를 감독 할지도 모른다.

0

문제를 요약하면 : 여러 환경에서 버전의 릴리스를 관리하려는 경우 배포판은 환경 속성뿐만 아니라 실행 파일 (jars)의 집계입니다. 이러한 배포 가능한 배포판의 서로 다른 버전은 고유 한 env 속성 집합을 사용하여 서로 다른 단계에서 diff 환경으로 전파되며이 모든 것을 처리하기위한 공통 롤아웃 (또는 릴리스 프로세스 일 수 있음) 방법을 찾고 있습니다.

릴리스를 전파 할 때 환경마다 릴리스 별 빌드를 실행하는 것이 가장 먼저 보이는 문제입니다. 내가 잘못하지 않았다면 우선 앱 아키텍처를 살펴보고 환경에 독립적 인 바이너리를 생성 할 수있는 방법이 있는지 확인해야한다. 프로젝트는 항아리와 함께 배포되는 별도의 모듈로 속성을 유지하는 것이 더 바람직하다. 인물이 파일을 읽는 일종의 속성 관리자. 속성 집합의 모든 env 집합에 대해 각각 하나의 zip을 묶는 properties라는 maven 모듈이있을 수 있습니다. 배포자 스크립트에는 zip 파일을 실행하는 동안 매개 변수를 지정하여 속성을 응용 프로그램에 읽을 수있는 위치에서 추출 할 수 있습니다. 이런 방식으로 얻을 수있는 것은 "릴리스별로 하나의 배포 배포판을 만들 - 모든 환경에서 실행할 내용이 있습니다"입니다.

또한 출시 버전이 POM에있는 버전이 아닌가? POM에 릴리스 버전을 정렬하지 않으면 완료해야합니다. 즉, POM은 해당 릴리스의 개발 단계에서 작업 할 때 1.3-SNAPSHOT이어야하며, 릴리스 할 때 지점에서 1.3으로 떨어져야합니다.

그런 것들에 대한 모든 해결책에 맞는 크기는 없지만 이와 유사한 방식으로 도움이됩니다.

추신 : 나는 문제가 옳았는지 알려주지 만, 덤불 주위에서 치고 올라갔습니다 .- DS.

관련 문제