2011-07-27 9 views
4

이 질문은 내가 함께 일하고 있어요 개발 팀에 와서 우리가 정말 합의를 가져올 수 없습니다 :db가 항상 CI의 일부로 변경되어야합니까?

Should changes to the database be part of the CI script?

작업중인 응용 프로그램이 포함 된 데이터베이스를 가지고 있다고 가정. 나는 이것이 통합의 정의이기 때문에 그렇다고 생각합니다. 응용 프로그램의 일부를 포함하지 않으면 통합을 실제로 테스트하지 않습니다. 반대 의견은 CI 서버가 기본 프로젝트 설정이 제대로 작동하는지 확인하는 것입니다. 이는 근본적으로 최신 버전의 코드를 처녀별로 체크 아웃하는 것입니다.

이 질문에 대답하는 CI의 "모범 사례"문서가 있습니까? 이것은 CI에 열렬한 사람들 사이에서 논의되는 것입니까?

Martin Fowler's opinion on it:

일반적인 실수는 자동화 된 빌드 모든 것을 포함하지 않는 것입니다. 빌드에는 데이터베이스 스키마를 저장소 밖으로 가져 와서 실행 환경에서 실행하는 작업이 포함되어야합니다.

답변

2

모두 DB 스키마와 선행 테이블 값을 포함한 코드는 모두 소스 제어와 지속적인 통합의 대상이되어야합니다. 나는 소스 제어가 사용되는 많은 프로젝트를 보았지만 DB는 사용하지 않았다. 대신 모든 사람이 동시에 변경 작업을 수행하는 마스터 데이터베이스 인스턴스가 있습니다. 이로 인해 분기가 불가능 해지고 시스템의 초기 상태를 다시 만들 수 없습니다.

데이터베이스 스키마 처리를 위해 Visual Studio 2010 Premium의 기능을 사용하고 싶습니다. 소스 스키마 아래에 마스터 스키마가있는 프로젝트 구조의 데이터베이스 스키마를 만듭니다. 새 데이터베이스는 프로젝트에서 바로 만들 수 있습니다. 기존 스키마를 새 스키마로 업그레이드하는 스크립트를 자동으로 생성합니다.

VS2010 프리미엄 또는 유사한 도구가없는 데이터베이스의 경우 변경 관리를 제대로 수행하는 것이 가능한 경우 고통 스럽습니다. 도구 지원이 없다면 DB를 CI에서 보호하려는 동료를 이해할 수 있습니다. CI에 DB를 포함시키는 데 문제가 있다면 DB 작업을위한 하위 툴 세트를 먼저 얻을 수있는 옵션일까요? 올바른 도구를 얻은 후에는 CI에 DB를 포함시키는 것이 자연스러운 단계입니다.

+0

도구없이 db 마이그레이션을 수행 할 수있는 옵션이 많이 있다고 생각합니다. FluentMigrator, 점진적 업그레이드 스크립트 등등. K Scott Allen은 이에 대해 이야기하는 훌륭한 기사 모음을 가지고 있습니다. – jcollum

0

실제 값이없는 경우 연속 통합이 없습니다. 이는 소프트웨어를 실행하는 데 필요한 모든 구성 요소가 CI의 일부 여야 함을 의미합니다. 그렇지 않으면 소스 제어보다 조금 더 정교하지만 CI가 실제로 제공되지 않습니다.

CI의 데이터베이스가 없으면 특정 버전의 응용 프로그램으로 롤백 할 수 없으므로 항상 완벽한 실제 환경에서 테스트를 실행할 수 없습니다.

물론 쉬운 주제는 아닙니다. 프로젝트에서 우리는 alter 스크립트를 소스 코드 변경과 함께 체크인해야합니다. 이 스크립트는 테스트 데이터베이스에서 실행되어 현재 빌드의 정확성뿐만 아니라 한 버전의 업그레이드/다운 그레이드가 가능하며 업데이트 프로세스 자체가 아무런 문제가되지 않습니다. 나는 이것이 전체 데이터베이스를 삭제하고 재 작성하는 것보다 더 나은 해결책이라고 믿는다. 데이터베이스를 단계적으로 업그레이드 할 수있는 일관된 경로를 가질 수 있으며 데이터, 사용자 등등과 같은 일종의 테스트 환경에서 데이터베이스를 사용할 수있다.

관련 문제