문제

두 가지 방법을 배포하 J2EE/Java 웹 응용 프로그램(에서 매우 단순한 감각):

배포 조립물 생산 상자

여기,우리가 만들기 .war (또는)다른 곳에서 그것을 구성하고,생산을 위한(가능하게 만들 수많은 유물에 대한 수많은 상자)와 그 결과로 생성된 유물에 생산을 서버에 있습니다.

  • 장점:아 dev 에서 도구를 생산자,다시 사용할 수 있습 유물 테스트에서는 직접,직원을하고 배포하지 않 필요한 지식을 구축 프로세스
  • 단점:두 개의 프로세스를 생성 및 배포하는 아티팩트;잠재적으로 복잡한 구성을 미리 작성된 유물을 만들 수 있는 프로세스 하드하는 스크립트/을 자동화;야 버전 바이너리 아티팩트

축물 생산 상자

여기에서,동일한 프로세스를 사용되는 일상을 구축 및 배포에 로컬로 개발자가 배포에 사용되는 생산.

  • 장점:하나의 프로세스를 유지;그것은 심하게 시험/검증하여 자주 사용.잠재적으로 쉽게 사용자 지정 구성에서 유물을 창조 시간보다는 사용자 정의 사전 구축된 후서 이슈;아니요 버전 바이너리 아티팩트는 필요합니다.
  • 단점:잠재적으로 복잡한 개발 도구에 필요한 모든 생산자;배포 직원들을 이해할 필요가 빌드 프로세스;당신 배포하이 무엇을 테스트

나는 주로 사용되는 두 번째 프로세스,틀림없이 필요(시간/위한 우선 순위는 다른 배포 프로세스).개인적으로 구매하지 않는 인자"와 같은 생산자가의 깨끗한 모든 컴파일러,etc.", 그러나 나 보 논리를 배포하는 것을 테스트(반대하는 건물 또 다른 이슈).

그러나,Java 기업 응용 프로그램은 이렇게 민감한 구성,그것은 같은 느낌이 묻는 것에 대한 문제를 갖는 두 가지 구성을 위한 프로세스입니다.

생각?

업데이트

여기에 구체적인 예를 들어:

우리가 사용하는 OSCache,그리고 사용하는 디스크 캐시입니다.구성 파일 안에 있어야 합니다.대전 파일을 참조하는 파일 경로.이 경로는 다른 모든 환경입니다.빌드 프로세스를 감지하는 사용자의 구성과 위치는 것을 보장 속성 파일에 배치 전쟁이 올바른지에 대한 자신의 환경입니다.

만약 우리가 사용하여 빌드 프로세스에 대한 배포,그것의 문제들에 대한 구성 생산 환경(예를 들어, production.build.properties).

만약 우리가 따라"배포 조립물 생산자",우리가 해야 할 추가적으로 추출하려면(잘못된)OSCache 속성으로 대체 적용이 생산 환경이다.

이 두 프로세스하기 위해 최선을 다하고 있 것입니다.

그래서 질문은:

  • 이것이 피할 수없이"컴파일에서 생산"?
  • 하지 않을 경우,그것은 가치가?그것을"값 없이 컴파일에서 생산"보다"반복하지 않는 자신을"?
도움이 되었습니까?

해결책

나는 당신이 당신이 테스트 한 것과 다른 빌드를 사용하고 있기 때문에 생산 상자를 구축하는 것에 대해 단단히 반대합니다. 또한 모든 배포 머신에는 다른 JAR/WAR 파일이 있음을 의미합니다. 다른 것이 없다면, 버그 추적시 서버 간의 불일치에 대해 걱정할 필요가 없도록 통합 빌드를 수행하십시오.

또한 빌드와 빌드를 쉽게 매핑 할 수있는 경우 빌드를 버전 제어에 넣을 필요가 없습니다.

내가 일하는 곳에서 배포 프로세스는 다음과 같습니다. (이것은 Tomcat과 함께 Linux에 있습니다.)

  1. 테스트 변경 및 전복을 확인하십시오. (반드시 그 순서대로 아님; 우리는 커밋 된 코드가 테스트되었을 필요는 없습니다. 저는 전임 개발자이므로 SVN 트리는 본질적으로 내 개발 지점입니다. 마일리지가 다를 수 있습니다.)

  2. Subversion 개정 번호의 이름을 딴 공유 디렉토리의 JAR/WAR 파일을 프로덕션 서버에 복사하십시오. 웹 서버에는 액세스 권한 만 읽습니다.

  3. 배포 디렉토리에는 개정 이름 디렉토리의 파일에 대한 상대 상징 링크가 포함되어 있습니다. 이렇게하면 디렉토리 목록은 항상 실행중인 버전의 소스 코드 버전을 보여줍니다. 배포 할 때 디렉토리 목록에 지나지 않는 로그 파일을 업데이트합니다. 그것은 롤백을 쉽게 만듭니다. (그러나 Gotcha, Tomcat은 Symlink가 아닌 실제 파일의 수정 날짜까지 새로운 전쟁 파일을 확인하므로 롤백 할 때 이전 파일을 터치해야합니다.)

당사 웹 서버는 전쟁 파일을 로컬 디렉토리로 포장합니다. 전쟁 파일이 단일 파일 서버에 있기 때문에 접근 방식은 확장 가능합니다. 무제한 수의 웹 서버를 가질 수 있으며 단일 배포 만 수행 할 수 있습니다.

다른 팁

내가 일한 장소의 대부분은 전쟁/귀 밖에서 개별적으로 배포 된 환경 별 구성 정보와 함께 첫 번째 방법을 사용했습니다.

전쟁 파일과 같은 "조립 된 아티팩트를 제작 상자에 배치"하는 것이 좋습니다. 이것이 바로 우리의 개발자가 동일한 빌드 스크립트 (ANT)를 사용하여 최종 인공물을 만드는 데 사용되는 개발 샌드 박스와의 전쟁을 구성하는 이유입니다. 이런 식으로 완전히 반복 할 수있는 것은 말할 것도없이 코드 자체뿐만 아니라 디버깅됩니다.

무거운 무게와 같은 구성 서비스가 있습니다 동물원 키퍼, 그리고 대부분의 컨테이너를 사용하면 JNDI를 사용하여 일부 구성을 수행 할 수 있습니다. 이들은 구성을 빌드에서 분리하지만 과잉 일 수 있습니다. 그러나 그들은 존재합니다. 당신의 요구에 크게 달려 있습니다.

또한 구성 값을 위해 아티팩트가 자리 표시 자로 구축되는 프로세스를 사용했습니다. 전쟁이 배치되면 폭발하고 자리 표시자는 적절한 값으로 교체되었습니다.

난 챔피언의 사용은 지속적인 통합을 지원하는 솔루션포니다.코드 선택으로 SCM 트리거할 수 있는 구축(대한 즉각적 테스트)및 예약할 수 있습 빌드를 만드는 유물에 대한 품질보증을 수행합니다.할 수 있습니다 다음을 촉진한 이슈를 생산하고 그들에게 배포됩니다.

이것은 현재 어떤 나는 설정을 사용하여, AnthillPro.

편집:우리가 사용하여 지금 허드슨.수도 있습니다.

구성 관리와 관련 하여이 질문을하는 경우, 귀하의 답변은 관리되는 아티팩트로 간주되는 것을 기반으로해야합니다. CM 관점에서 볼 때, 일부 환경에서 소스 파일 모음이 작동하지 않고 다른 환경에서 작동하는 것은 용납 할 수없는 상황입니다. CM은 환경 변수, 최적화 설정, 컴파일러 및 런타임 버전 등에 민감하며 이러한 것들을 설명해야합니다.

반복 가능한 프로세스 생성과 관련 하여이 질문을하는 경우, 대답은 용납 할 수있는 고통의 위치와 양에 기초해야합니다. .WAR 파일을 사용하려면 시험 및 배치주기에 대한 노력을 절약하기 위해 더 많은 선형 통증이 필요할 수 있습니다. 소스 파일과 빌드 도구를 사용하면 선불 비용이 절약 될 수 있지만 배포 프로세스 후반에 문제를 처리 할 때 추가 통증을 견뎌야합니다.

구체적인 예제에 대한 업데이트

당신의 예와 관련하여 고려해야 할 두 가지.

  1. .war 파일은 대체 확장자가있는 .zip 파일 일뿐입니다. 표준 zip 유틸리티를 사용하여 구성 파일을 대체 할 수 있습니다.

  2. 구성 파일을 .war 파일 내에 넣을 필요성을 잠재적으로 재고 할 수 있습니다. ClassPath에 있거나 서버 시작시 실행 명령 줄에 속성을 지정하는 것으로 충분합니까?

일반적으로 배포 위치에 따라 배포 구성 요구 사항을 유지하려고합니다.

배포에 1 개의 포장 된 전쟁 파일을 사용하는 것이 좋습니다.
우리는 개미를 사용하여 환경마다 다른 값을 대체합니다. @@@ variable로 파일을 확인하여 ANT 스크립트로 대체됩니다. 개미 스크립트는 파일의 올바른 항목을 대체 한 다음 각각 배포되기 전에 전쟁 파일을 업데이트합니다.

<replace file="${BUILDS.ROOT}/DefaultWebApp/WEB-INF/classes/log4j.xml" token="@@@" value="${LOG4J.WEBSPHERE.LOGS}"/>


<!-- update the war file We don't want the source files in the war file.-->
<war basedir="${BUILDS.ROOT}/DefaultWebApp" destfile="${BUILDS.ROOT}/myThomson.war" excludes="WEB-INF/src/**" update="true"/>

요약하기 위해 Ant는 모든 것을 수행하고 Anthill을 사용하여 개미를 관리합니다. Ant는 전쟁 파일을 빌드하고 파일 경로를 대체하고 전쟁 파일을 업데이트 한 다음 대상 환경에 배포합니다. 한 프로세스, 실제로 Anthill에서 버튼을 한 번 클릭합니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top