배경
저는 약 4 명의 프로그래머와 4 명의 디자이너로 구성된 소규모 웹 팀을위한 새로운 개발 프로세스를 만들고 있으며 앞으로 팀을 성장시킬 수있는 잠재력이 있습니다. 우리의 제품은 우리가 디자인하고 호스팅하는 클라이언트 웹 사이트를 강화하는 중앙 응용 프로그램입니다.
이전에는 단일 dev 데이터베이스가있는 dev 서버에서 FTP를 통해 모두 작업했습니다. 그것은 "일" * 잠시 동안 만 우리의 과정을 성숙하는 시간이 그래서 우리는 새로운 방향으로 이동하고있다.
우리는 Percona Server 5.5를 사용하지만 이는 비용을 낮게 유지한다는 아이디어와 함께 데이터베이스에 구애받지 않아야합니다.
목표 :
다음을 염두에두고 데이터베이스 개발을위한 CI (Continuous Integration) 프로세스를 작성하려고합니다.
- 개발자는 개발 코드를 실행할 로컬 데이터 사본을 보유하고 있습니다.
- 데이터베이스 구조를 이전 변경 세트로 롤백 가능
- 새로운 기능 스키마 변경과 스키마 디자인 수정 변경을 분리 할 수 있음
- 테스트를 위해 데이터베이스 구조를 로컬로 수정할 수 있습니다
초기 개념
SVN과 LiquiBase를 사용하여 아래 프로세스를 스케치했지만 완전히 제거했습니다 #4
.
- 트렁크에서 '개발'분기를 만듭니다
- 중앙 '개발'DB 서버가 '개발'분기에서 실행
- 지역 개발자는 개발 지점의 노예로 설정됩니다 (
#1
위에서 제공 )- liquibase 변경 세트는 개발 브랜치에 정기적으로 커밋되어 중앙 커밋 데이터베이스를 업데이트하기 위해 커밋 후 후크를 실행합니다 (이 개발 서버의 슬레이브로 실행되는 로컬 시스템으로 이동
#2
).- 기능 또는 스키마 수정 사항이 QA로 이동할 준비가되면 DBA (me)는 개발 브랜치에서 트렁크로 적절한 변경 사항을 병합합니다. 이 조치는 스테이징 데이터베이스 서버에 적용 할 SQL 스크립트를 작성합니다.
- 스테이징 서버는 프로덕션과 동일한 구조 및 QA의 변경 사항을 가져야하는 TRUNK를 반영해야합니다.
- 스테이징 서버에서 sql 스크립트를 실행 한 후 변경 사항에 대해 QA를 수행하십시오.
- 모든 것이 좋아 보인다면 구조를 태그하십시오. 그러면 DBA가 수동으로 프로덕션에서 실행할 .sql 스크립트가 생성됩니다 (필요한 경우 사용량이 적은 시간 동안).
이 프로세스를 수행하려면 모든 개발자가 동일한 '개발'분기를 실행해야합니다. 즉, 주어진 시간에 데이터베이스 스키마 버전이 하나만 있어야합니다 (필자는 확실하지 않습니다).
또한 스키마에 대한 변경 사항은 로컬에서 테스트 할 수 없으며 올바르게 수행하지 않으면 다른 개발자에게 영향을 줄 수 있습니다. 우리 환경에서 개발자는 새 테이블을 추가 할 수 있지만 기존 구조는 거의 수정하지 않을 수 있습니다. DBA로서 디자인 수정은 저에 의해 이루어집니다. 그러나 로컬에서 수정 프로그램을 테스트 할 수없는 것은 프로세스의 가장 큰 중단입니다.
위의 프로세스를 어떻게 조정하여 로컬 개발을 허용하면서 상대적으로 최신 데이터 사본을 유지하면서 (제안 된 프로세스에서 복제에 의해 제공됨)? 지난 주까지도 최신 데이터가 필요하지 않습니다.
* '일했다'는 말은 PITA 였다는 의미입니다.