어떤 도구 및 절차 당신이 추천하거나 다음 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?
우리는 새로운 기능을 개발하고 오래된 기능을 고칠 수 있도록 어떻게 저장소를 구성해야합니까?
롤아웃/롤백을 어떻게 트리거해야합니까?
미리 감사드립니다.