2008-11-17 38 views
7

Chúng tôi đang gặp sự cố về hiệu suất với việc triển khai Team Foundation Build Server và tôi đang hết ý tưởng về cách tăng tốc mọi thứ. Chúng tôi đã thêm một vài thành phần PropertyGroup để tăng hiệu suất trên một vài bước (SkipClean, SkipLabel, SkipInitializeWorkspace), nhưng tôi nghĩ chúng ta cần trải qua một quá trình tái cơ cấu lớn để sửa chữa mọi thứ. Đây là thiết lập của chúng tôi:Team Build now Painfully Slow

  • Chúng tôi đã có khoảng 40 ứng dụng web mà mỗi rất khác nhau, nhưng chạy ra một loạt các hội chia sẻ
  • Mỗi của các ứng dụng web có giải pháp riêng của họ;
  • Có khoảng 10 đến 25 cụm được chia sẻ được tham chiếu bởi từng ứng dụng web này;
  • Có tồn tại một định nghĩa xây dựng chứa tất cả các giải pháp được kích hoạt trên mỗi lần đăng ký vào thân cây;

Và đây là những vấn đề cơ bản chúng ta đang gặp phải

  • Trong xây dựng, nó sẽ xây dựng từng lắp ráp chia sẻ nhiều lần như nó được tham chiếu, chứ không phải là xây dựng một lần và sử dụng cho mỗi ứng dụng
  • Thời gian sao chép tệp rất chậm đối với thư mục thả. Nó phải trên mạng chia sẻ và sẽ không có một con đường địa phương.
  • Mọi quá trình xây dựng, một hoặc nhiều tệp đầu ra bị "khóa" và làm cho quá trình xây dựng bị phá vỡ ngay cả khi biên dịch là tốt.
  • Và một điều nữa - tôi cũng đã thử các định nghĩa xây dựng riêng biệt, nhưng làm như vậy cũng sẽ buộc không gian làm việc khác được nhận trên phiên bản Get Latest. Tôi muốn có nhiều hơn là nó được xây dựng máy chủ có chứa một phiên bản của thân cây để xây dựng tắt của.

Trong vài tháng qua, chúng tôi đã đưa ra sự thờ ơ và bỏ qua vấn đề này, nhưng bây giờ thời gian xây dựng là hơn một giờ đến một giờ rưỡi.

Tôi đang đùa giỡn với ý tưởng học tập và chuyển sang Kiểm soát hành trình để có khả năng kiểm soát tốt hơn. Bất cứ ai không đồng ý với điều đó?

Bất kỳ trợ giúp nào được đánh giá cao nhất. Cảm ơn!

Trả lời

2

Đầu tiên, có vẻ như tất cả các ứng dụng web của bạn đều nằm trong cùng một Project Team. Nếu đó là sự thật, hãy chia chúng thành các nhóm hợp lý. Điển hình là một dự án nhóm đơn lẻ nên bao gồm một mô hình triển khai duy nhất.

Thứ hai, chia các nhóm được chia sẻ thành một Dự án nhóm của riêng họ. Sau khi di chuyển, bạn có một vài lựa chọn, bạn có thể phân nhánh nguồn hoặc các DLL đã biên dịch cho các dự án nhóm cần chúng. Họ có thể có các bài kiểm tra đơn vị riêng của họ và bạn có thể mở rộng nhóm xây dựng để tự động hợp nhất vào một bài kiểm tra thành công nếu bạn nghiêng.

Tóm lại, bạn cần phải đơn giản hóa chiến lược xây dựng của mình.

0

Phát biểu từ kinh nghiệm cá nhân về đề xuất CruiseControl - hãy nhớ đó là tích hợp "khuôn khổ" liên tục. Nó sẽ không giải quyết tất cả các vấn đề của bạn ra khỏi hộp (xây dựng thành phần, bắn vào mỗi thay đổi thành phần, và xây dựng nối tiếp mặc dù sẽ làm cho mọi thứ tốt hơn rất nhiều). Nó sẽ mất một số cấu hình (và thậm chí có thể tùy biến) để có được những thứ bạn muốn, vì vậy hãy chuẩn bị sẵn sàng để đầu tư một thời gian.Tất nhiên, bạn sẽ gặt hái một khoản tiền lớn trong thời gian dài nếu thời gian xây dựng của bạn được giảm xuống - nếu bạn không thể bỏ qua vấn đề nữa, bạn nên đầu tư một thời gian vào giải pháp CI tốt hơn.

Xin lưu ý rằng bất kỳ nỗ lực CI nào cũng chỉ tốt như các chính sách bạn có tại chỗ. Chúng tôi đã có những khoảng trống chính sách rất lớn khi đưa ra phiên bản ghi nhãn, phát hành, phụ thuộc, phát hành phiên bản beta của tệp nhị phân, bản dựng lưu trữ ... và nhiều vấn đề khác mà chúng tôi thậm chí không cân nhắc tại thời điểm đó.

Ngoài ra, hãy chuẩn bị để dành ít nhất một số tài nguyên để duy trì sự việc. Nó không phải là một công việc toàn thời gian (và tôi cho một tình yêu làm điều đó, vì nó tạo ra cải tiến qui trình liên tục). Các tùy chỉnh của chúng tôi đã đưa chúng tôi từ bản dựng nguyên khối 2 giờ sản phẩm đầu tiên của chúng tôi lên hơn 400 thành phần trong 20 sản phẩm được xây dựng song song trên nhiều máy trong vòng 20 phút, vì vậy nó rất đáng giá.

+0

Có an toàn khi nói rằng hành vi out-of-the-box của Team Foundation Build có chút khó hiểu? Khi xác định các bản dựng trong trình hướng dẫn, bạn sẽ có tùy chọn chọn Visual Studio Solutions để đưa vào. Có vẻ như bạn đang ủng hộ sự tách biệt khỏi tiêu chuẩn đó, đúng không? –

+1

Tôi muốn bênh vực không phải là nô lệ cho công cụ * bất kỳ * nào - đặc biệt là công cụ xây dựng. Cấu hình out-of-the-box 'dễ dàng' thật tuyệt vời để bắt đầu một dự án nhưng nó chắc chắn sẽ trở thành không thể quản lý được trong thời gian dài. Đó là giá trị (liên tục) nỗ lực để một cách rõ ràng chính tả những gì xây dựng cần phải làm. – Chris

1

Bạn có thực sự cần xây dựng mọi thứ trong mọi ứng dụng web không? Nếu các hội đồng chia sẻ không thay đổi, tại sao lại xây dựng chúng lại nhiều lần?

Dưới đây là một ý nghĩ:

  1. Hãy mỗi ứng dụng web có \ thư mục lib của riêng mình.
  2. Đặt mọi bộ sưu tập được chia sẻ trong thư mục lib.
  3. Cho phép ứng dụng web chỉ tham chiếu các assembly được chia sẻ từ thư mục lib cục bộ của nó.
  4. Kiểm tra tất cả mọi thứ trong.

Bây giờ một xây dựng không nên bắt đầu trừ khi một cái gì đó đã thay đổi, và việc xây dựng sẽ không bao gồm các hội chia sẻ.

  • Nên có một thư mục trung tâm chứa tất cả các hội đồng được chia sẻ.
  • Bất kỳ thay đổi nào ở đây đều sẽ lan truyền đến tất cả thư mục \ lib cục bộ.
  • Cuối cùng, mọi phiên bản được chia sẻ sẽ được sao chép vào thư mục trung tâm bất cứ khi nào chúng thay đổi.

Ý tưởng ở đây là có một dự án được chia sẻ để chỉ biết thư mục trung tâm. Điều này sẽ đơn giản hóa mọi hành động sau khi xây dựng cần thiết để sao chép bản dựng.

Thư mục trung tâm phải được quản lý theo cách sao cho mọi thay đổi sẽ được sao chép sang tất cả các ứng dụng web tham chiếu.

3

Vì vậy, đây là những gì tôi đã làm và tôi đã nhận được bản dựng xuống còn 9 phút. Đối với số lượng dự án tôi đang biên soạn, tôi ổn với điều đó.

  • Tạo giải pháp chứa tất cả thư viện được chia sẻ và tất cả các trang web. Có rất nhiều công việc phụ trong bước này bởi vì tôi đã phải sửa một loạt các tài liệu tham khảo đã được mã di sản hoặc lưu trữ ở nhiều nơi khác.
  • Điều cuối cùng tiết kiệm được nhiều nhất là thực hiện hệ thống tệp di chuyển thay vì bản sao mạng cho tất cả các tệp đầu ra. Vì vị trí thả của chúng tôi thực sự nằm trên máy chủ xây dựng, điều đó có ý nghĩa.

Để thực hiện di chuyển, tôi chỉ ghi đè lên mục tiêu CoreDropBuild trong TFSBuild.proj file:

<Target Name="CoreDropBuild" 
     Condition=" '$(SkipDropBuild)'!='true' and '$(IsDesktopBuild)'!='true' " 
     DependsOnTargets="$(CoreDropBuildDependsOn)" > 
      <Exec Command="move $(BinariesRoot)\Release d:\BuildOutput\$(BuildNumber)\Release"/>  
</Target> 
Các vấn đề liên quan