문제

지속적인 통합 서버가 있다고 가정 해 봅시다. 체크인하면 포스트 훅은 최신 코드를 가져와 테스트를 실행하고 모든 것을 포장합니다. 데이터베이스 변경을 자동화하는 가장 좋은 방법은 무엇입니까?

이상적으로는 데이터베이스를 처음부터 구축하거나 일부 자동 동기화 방법을 사용하여 기존 데이터베이스를 업데이트 할 수있는 설치 프로그램을 구축합니다.

도움이 되었습니까?

해결책

전체 데이터베이스 관리 및 DB 작성 프로세스를 정의하고 제어 할 기회가있는 경우 진지하게 살펴보십시오. DB 고스트 - 단순한 도구 이상입니다 - 프로세스입니다.

당신이 그것을 좋아하고 그것을 구현할 수 있다면, 당신은 그것에 대해 큰 수익을 얻을 것입니다. 그러나 그것은 약간의 "전혀 없거나 전혀없는"접근 방식입니다. 추천.

다른 팁

나는 최근에 충돌했다 기사, 그것은 사용될 수 있습니다.

저자는 테스트, 처리 및 자동화를 포함한 최고의 지속적인 통합 관행 중 일부를 설명했습니다.

주요 테이크 아웃은 다음과 같습니다.

  • 많은 상점에서 코드는 커밋 시점에서 단위 테스트입니다. 데이터베이스의 경우 모든 단위 테스트를 한 번에 실행하고 테스트 단계의 일부로 QA 데이터베이스, VS 개발에 대해 순서대로 선호됩니다.
  • 테스트 단계는 모든 CI/CD 프로세스의 중요한 부분입니다. 단위 테스트 자체를 포함한 테스트 스크립트는 소스 컨트롤에 버전을 가져와 빌드 단계의 지점에서 추출하고 실행해야합니다.
  • 생산에서 데이터를 가져 오는 것은 빠른 편의로 매력적이지만 좋은 생각은 아닙니다.
  • 가장 좋은 방법은 도구 나 스크립트를 사용하여 트랜잭션 테이블에 대한 합성 테스트 데이터를 신속하고 반복적으로 그리고 안정적으로 작성하는 것입니다.
  • 인간 소비에 대한 수동 요약 결과를 생성하기 위해 단위 테스트를 실행하면 자동화의 목적을 무너 뜨립니다. 자동화 된 프로세스가 중단, 분기 및/또는 계속 될 수있는 기계 판독 가능한 결과가 필요합니다.
  • 모든 테스트의 100%가 필요한 CI 프로세스를 실행하는 것은 워크 플로 파이프 라인이 원자 적으로 고장을 중지하도록 설정되어 있어야하는 경우 CI를 전혀 갖지 않는 것과 유사합니다. 바늘을 꿰매려면 테스트에는 임계 값이 내장되어 있어야하며, 이는 특정 높은 우선 순위 테스트가 실패한 경우 테스트의 % 또는 경우에 따라 오류가 발생합니다.
  • 모든 프로세스는 궁극적으로 패스 또는 실패의 부울 결과를 생성해야하지만, 일부가 아닌 프로세스는 CI 워크 플로 파이프 라인 (예 : 단위 테스트)으로 쉽게 찾을 수 있습니다. 소프트웨어는 모든 워크 플로 파이프 라인에 플러그 -N- 플레이해야하며 알려진 입력을 취하고 Pass, Fail과 같은 예상 출력을 생성해야합니다.
  • CI/CD 프로세스는 실패시 중단되어야하며 파이프 라인을 계속 순환하는 것과 알림 이메일을 즉시 전송해야합니다.
  • CI 프로세스는 마지막 빌드의 오류가 고정 될 때까지 다시 순환해서는 안됩니다. 실패시 전체 팀은 가능한 한 실패한 것에 대한 많은 세부 사항을 포함하여 실패 알림을 가져와야합니다.
  • 모든 테스트를 포함하여 파이프 라인이 처음부터 끝까지 1 시간이 걸리면 모든 테스트를 포함하여 모든 빌드 간격을 1 시간 이상 설정하고 모든 새로운 커밋을 대기하고 다음 빌드에 적용해야합니다.
  • 자동화 스크립트에는 일반 텍스트 비밀번호가 존재하지 않아야합니다

DB 백업을 개발 아티팩트로 사용하는 것에 대해 경고 할 것입니다. 대부분의 CI 모범 사례는 스키마, 프로 시저, 트리거 및 뷰를 일류 개발 아티팩트로 관리 할 것을 제안합니다. 부작용은이 단계를 한 단계 더 발전시켜 원할 때마다 새 데이터베이스를 구축 할 수 있다는 것입니다. 이상적으로는 데이터베이스에 푸시 할 수있는 데이터도 있습니다.

다음은 발을 젖게하기위한 Cliff Notes 버전이 있지만이 공간에는 많은 것이 있습니다. http://www.infoq.com/news/2008/02/versioning_databases_series

나는 Scott Ambler가 여기에있는 아이디어 중 일부를 좋아합니다. 사이트는 훌륭하지만이 책은 놀랍게도 어려운 문제에 대해 깊습니다.http://www.agiledata.org/ http://www.amazon.com/exec/obidos/asin/0321293533/ambysoftinc

Red Gate는 매우 강력한 솔루션이며 상자에서 작동합니다. 그러나 가장 좋은 점은 지속적인 통합 프로세스와 통합 할 수 있다는 것입니다. MSBuild와 Hudson과 함께 사용합니다. 그것이 어떻게 작동하는지 신속하게 설명 :http://blog.vincentbrouillet.com/post/2011/02/10/database-schema-synchronisation-with-redgate

이것에 대해 더 알아야한다면 자유롭게 물어보십시오.

SQL 소스 컨트롤을 사용한 Red Gate 접근법과 SQL Compar Pro Command Line은 여기에 코드 샘플에 자세히 설명되어 있습니다.http://downloads.red-gate.com/helppdf/continuousIntegrationfordatabaseSusingredgatesqltools.pdf

Troy Hunt는 "SQL Server 데이터베이스를위한 연속 통합"이라는 간단한 대화에 관한 기사를 썼습니다.http://www.simple-talk.com/content/article.aspx?article=1247

당신은 보셨습니까? 유창한 마이그레이터? 기본 다운로드에는 CI에 추가하기 쉬운 Nant 스크립트가 포함되어 있습니다. 무료, 오픈 소스이며 사용하기 쉽습니다. 다양한 데이터베이스에서 작동합니다.

DB 고스트의 최신 버전 (5.0)은 "비 ASCII 문자"문제로 어려움을 겪지 않으며 (파일이 UTF8이 인코딩되었음을 의미 함) 필요한 것을 정확하게 수행 할 수 있어야합니다.

또한 도구는 실제로 독립형으로 사용하여 다양한 기능 (스크립팅, 빌딩, 비교, 업그레이드 및 포장)을 수행 할 수 있습니다. 부분의 합보다 큽니다.

본질적으로 스키마를 변경하려면 "Day One"Greenfield 데이터베이스를 개발하는 것처럼 소스 컨트롤 아래에있는 개별 객체 작성 스크립트 및 테이블 당 삽입 스크립트 (참조 데이터)를 업데이트합니다. DB Ghost 도구는 이러한 스크립트를 새로운 데이터베이스 (필요한 경우 연속 통합 사용)로 구축 한 다음 생산 데이터베이스의 사본이 될 수있는 대상 데이터베이스를 비교하고 업그레이드하여 모든 것을 가능하게하는 데 사용됩니다. 이 프로세스는 델타 스크립트를 생성하여 이동 중 실제 프로덕션 데이터베이스에서 사용할 수 있습니다.

Visual Studio 데이터베이스 프로젝트를 생성하여 현재 보유하고있는 솔루션에 추가 할 수도 있습니다.

MALC

이 게시물이 오래된 것을 알고 있지만 다음과 같은 접근 방식을 취하는 새로운 솔루션이 있습니다.

  1. 개발자는 개별 SQL을 스크립트하고 소스 제어에 커밋합니다.
  2. 우리 프로그램 (OneScript) Source Control에서 변경 스크립트 파일을 가져와 필터링하고 정렬하고 단일 릴리스 스크립트 파일을 생성합니다.
  3. 그런 다음 해당 스크립트 파일이 데이터베이스에 적용되어 릴리스를 수행합니다.

우리 홈페이지 여기 이 프로세스를보다 자세히 설명하고 전복 후크에서 이러한 단계를 자동으로 수행하는 예제에 대한 링크가 있습니다. 따라서 커밋 직후, 개발자는 릴리스가 성공했거나 오류가 있으면 이메일을받습니다. PowerScript 코드가 포함되어 있습니다.

면책 조항 -나는 OneScrip을 만드는 회사에서 일하고 있습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top