2010-11-29 8 views
0

우리는 여러 가지 솔루션으로 구성된 분산 .net 시스템을 가지고 있습니다. 각각의 구성 및 배포 요구 사항은 다릅니다. 현재 모든 코드는 하나의 TFS 프로젝트에 있으며 각 솔루션마다 고유 한 빌드가 있습니다. 이들은 솔루션 소스 제어 폴더의 변경을 트리거하도록 구성됩니다.여러 솔루션을 사용하여 분산 .net 시스템 배포

Team City, Git 및 Rake (분기 및 라이센스 비용의 용이성으로 인해)로 이동하고 있으므로 전체 빌드 프로세스를 검토하고 이에 대한 좋은 정보를 찾을 수 없습니다. 해결하기 위해 애 쓰고있는 문제는 다음과 같습니다.

  1. 개별 빌드 또는 하나의 대형 빌드가 있어야합니까? 시스템이 작동하려면 모든 솔루션을 빌드하고 배포해야하지만 빠르고 쉽게 디버깅 할 수 있으므로 작은 빌드를 사용하는 것이 좋습니다. 일부 솔루션은 다른 솔루션보다 "독립적"입니다. 우리의 현재 관행은 테스트 또는 프로덕션 환경에 배포하려는 경우 모든 빌드를 대기열에 배치하는 것일 뿐이지 만 가끔 변경된 경우 개별 솔루션을 큐에 대기시키는 경우도 있습니다.

  2. 우리는 모든 솔루션을 하나의 저장소에 저장해야합니까, 아니면 각각의 저장소를 가지고 있어야합니까? 우리는 몇몇 공유 프로젝트와 dll을 사용합니다. 어떻게 이들이 별도의 저장소에서 작동합니까?

답변

0

리포지토리를 저장하고 빌드를 수행하고 인스턴스를 배포하는 방법에는 여러 가지가 있습니다. 그리고 그들 중 많은 사람들이 옳습니다. 제 연습에서 당신이 사용하는 기법과 빌드 및 전개를위한 도구가 중요하지 않습니다. 그래서 이러한 프로세스에 영향을 미치는 문제를 제기하는 것이 중요하다 :

  • 분리 할 수있는 솔루션/프로젝트의 간섭이를 방지하기 위해 (독립적으로). 몇 가지 솔루션간에 프로젝트를 공유하는 경우 별도의 리포지토리를 만드는 것이 좋습니다. 그리고 의존적 인 솔루션/프로젝트의 관계를 추가하십시오.
  • 다른 목적으로 다른 빌드를 생성하는 동안 발생하는 문제 (구성 관리)를 방지합니다. TeamCity를 조정할 수 있습니다 (주로 '커밋'또는 시간 기반 스케줄 이후에 빌드 및 배포 자동화 용). 미리 정의 된 구성으로 NAnt와 같은 간단하지만 강력한 유틸리티를 사용할 수 있습니다.

그래서 나는 이유는 (전용 릴리스에있을 수 있습니다) 하나의 큰 빌드를하지 않습니다에 볼 수 있지만, 사용하기 쉬울 것 빌드 분리 (QA에 대한, 그리고 일부에서만 작동 개발자). 두 번째 문제는 시간입니다. 예를 들어 하나의 솔루션으로 모든 프로젝트를 완전히 빌드하려면 쿼드 CPU 8GB RAM에서 약 10 분이 걸리지 만 회계 부서 또는 등록 부서에서만 빌드하려면 1 분이 걸립니다. 이 과정을 상상해보십시오. 종이를 그리면 명확하게됩니다. 무엇을해야하며, 어떻게해야합니까?

모든 의견은 내 연습에만 기반합니다. 매일/밤에 변화가 일어나고 수십 가지 구성 (빌드)이있는 성공적인 프로젝트에서 모든 의견을 반영합니다.

+0

답변을 완전히 이해하지 못했습니다. 정확히 "솔루션/프로젝트를 망친 것"은 무엇입니까? 왜 공유 프로젝트를위한 별도의 저장소를 만들고 싶습니까? 우리는 모든 솔루션을 하나의 저장소 아래 폴더에두고 상대 경로를 사용하여 프로젝트를 공유합니다 (Visual Studio에서 기존 프로젝트 추가). 프로젝트를 우리의 모든 솔루션으로 나눠 줄 것을 제안하고 있습니까? (이것은 오버 헤드가 합쳐집니다)? 우리가 하나의 큰 빌드를 고려하는 유일한 이유는 빌드의 대부분이 서로 의존한다는 것입니다. – JontyMC

+0

솔루션/프로젝트를 망친 것 - 너무 큰 솔루션은 개발자와 함께 일하는 대부분의 사람들 (devs, qa, 코드 리뷰어)에게 약간의 혼동을줍니다. (예 : 클라이언트가 몇 가지 기능 만 갖고 싶어하는 경우) 기능을 분리하는 것이 더 어렵지만 개발자가 프로젝트간에 과도한 의존성을 추가했습니다 (때로는 발생). 솔루션이 분할되면 각 부분을 별도로 유지 관리하는 것이 더 쉽습니다. – Genius

+0

저장소 정보. 모든 솔루션을 하나의 저장소에 저장하면 Branch, Merge 등의 SourceControl 명령을 사용하기가 더 어려워집니다. – Genius

관련 문제