2009-10-11 2 views
3

어떤 도구 및 절차 당신이 추천하거나 다음 sceanario를 간소화하기 위해 자신을 사용 우리 회사에서 개발 한 것입니다. 우리가 대략 3 년 동안 계속해서 개발해 온 합리적으로 표준적인 램프 어플리케이션입니다. 테스트 도메인에서 응용 프로그램을 개발합니다. 여기에 새로운 기능을 추가하고 버그를 수정합니다. 우리의 버그 추적 및 기능 개발은 모두 호스팅 된 Subversion 솔루션 (unfuddle.com)에서 관리됩니다. 버그가보고되면 우리는 테스트 도메인에서 이러한 수정을 한 다음 버그가 수정되어 행복해 졌을 때 svn에 변경 사항을 적용합니다. 우리는 새로운 기능을 추가하여 이와 동일한 절차를 수행합니다.도구 및 방법

Google 시스템 전반의 일반적인 아키텍처와 Google 서버 전반의 응용 프로그램을 알려주는 것이 좋습니다. 새로운 기능이 개발 될 때마다이 업데이트를 응용 프로그램 (항상 우리가 제어하는 ​​서버)을 사용하는 모든 사이트에 배포합니다. 우리 시스템을 사용하는 각 사이트는 기본적으로 코드베이스의 95 %에 대해 정확히 동일한 파일을 사용합니다. 우리는 그 사이트에 주문 된 파일들을 포함하고있는 각 사이트 내에 두 개의 폴더를 가지고 있습니다 - css 파일들/이미지들 그 이외에 각 사이트 들간의 차이점은 각 사이트 데이터베이스 내의 다양한 구성 설정에 의해 정의됩니다.

실제 배포 자체가 시작됩니다. 어떤 종류의 업데이트를 준비 할 때 우리는 테스트 사이트가있는 서버에서 명령을 실행합니다. 이 명령은 복사 명령 (cp -fru/testsite// othersite /)을 수행하고 수정 된 날짜를 기반으로 파일을 업데이트하는 각 가상 호스트를 거칩니다. 우리가 호스팅하는 각각의 추가 서버에는 프로덕션 코드베이스를 rsync하는 가상 호스트가 있고 그 서버의 모든 사이트에서 복사 절차를 반복합니다. 이 과정에서 우리는 덮어 쓰기를 원하지 않는 파일을 옮겨서 복사가 완료되면 다시 옮깁니다. 우리의 롤아웃 스크립트는 SQL 명령을 적용하여 각 데이터베이스를 변경하고, 필드/새 테이블을 추가하는 등의 여러 가지 다른 기능을 수행합니다.

프로세스가 안정적이지 않고 내결함성이 없으며 brute-force 방법의 조금. 우리는 또한 새로운 기능으로 작업 할 때 지점이나 태그를 사용하지 않아 중요한 버그 수정을 롤아웃 할 수 없기 때문에 전복을 최대한 활용하지 못한다는 사실을 알고 있습니다. 우리 서버에서 파일을 너무 많이 복제하는 것도 잘못되었습니다. 또한 방금 출시 한 제품에 대해 롤백을 쉽게 수행 할 수 없습니다. 각 롤아웃 전에 diff를 수행하여 변경 될 파일 목록을 얻을 수 있으므로 변경된 내용을 알 수 있지만 롤백하는 프로세스는 여전히 문제가됩니다. 데이터베이스 측면에서 잠재적 인 솔루션으로 dbdeploy를 조사하기 시작했습니다. 우리가 정말로 원하는 것은 우리가 파일 관리 및 배포를 개선 할 수있는 방법에 대한 일반적인 지침입니다. 이상적으로 우리는 파일 관리를 저장소와보다 밀접하게 연결하여 롤아웃/롤백이 svn에 더 많이 연결되기를 바랍니다. export 명령을 사용하여 사이트 파일이 repo 파일과 동일한 지 확인하는 것과 같은 것입니다. 또한 솔루션이 우리 서버 주변의 파일 복제를 막을 수도 있다면 좋을 것입니다.

다른 사람들이 동일한 문제에 접근하는 방식을 듣는 것은 우리의 현재 방법을 무시하는 것이 좋습니다.

요약 할 은 ...

여러 서버에 파일을 만들기위한 가장 좋은 방법은 무엇입니까

는 SVN과 동기화를 유지?

파일 복제를 어떻게 방지해야합니까? symlinks/something something?

우리는 새로운 기능을 개발하고 오래된 기능을 고칠 수 있도록 어떻게 저장소를 구성해야합니까?

롤아웃/롤백을 어떻게 트리거해야합니까?

미리 감사드립니다.

답변

4

롤백하고 새로운 기능을 테스트 브랜치와 태그의 표준 전복 개념 충분합니다 :

  • 는 항상 출시 전에 태그를 생성하고 해당 태그를 출시. 그러면 롤백은 이전 태그로 돌아가는 것을 의미합니다.
  • 분기에서 새 기능을 개발하고 완료되면 트렁크에 병합하십시오. 또는 트렁크에 새로운 기능을 개발하고 버그 수정 만받는 유지 보수 지점을 갖습니다.
  • 사이트 별 파일을 Subversion의 별도 디렉토리에 보관하고 각 사이트의 구성 파일 또는 심볼 링크를 사용하여 사이트에서 특정 파일을 참조하도록합니다. 대안 전용을, 사이트를 NFS 클라이언트 호스트에게 NFS 서버를 만들고, -

파일 중복을 줄이기 위해, 나는 모든 사이트가 같은 호스트의 가상 머신이 때 특히에서 NFS를 (사용하는 것이 좋습니다 VM NFS 서버). 업데이트를 배포하려면 NFS 서버에 새 파일 만 설치하십시오. 클라이언트는 자동으로 변경 사항을 선택합니다.

다단계 업데이트가 필요한 경우 (예 : 각 클라이언트의 데이터베이스를 먼저 업데이트 한 다음 코드를 업데이트) NFS를 사용해야하지만 심볼릭 링크를 추가해야합니다. 새 코드를 NFS 서버의 별도 디렉토리로 체크 아웃 한 다음 모든 VM으로 이동하여 데이터베이스를 업데이트하고 VM의 심볼릭 링크를 변경하여 새 코드를 가리 킵니다. 완료되면 NFS 서버에서 이전 코드를 제거하십시오.

0

이 기사에서는 PHP 응용 프로그램 배포에 대해 다룹니다.

  1. Phing
  2. Ant
  3. Liquibase
  4. DbDeploy

가 나는 또한 몇 사람이 사용하는 언급 들었 : http://blog.digitalstruct.com/2009/10/07/deployments-php-applications/

구체적으로는 도움이 될 몇 가지 도구를 언급 capistrano 그래서 당신도 그걸보고 싶을 것입니다.

편집 :이 설문 조사 http://twtpoll.com/3zwfox는 SVN 수출은 PHP 애플리케이션을 배포하기위한 지역 사회의 일반적인 방법입니다 것으로 보인다보고에서

. 이 설문 조사는이 슬라이드 쇼 프리젠 테이션에서 사용 된 것으로 보입니다. http://www.slideshare.net/ccornutt/taming-the-deployment-beast