Điểm của “Máy chủ xây dựng” là gì? [đóng cửa]


101

Tôi chưa từng làm việc cho các tổ chức lớn và chưa bao giờ làm việc cho một công ty có "Máy chủ xây dựng".

Mục đích của họ là gì? Tại sao các nhà phát triển không xây dựng dự án trên máy cục bộ của họ, hay là chúng? Có phải một số dự án lớn đến mức cần nhiều máy móc mạnh hơn để xây dựng nó trong một khoảng thời gian hợp lý?

Nơi duy nhất tôi thấy Máy chủ xây dựng hữu ích là tích hợp liên tục với máy chủ xây dựng liên tục xây dựng những gì đã cam kết với kho lưu trữ. Có phải tôi đã không làm việc trên các dự án đủ lớn?

Ai đó, xin hãy khai sáng cho tôi: Mục đích của một máy chủ xây dựng là gì?

Câu trả lời:


94

Lý do được đưa ra thực sự là một lợi ích rất lớn. Các bản dựng đi đến QA chỉ nên đến từ một hệ thống chỉ xây dựng từ kho lưu trữ. Bằng cách này, các gói xây dựng có thể tái tạo và có thể theo dõi. Các nhà phát triển xây dựng mã theo cách thủ công cho bất kỳ thứ gì ngoại trừ thử nghiệm của riêng họ là rất nguy hiểm. Quá nhiều rủi ro về việc nội dung không được đăng ký, lỗi thời với các thay đổi của người khác, v.v.

Joel Spolsky về vấn đề này.


7
Mọi thứ trở nên đặc biệt khó khăn khi các nhà phát triển đang xây dựng chống lại các thư viện đang chảy máu, không nhận ra nó và sau đó nhận được lỗi "NoClassDefFound" ở khắp nơi trong quá trình thử nghiệm và mọi người khác tự hỏi có chuyện gì xảy ra. (Đây là vấn đề trong công việc dựa trên Java của tôi cho đến khi tôi thiết lập Hudson và chúng tôi đã chuyển các bản dựng QA sang đó)
MattC

1
Trên thực tế, đây chỉ là lý do để xây dựng từ một thanh toán sạch, không phải để xây dựng từ một tác nhân xây dựng chuyên dụng trên một máy chủ xây dựng chuyên dụng. Chạy một tập lệnh xây dựng tự động trong quá trình kiểm tra sạch sẽ kho lưu trữ trên máy của các nhà phát triển cục bộ đã mang lại hầu hết các lợi thế của một máy chủ xây dựng chuyên dụng.
Kaiserludi

Một lợi ích chính, IMHO, là nó buộc bạn phải sử dụng hệ thống xây dựng sẽ chạy tự động 100% và rất khuyến khích bạn không cần nhấn nút nào để bắt đầu. Không chỉ là bạn có một nguồn duy nhất cho các bản phát hành và bản dựng thử nghiệm, mà còn về việc đảm bảo rằng mọi người không làm hỏng hệ thống bản dựng của bạn.
Rõ ràng hơn

48

Xây dựng máy chủ là quan trọng vì một số lý do.

  • Chúng cô lập môi trường Nhà phát triển Code Monkey địa phương nói "Nó biên dịch trên máy của tôi " khi nó không biên dịch trên máy của bạn. Điều này có thể có nghĩa là đăng ký không đồng bộ hoặc có thể có nghĩa là thiếu một thư viện phụ thuộc. Địa ngục Jar không tệ như địa ngục .dll; Theo cách nào đó, việc sử dụng máy chủ bản dựng là một biện pháp bảo hiểm rẻ tiền để các bản dựng của bạn không bị lỗi một cách bí ẩn hoặc đóng gói sai các thư viện do nhầm lẫn.

  • Họ tập trung các nhiệm vụ liên quan đến các bản dựng. Điều này bao gồm cập nhật thẻ xây dựng, tạo bất kỳ gói phân phối nào, chạy thử nghiệm tự động, tạo và phân phối báo cáo xây dựng. Tự động hóa là chìa khóa.

  • Họ điều phối (phân phối) phát triển. Trường hợp tiêu chuẩn là nơi nhiều nhà phát triển đang làm việc trên cùng một cơ sở mã. Hệ thống kiểm soát phiên bản là trung tâm của kiểu phát triển phân tán này nhưng tùy thuộc vào công cụ, các nhà phát triển có thể không tương tác nhiều với mã của nhau. Thay vì buộc các nhà phát triển phải mạo hiểm với các bản dựng xấu hoặc lo lắng về việc hợp nhất mã quá mạnh, hãy thiết kế quy trình xây dựng trong đó bản dựng tự động có thể thấy mã phù hợp và xử lý các tạo tác bản dựng theo cách có thể dự đoán được. Bằng cách đó, khi một nhà phát triển cam kết điều gì đó có vấn đề, chẳng hạn như không kiểm tra phần phụ thuộc tệp mới, họ có thể được thông báo nhanh chóng. Làm điều này trong một khu vực theo giai đoạn, cho phép bạn gắn cờ mã đã tạo để các nhà phát triển không kéo mã có thể phá vỡ bản dựng cục bộ của họ. PVCS đã thực hiện điều này khá tốt khi sử dụng ý tưởng của các nhóm quảng bá. Clearcase cũng có thể làm điều đó bằng cách sử dụng nhãn nhưng sẽ yêu cầu quản lý quy trình nhiều hơn so với việc nhiều cửa hàng cung cấp.


12
+1 Việc yêu cầu các lập trình viên ghi lại các thay đổi đối với môi trường xây dựng của họ giống như việc chăn gia súc. Đơn giản là họ không thể nhớ họ đã cập nhật .Net hoặc Boost lib của mình ở giai đoạn nào, nếu họ nhận ra rằng họ đã làm điều đó. Có một máy chủ trung tâm thực hiện xây dựng hàng ngày bắt họ thực hiện vào buổi tối sau khi họ kiểm tra mã - và không có gì thúc đẩy bằng việc được nói, "bạn đã phá vỡ xây dựng đội, bạn đã quên điều gì?"
kmarsh

28

Mục đích của họ là gì?
Nhận tải các máy của nhà phát triển, cung cấp một môi trường ổn định, có thể tái tạo cho các bản dựng.

Tại sao các nhà phát triển không xây dựng dự án trên máy cục bộ của họ, hay là chúng?
Bởi vì với phần mềm phức tạp, đáng kinh ngạc là nhiều thứ có thể xảy ra sai sót khi chỉ "biên dịch qua". vấn đề tôi đã thực sự gặp phải:

  • kiểm tra phụ thuộc không đầy đủ các loại khác nhau, dẫn đến các tệp nhị phân không được cập nhật.
  • Xuất bản lệnh không thành công âm thầm, thông báo lỗi trong nhật ký bị bỏ qua.
  • Xây dựng bao gồm các nguồn cục bộ chưa được cam kết kiểm soát nguồn (may mắn thay, chưa có hộp thông báo "khách hàng chết tiệt" ..).
  • Khi cố gắng tránh sự cố trên bằng cách tạo từ một thư mục khác, một số tệp đã chọn từ sai thư mục.
  • Thư mục đích nơi các tệp nhị phân được tổng hợp chứa các tệp nhà phát triển cũ bổ sung mà shoulkd không được đưa vào bản phát hành

Chúng tôi đã có một sự gia tăng độ ổn định đáng kinh ngạc vì tất cả các bản phát hành công khai đều bắt đầu với quyền truy cập từ kiểm soát nguồn vào một thư mục trống. Trước đây, có rất nhiều "vấn đề hài hước" đã biến mất khi Joe đưa cho tôi một DLL mới.

Có phải một số dự án lớn đến mức cần nhiều máy móc mạnh hơn để xây dựng nó trong một khoảng thời gian hợp lý?

"Hợp lý" là gì? Nếu tôi chạy bản dựng hàng loạt trên máy cục bộ của mình, có nhiều thứ tôi không thể làm được. Thay vì trả tiền cho các nhà phát triển để hoàn thành các bản dựng, hãy trả tiền cho CNTT để mua một máy xây dựng thực sự.

Có phải tôi đã không làm việc trên các dự án đủ lớn?

Kích thước chắc chắn là một yếu tố, nhưng không phải là yếu tố duy nhất.


8

Máy chủ xây dựng là một khái niệm khác biệt với máy chủ Tích hợp liên tục. Máy chủ CI tồn tại để xây dựng các dự án của bạn khi các thay đổi được thực hiện. Ngược lại, máy chủ Xây dựng tồn tại để xây dựng dự án (thường là một bản phát hành, chống lại một bản sửa đổi được gắn thẻ) trên một môi trường sạch sẽ. Nó đảm bảo rằng không nhà phát triển nào hack, chỉnh sửa, phiên bản cấu hình / tạo tác chưa được phê duyệt hoặc mã không được cam kết làm cho nó trở thành mã đã phát hành.


câu trả lời chính xác. ủng hộ cho cả tên.
Philip Schiff

6

Máy chủ xây dựng được sử dụng để xây dựng mã của mọi người khi nó được đăng ký. Mã của bạn có thể biên dịch cục bộ, nhưng rất có thể bạn sẽ không có tất cả các thay đổi được thực hiện bởi những người khác mọi lúc.


5

Để thêm vào những gì đã được nói:

Một đồng nghiệp cũ đã làm việc trong nhóm Microsoft Office và nói với tôi rằng một bản dựng hoàn chỉnh đôi khi mất 9 giờ. Điều đó sẽ tệ khi làm điều đó trên máy của BẠN , phải không?


4

Cần phải có một môi trường "sạch" không có tạo tác của các phiên bản trước (và các thay đổi cấu hình) để đảm bảo rằng các bản dựng và thử nghiệm hoạt động và không phụ thuộc vào các tạo tác. Một cách hiệu quả để cô lập là tạo một máy chủ xây dựng riêng.


4

Tôi đồng ý với các câu trả lời cho đến nay liên quan đến tính ổn định, khả năng theo dõi và khả năng tái tạo. (Rất nhiều 'ity's, phải không?). Chỉ từng làm việc cho các công ty lớn (Chăm sóc sức khỏe, Tài chính) với NHIỀU máy chủ xây dựng, tôi muốn nói thêm rằng đó cũng là về bảo mật. Bạn đã từng xem bộ phim Office Space chưa? Nếu một nhà phát triển bất mãn xây dựng một ứng dụng ngân hàng trên máy cục bộ của anh ta và không ai khác nhìn vào nó hoặc kiểm tra nó thì ... BOOM. Siêu nhân III.


hoàn toàn @Greg! Mọi người ở đây dường như đã bỏ lỡ phần đó. Tôi hiện đang làm việc trên một quy trình kiểm soát thay đổi để tuân thủ yêu cầu một bộ phận thứ cấp triển khai đến sản xuất. Chà, trừ khi bạn muốn dạy CNTT cách sử dụng Visual Studio và triển khai yada yada yada ... điều này sẽ cung cấp cho bạn cách thực hiện việc này bằng những cú nhấp chuột nhanh chóng.
gcoleman0828

3

Những máy này được sử dụng vì một số lý do, tất cả đều cố gắng giúp bạn cung cấp một sản phẩm cao cấp.

Một cách sử dụng là mô phỏng cấu hình người dùng cuối điển hình. Sản phẩm có thể hoạt động trên máy tính của bạn, với tất cả các công cụ phát triển và thư viện của bạn được thiết lập, nhưng người dùng cuối rất có thể sẽ không có cùng cấu hình với bạn. Đối với vấn đề đó, các nhà phát triển khác cũng sẽ không có thiết lập chính xác như bạn. Nếu bạn có một đường dẫn được mã hóa cứng ở đâu đó trong mã của mình, nó có thể sẽ hoạt động trên máy của bạn, nhưng khi Dev El O'per cố gắng tạo cùng một mã, nó sẽ không hoạt động.

Ngoài ra, chúng có thể được sử dụng để theo dõi ai đã phá sản phẩm lần cuối, với bản cập nhật nào và sản phẩm bị thoái lui ở đâu. Bất cứ khi nào mã mới được kiểm tra, máy chủ xây dựng sẽ xây dựng nó và nếu nó không thành công, rõ ràng là có gì đó không ổn và người dùng thực hiện lần cuối cùng là lỗi.


2

Để có chất lượng nhất quán và để bản dựng 'khỏi máy của bạn' để phát hiện lỗi môi trường và để bất kỳ tệp nào bạn quên kiểm tra nguồn kiểm soát cũng hiển thị dưới dạng lỗi bản dựng.

Tôi cũng sử dụng nó để tạo trình cài đặt vì chúng mất rất nhiều thời gian để thực hiện trên máy tính để bàn với việc ký mã, v.v.


1

Chúng tôi sử dụng một để chúng tôi biết rằng các hộp sản xuất / thử nghiệm có cùng các thư viện và phiên bản của các thư viện đó được cài đặt như những gì có sẵn trên máy chủ bản dựng.


1

Đó là về quản lý và thử nghiệm cho chúng tôi. Với một máy chủ xây dựng, chúng tôi luôn biết rằng chúng tôi có thể xây dựng dòng "trung kế" chính của mình từ kiểm soát phiên bản. Chúng tôi có thể tạo một bản cài đặt chính chỉ với một cú nhấp chuột và xuất bản nó lên web. Chúng tôi có thể chạy tất cả các bài kiểm tra đơn vị của mình mỗi khi mã được kiểm tra để đảm bảo nó hoạt động. Bằng cách thu thập tất cả các nhiệm vụ này vào một máy duy nhất, việc thực hiện lặp đi lặp lại dễ dàng hơn.


1

Bạn nói đúng rằng các nhà phát triển có thể xây dựng trên máy của riêng họ.

Nhưng đây là một số thứ mà máy chủ xây dựng của chúng tôi mua cho chúng tôi và chúng tôi hầu như không phải là những nhà sản xuất xây dựng tinh vi:

  • Các vấn đề về kiểm soát phiên bản (một số vấn đề đã được đề cập trong các câu trả lời trước đó)
  • Hiệu quả. Các nhà phát triển không cần phải dừng lại để tạo bản dựng tại địa phương. Họ có thể khởi động nó trên máy chủ và bắt đầu nhiệm vụ tiếp theo. Nếu các bản dựng lớn, thì đó thậm chí còn nhiều hơn thời gian mà máy của nhà phát triển không bị chiếm dụng. Đối với những người thực hiện tích hợp liên tục và kiểm tra tự động, thậm chí còn tốt hơn.
  • Tập trung hóa. Máy xây dựng của chúng tôi có các tập lệnh tạo ra bản dựng, phân phối nó đến môi trường UAT và thậm chí cho quá trình sản xuất. Giữ chúng ở một nơi giúp giảm bớt rắc rối khi giữ chúng đồng bộ.
  • Bảo vệ. Chúng tôi không làm gì đặc biệt ở đây, nhưng tôi chắc chắn rằng một sysadmin có thể làm cho nó trở thành công cụ di chuyển sản xuất chỉ có thể được truy cập trên một máy chủ bản dựng bởi một số thực thể được ủy quyền.

1

Có lẽ tôi là người duy nhất ...

Tôi nghĩ rằng mọi người đều đồng ý rằng một người nên

  • sử dụng một kho lưu trữ tệp
  • xây dựng từ kho lưu trữ (và trong môi trường sạch sẽ)
  • sử dụng máy chủ kiểm tra liên tục (ví dụ: kiểm soát hành trình) để xem liệu có gì bị hỏng sau khi bạn "sửa lỗi"

Nhưng không ai quan tâm đến các phiên bản được xây dựng tự động. Khi một cái gì đó bị hỏng trong một bản dựng tự động, nhưng nó không còn nữa - ai quan tâm? Đó là một công việc đang được tiến hành. Ai đó đã sửa nó.

Khi bạn muốn thực hiện một phiên bản phát hành, bạn chạy một bản dựng từ kho lưu trữ. Và tôi khá chắc rằng bạn muốn gắn thẻ phiên bản trong kho lưu trữ tại đó thời gian và không phải mọi sáu tiếng đồng hồ khi máy chủ nào đó của công việc.

Vì vậy, có thể "máy chủ xây dựng" chỉ là một từ gọi sai và nó thực sự là một "máy chủ thử nghiệm liên tục". Nếu không thì nó nghe có vẻ vô dụng.


0

Một máy chủ xây dựng cho bạn một loại ý kiến ​​thứ hai về mã của bạn. Khi bạn kiểm tra nó, mã đã được kiểm tra. Nếu nó hoạt động, mã có chất lượng tối thiểu.


0

Ngoài ra, hãy nhớ rằng các ngôn ngữ cấp thấp mất nhiều thời gian để biên dịch hơn các ngôn ngữ cấp cao. Thật dễ dàng để nghĩ "Xem này, dự án .Net của tôi biên dịch trong vài giây! Vấn đề lớn là gì?" Trước đây, tôi đã phải lộn xộn với một số mã C và tôi đã quên mất bao lâu để biên dịch.


IMHO, đó không phải là quá nhiều về ngôn ngữ cấp thấp so với cấp cao, mà là về hệ thống mô-đun bị hỏng / không tồn tại của C (tức là bao gồm tệp) so với ngôn ngữ có hệ thống mô-đun đang hoạt động.
Elmar Zander

0

Một máy chủ xây dựng được sử dụng để lập lịch các tác vụ biên dịch (ví dụ: các bản dựng hàng đêm) của các dự án thường lớn nằm trong một kho lưu trữ đôi khi có thể mất hơn một vài giờ.


0

Máy chủ bản dựng cũng cung cấp cho bạn cơ sở để ký quỹ, có thể nắm bắt tất cả các phần cần thiết để tái tạo bản dựng trong trường hợp những người khác có thể có quyền sở hữu.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.