2009-06-15 3 views
9

개발 환경에서 라이브 서버로 변경 사항을 가져 오는 "원 푸시 빌드"를 갖는 것이 매우 유용 할뿐만 아니라 종종 옹호하는 한 가지입니다.LAMP 프로젝트의 "한 단계 빌드"는 어떻게 구현합니까?

LAMP 스택에서 실행중인 작은 팀과 함께 선보인 SVN을 사용하여 현재 단일 프로덕션 서버 (개발을위한 또 다른 서버이며 곧 별도의 MySQL 서버가 됨)에 배포 된 버전 제어에 사용합니다. 나는 지금 막 나와서 오기 전에 실종 된 많은 조직적인 것들을 넣고 있습니다. 내가

사람들이 현재
  • 내가 내 상황에 가장 잘 구현할 수있는 방법을 볼이 (한 단계 빌드)를 어떻게하고
    1. (SVN 작은 팀 LAMP 환경)
    2. 를보고 궁금

    내가 관심을 갖는 몇 가지 특별한 도전은 데이터베이스 변경 사항 (스키마)을 처리하는 것일뿐 아니라 사람들이 일을 체계화하기 위해 사용하는 "패키지"(예 : RPM, PEAR 등)를 처리하는 것입니다.

  • 답변

    7

    antHudson으로 사용했습니다. 매력처럼 일했습니다.

    허드슨은 자바 프로젝트뿐만 아니라 다른 빌드 시스템에서도 작동합니다. 여러 빌드 대상을 설정하고 자동 또는 수동으로 실행할 수 있습니다. 또한 단일 명령에서 빌드를 실행하는 방법을 구현해야합니다.

    배포 된 서버의 빌드를 실행하는 동안 서버를 사용할 수없는 통신 문제는 해결되지 않습니다. 우리의 스키마 업데이트 및 변경 사항에 대한

    , 우리 설정 두 가지를 할 수있는 우리 개미 스크립트를

    1. 업데이트 SVN에 차이가있을 경우에만 스키마를 실행합니다.
    2. 스키마 변경 사항을 작성한 후 스키마 덤프를 체크인하십시오. 스키마에 어떤 업데이트가 없었다 경우
    3. , 단순히 데이터베이스
    그것은 바로 얻을 수있는 몇 가지 시도를 취할했다

    에게로드 덤프를 사용하지만, 갑자기 우리는 다른 스키마에있는 여러 개발자의 문제를 해결했다 . 덤프를 임포트하여 개발 스키마를 업데이트하는 것이 매우 쉬워서 매일 할 수있었습니다.

    +1

    허드슨은 굉장합니다. – stimms

    2

    하고 있습니다. 우리는 모든 빌드와 배포 작업을 수행하기 위해 Anthill Pro이라는 제품을 사용합니다. 워크 플로 프로세스를 통해 파일을 체크 아웃하고 빌드를 수행하고 단위 테스트를 실행 한 다음 코드를 서버에 배포합니다. 프로세스가 명령 행 프로그램 등을 실행할 수 있기 때문에 그것을 사용할 수 있습니다.

    1

    "make"는 UNIX에서 (그리고 Windows)는 친구입니다. 그것은 학습 곡선을 가지고 있지만, 그만한 가치가 있습니다. 소스 업데이트, 컴파일, 테스트 등을 할 수 있습니다.

    2

    사용자 환경에 따라 크게 달라질 수 있으므로 간단한 요리 책 응답은 없습니다. 여러분이 무엇을 생각하든 배포 스크립트가 소스 제어에 직접 적용되므로 스크립트 기반 접근 방식을 적극 권장합니다. 이러한 스크립트를 사용하면 빌드 솔루션과의 통합이 향상됩니다 (아래 참조).

    프로덕션 환경에서 실행하는 가장 간단한 스크립트는 소스 제어에서 최신 버전을 가져 오거나 특정 버전을 가져 오는 명령 일뿐입니다.

    다음 과제는 데이터베이스 배포입니다. 중소 규모 프로젝트에서 가장 좋아하는 솔루션은 각 데이터베이스에 스키마 버전 테이블을 유지하고 모든 DDL 및 데이터 업데이트 스크립트 (소스 코드가 압축 된 아카이브에서 사용하는 데이터 소스 포함)를 보유하는 것입니다. 스크립트는 연속적으로 번호가 매겨지며 (000001 ..., 000002 ... 등으로 시작), 배포 스크립트는 먼저 기존 데이터베이스를 백업 한 다음 스키마 버전 테이블에서 마지막으로 실행 한 데이터베이스 스크립트를 가져온 다음 실행합니다 새 버전의 데이터베이스 스크립트가 소스 제어에서 올바른 순서로 발견되어 그에 따라 스키마 버전 표가 업데이트됩니다.

    이 방법을 사용하면 데이터베이스를 처음부터 다시 작성할 수 있습니다. 함께 두 가지 접근 방식이 빠르게 조금 더 복잡한 시나리오 등 여러 가지 준비 기계 (으)로 코드베이스, 당신의 QA 환경, 베타,


    를 배포하는 것이 가능하게

    , 당신이해야 Kieveli 외에도 계속해서 통합 빌드 서버를 실행하십시오. al. 기본적으로 전체 배포를 정기적으로 "다시 작성"하므로 위와 같이 "수동으로"실행하는 스크립트를 포함하고 있습니다.

    데이터베이스 배포는 각 데이터베이스 스크립트에 대한 롤백 스크립트를 만들어 더 정교하게 만들 수도 있습니다. 그런 다음이를 처리 할 수있는 작은 컨트롤러 앱을 작성해야합니다. 이런 종류의 것들을위한 몇 가지 OSS 솔루션이 있으며 그 중 하나가 당신의 요구에 맞을 수도 있습니다.

    하지만, 당신이하는 PHP 프로젝트를위한 생산 환경 ;-)

    2

    최고의 빌드 도구로 데이터베이스를 자동으로 배포하지 않을 수 있도록하는 개미와 매우 유사하지만, PHP로 작성되는, 아마도 Phing입니다. 그것은 당신이 당신의 svn repo에서 물건을 움켜 잡는 것과 같이 이것과 같은 무언가를 위해 필요한 모든 필요한 것들을 포함합니다.

    0

    일단 원스텝 빌드가 완료되면 쉽게 연속 빌드로 바꿀 수 있습니다.

    빌드 된 변경 번호가 표시된 모든 완성 된 빌드가 중앙 서버에 있습니다. 무언가가 커밋되면 (우리는 Perforce를 사용하지만 이것은 SVN에서 작동 할 것입니다.) 빌드 상자 중 하나에있는 cronjob은 빌드보다 더 최근의 변화가 있음을 알며 소스 트리를 다운로드하라는 HTTP 요청을 실행하고 빌드를 시작합니다 (GMake로, 대부분). 연속적인 빌드는 몇 단계 만 거치면됩니다.

    그런 다음 모든 테스트 자동화가 자동으로 실행되는 간단한 단계입니다. 각 커밋 후에 완벽하게 빌드되고 테스트 된 코드 (배포 가능)!

    0

    스크립팅 언어의 경우, ant-variant 또는 CruiseControl 변형을 사용하는 것과 같은 일반적인 조언은 컴파일 할 필요가 없으므로별로 의미가 없습니다.

    데이터베이스에 집중합시다. 지속적인 통합은 자동화, 자동화 및 자동화의 세 가지 중요한 요소입니다. 즉, 빈 데이터베이스를 구축하고 외부 데이터에서 가져 와서 새 버전으로 업그레이드하고 스크립트를 사용하여 실행할 준비가 된 모든 것을 갖추어야합니다. 그것의 좋은 예가 MediaWiki와 같은 것일 수 있습니다. 이것은 PHP 자체를 사용하여 구성하고 설치해 봅시다. 나는 하루 동안 새로운 데이터베이스를 배포하고 단위 테스트를 실행하고 실패 할 경우 전자 메일을 보내도록 빌드 서버를 실행하는 것을 권장합니다.

    0

    내가 생각하는 방법은 하나의 스크립트가 최종 '제품'오프

    을 만드는 모든 단계를 수행 기본적으로, 모든 것을 함께 끌어 소스 컨트롤에서 모든 파일 \ 자원을 얻고 싶은 것입니다 그 단계는 최신판을 얻고, 컴파일하고, 다른 파일을 얻고, 설치 프로그램을 만들고 (필요한 경우), 단위 테스트를 실행하고, 서버에서 결과를 공유하는 것을 포함 할 수 있습니다. 새로운 버전이 생성되었다는 것을 사용자에게 알립니다. 그렇지 않은 경우 왜 그런지 알려줍니다. 그리고 무엇이든지해야 할 수도 있습니다.

    이전에는 일종의 배치 파일로 시작한 다음 일종의 사용자 정의 된 작성기 exe를 작성했습니다. 그러나 유지는 항상 고통스러워졌습니다. 결국에는 타사 응용 프로그램으로 이동합니다 ... 이제는 아래 두 제품 중 하나를 사용합니다.

    http://www.kinook.com/VBP/

    http://www.finalbuilder.com/