회사에서 개발 한 전자 상거래 앱이 있습니다. 우리가 약 3 년 동안 개발하고 개발 한 합리적인 표준 LAMP 애플리케이션입니다. 테스트 도메인에서 애플리케이션을 개발합니다. 여기에서 새로운 기능을 추가하고 버그를 수정합니다. 버그 추적 및 기능 개발은 모두 호스팅 된 서브 버전 솔루션 (unfuddle.com) 내에서 관리됩니다. 버그가보고됨에 따라 테스트 도메인에서 이러한 수정 사항을 작성한 다음 버그가 수정되면 svn에 변경 사항을 적용합니다. 새로운 기능을 추가하여 동일한 절차를 따릅니다.
서버 전반에서 시스템 및 애플리케이션의 일반적인 아키텍처를 지적 할 가치가 있습니다. 새로운 기능이 개발 될 때마다 애플리케이션 (항상 우리가 제어하는 서버)을 사용하여 모든 사이트에이 업데이트를 배포합니다. Google 시스템을 사용하는 각 사이트는 기본적으로 코드베이스의 95 %에 대해 정확히 동일한 파일을 사용합니다. 각 사이트에는 해당 사이트에 맞춤화 된 파일 (css 파일 / 이미지 등)이 포함 된 몇 개의 폴더가 있습니다. 각 사이트 간의 차이점은 각 사이트 데이터베이스 내의 다양한 구성 설정에 의해 정의됩니다.
이것은 실제 배포 자체에 적용됩니다. 우리가 어떤 종류의 업데이트를 롤아웃 할 준비가되면 테스트 사이트가있는 서버에서 명령을 실행합니다. 이 명령은 복사 명령 (cp -fru / testsite / / othersite /)을 수행하고 수정 된 날짜를 기준으로 파일을 업데이트하는 각 호스트 호스트를 거치게됩니다. 우리가 호스팅하는 각 추가 서버에는 프로덕션 코드베이스를 rsync하는 가상 호스트가 있으며 해당 서버의 모든 사이트에서 복사 절차를 반복합니다. 이 과정에서 덮어 쓰기를 원하지 않는 파일을 제거하고 복사가 완료되면 다시 이동합니다. 롤아웃 스크립트는 각 데이터베이스를 변경하기 위해 SQL 명령을 적용하고 필드 / 새 테이블을 추가하는 등의 다른 여러 기능을 수행합니다.
우리는 프로세스가 충분히 안정적이지 않고 내결함성이 없으며 약간의 무차별 한 방법이라는 것에 점점 더 우려하고 있습니다. 또한 새로운 기능으로 작업 할 때 분기 나 태그를 사용하지 않기 때문에 중요한 버그 수정을 수행 할 수없는 위치에 있으므로 서브 버전을 최대한 활용하지 않는 것으로 알고 있습니다. 서버 전체에 파일을 너무 많이 복제 한 것도 잘못된 것 같습니다. 또한 롤아웃 한 항목에 대한 롤백을 쉽게 수행 할 수 없습니다. 우리는 각 롤아웃 전에 diff를 수행하여 변경 될 파일 목록을 얻을 수 있도록 변경된 파일 목록을 얻을 수 있지만 롤백 프로세스에는 여전히 문제가 있습니다. 데이터베이스 측면에서 dbdeploy를 잠재적 솔루션으로 조사하기 시작했습니다. 실제로 원하는 것은 파일 관리 및 배포를 개선 할 수있는 방법에 대한 일반적인 지침입니다. 이상적으로는 파일 관리가 저장소에 더 밀접하게 연결되어 롤아웃 / 롤백이 svn에 더 연결되기를 원합니다. 사이트 파일이 repo 파일과 동일한 지 확인하기 위해 export 명령을 사용하는 것과 같은 것. 솔루션이 서버 주변의 파일 복제를 중지시킬 수도 있다면 좋을 것입니다.
현재 방법을 무시하면 다른 사람들이 같은 문제에 어떻게 접근하는지 듣는 것이 정말 좋습니다.
요약하면 ...
- 여러 서버의 파일을 svn과 동기화 상태를 유지하는 가장 좋은 방법은 무엇입니까?
- 파일 복제를 어떻게 방지해야합니까? 심볼릭 링크 / 다른 것?
- 새로운 기능을 개발하고 기존 기능을 수정하려면 리포지토리를 어떻게 구성해야합니까?
- 롤아웃 / 롤백을 어떻게 트리거해야합니까?
미리 감사드립니다
편집하다:
나는 이런 종류의 작업에 Phing 과 Capistrano 를 사용하는 것에 대해 최근에 많은 좋은 것을 읽었습니다 . 누구든지 그들에 대해 더 많은 정보를 제공 할 수 있습니까?