2

빌드, 통합 및 유닛 테스트와 배포를 능률화/자동화하는 과정에 있습니다. 우리의 소프트웨어는 C#과 VB.NET을 모두 사용하는 Visual Studio에서 개발되었습니다. 단일 프로젝트가 여러 솔루션에 포함될 수 있습니다 (예 : Utils 프로젝트가 ProductA 및 ProductB 솔루션 모두에 사용됨).빌드 서버의 NAnt 빌드 스크립트 및 솔루션 구조의 구조

Google의 코드 저장소는 역사적인 이유로 인해 원하는대로 구조화되지 않았습니다. 예. Utils 프로젝트는 ProductA 솔루션 아래에있을 수 있습니다 (처음 사용 되었기 때문에).하지만 나중에 제품 B 개발에 유용하다고 간주되어 productB 솔루션에 포함되었습니다 (그러나 여전히 제품 A의 하위 디렉토리에 있음).

지속적인 통합 테스트를 사용하고 실제 빌드를 만드는 데 NAnt를 사용할 CC.NET 빌드 서버를 설치하고 싶습니다.

질문 1 : 빌드 서버에서 빌드를 어떻게 구성해야합니까? 예를 들어 CC.NET이 productB의 모든 프로젝트를 단일 라이브러리로 가져 오도록 지시해야합니까? 다음

-ProductB 
--Utils 
--BetterUtils 
--Data 

아니면이

-ProductA 
--Utils 

-ProductB 
--BetterUtils 
--Data 

유사한 filestructure을 선택해야하며, 유사한 파일 구조 만은 NAnt 스크립트가 참조를 처리 구축이? VS에서 우리의 참조가 코드 저장소의 실제 위치와 일치하지 않으므로 productB 솔루션을 체크 아웃하고 즉시 빌드 할 수 없습니다 (불행히도). 나는이 질문이 의미가 있기를 바랍니다.

질문 2 :은 더 나은 (구조의 일종을 유지하면서) 하나의 파일 폴더에 다른 프로젝트에있는 모든 소스 코드를 체크 아웃하고 구축 모든 것을 한 번에 또는 CC에서 여러 프로젝트를하는 것입니다. NET을 누른 다음 CC.NET 서버가 종속성을 처리하게 하시겠습니까? 예제 : Utils 프로젝트의 자동화 된 빌드/테스트를 모니터링하기 위해 별도의 프로젝트를 CC.NET에 설치해야합니까? 아니면 ProductB의 일부로 구축하는 동안 구축/테스트해야합니까?

위의 내용이 의미가 있으며 두 옵션 중 하나를 사용하기위한 몇 가지 인수를 제공 할 수 있기를 바랍니다. 우리는 이상적인 소스 코드 저장소 구조가 어디에도 없으며 저장소 구조를 정리하는 대신 빌드 서버에서 저장소 구조가 부족하다는 점을 해결할 수있는 방법을 선호합니다. VSS에서 전환하는 것은 (불행히도) 옵션이 아닙니다.

지금 우리 빌드는 VS clickonce를 통해 배포하거나 F5 키를 눌러 배포하므로 자동화 된 빌드를 얻는 것이 큰 도움이됩니다.

감사

답변

0

나는 각 빌드 프로젝트에 대해 별도의 최상위 폴더를 추천 할 것입니다, 첫 번째 질문에 대답합니다. 소스 저장소와 일치하는 단일 트리가있는 문제는 빌드 서버가 여러 빌드를 한 번에 실행하려고 할 때 다른 프로세스에서 사용중인 파일로 인해 하나 이상의 파일이 실패 할 가능성이 높다는 것입니다. 또한 빌드 스크립트가 이전 버전의 코드를 가져 오는 경우도 발생할 수 있습니다. 이 경우 다른 프로젝트가 실수로 잘못된 소스 버전을 사용하는 것을 원하지 않습니다.

이 솔루션은 이미이 같은 구조로 끝낼 수, 상대 경로에서 프로젝트를 참조하는 경우 :

-CCNetBuilds 
--ProductASource 
---Utils 
---... 
--ProductBSource 
---ProductA 
----Utils 
---ProductB 
----BetterUtils 
----Data 

이 경우, 제품 B에 대한 빌드는 제품의 일부는에서 소스를 포함 솔루션에서 이미 예상 한 상대 경로와 동일합니다. 이렇게하면 CC.Net에서 설정하는 데 시간이 좀 더 걸리지 만 개발자가 코드를 자신의 컴퓨터에 설치 한 경우 유지 관리가 더 쉬워집니다. 개발시 사용 된 동일한 솔루션 파일이 빌드 서버에서 사용됩니다.

두 번째 질문에 답하기 위해 필자는 유틸리티를 자체 빌드로 선호합니다. 내 유틸리티 어셈블리에서 단위 테스트를 수행하는 경우 유틸리티를 사용하는 모든 단일 제품에 대해 단위 테스트를 실행하지 않을 것입니다. 또한 유틸리티 용 빌드가 별도 인 경우 CC.Net에서 종속성을 설정하여 유틸리티 빌드가 손상된 경우 제품 A와 B가 빌드를 시도하지 않도록 할 수 있습니다. 이것은 약간 잘못된 피드백이 조금 더 빠릅니다.

+0

나는 당신의 제안을 실험 해 보았고 올바른 방법 인 것처럼 보인다. 여전히 NAnt 스크립트를 빌드를 실행하도록 설정하고 있지만 프로젝트의 실제 솔루션 파일을 사용하여 Nant의 MSBuild 작업을 통해 빌드를 실행합니다. 또한 많은 추가 디렉토리가 추가되지만 제안한 상대 참조를 채택 할 예정입니다. 나는 격리가 중요하다고 생각합니다. 우리는 TFS2008로 전환 할 가능성이 높습니다. 빌드 서버를 설정하는 이러한 노력이 낭비되지 않기를 바랍니다. 도움 주셔서 감사합니다. – llykke

관련 문제