Mục đích của một máy xây dựng chuyên dụng là gì?


75

Do một số trường hợp dẫn đến chu kỳ xây dựng cuối cùng kém, tôi đã vận động trong văn phòng của chúng tôi để thực hiện tất cả các triển khai trong tương lai với một máy xây dựng chuyên dụng và ông chủ của tôi đã chấp nhận đề xuất này.

Tuy nhiên, thay vì sử dụng một máy thực tế trong văn phòng của chúng tôi để sử dụng, chúng tôi phải chia sẻ một máy duy nhất với một số nhóm khác - và rắc rối khi phải rời khỏi văn phòng của tôi với tất cả các thông tin cần thiết và sau đó đi xuống cầu thang đến một văn phòng khác chỉ để thực hiện một bản dựng đơn giản đang khiến tôi tự hỏi tại sao tôi lại đề xuất điều này ngay từ đầu.

Ý tưởng về việc có một máy xây dựng riêng biệt, ban đầu, là để tách mã được viết cục bộ của tôi khỏi mã của một số nhà phát triển khác và để tách bất kỳ tệp bị tấn công nào tôi có trên máy của mình khỏi triển khai. Đó cũng là để giải quyết mối quan tâm ngày càng tăng mà tôi có với hệ thống quản lý tệp ClearCase của chúng tôi, thường từ chối cho phép tôi triển khai một số hoạt động xây dựng nhất định trừ khi tôi cũng bao gồm một hoạt động khác mà nó 'có sự phụ thuộc'.

Bây giờ tôi đang thực sự tiến hành quá trình này, tôi tự hỏi liệu tôi có hiểu nhầm toàn bộ mục đích sử dụng máy xây dựng không - và vì chúng tôi chỉ sử dụng máy này để triển khai mã cho môi trường Thử nghiệm, Dàn dựng và Sản xuất, và không dành cho triển khai thử nghiệm Nhà phát triển cá nhân của chúng tôi, tôi không chắc nó phục vụ cho bất kỳ mục đích nào cả.

Vì vậy, lý do thực sự của việc sử dụng máy xây dựng là gì và tôi thậm chí có thể sử dụng nó một cách chính xác không?


166
"Rắc rối khi phải rời khỏi văn phòng của tôi với tất cả các thông tin cần thiết và sau đó đi xuống cầu thang đến văn phòng khác chỉ để thực hiện một công trình đơn giản [...]" Ý bạn là gì? Bạn truy cập vào máy đó để tạo bản dựng?
Vincent Savard ngày


13
WTF thực sự là Clearcase, tệ hơn tất cả các lựa chọn thay thế nguồn mở hiện đại. Dự án này là ngôn ngữ nào và mức độ lớn / phức tạp của bản dựng?
pjc50

7
Bạn đang sử dụng các công cụ? Git / SVN và Jenkins / Team City / Octopus / TFS, v.v? Hay bạn chỉ đang đăng nhập vào một máy tính khác, tải Visual Studio hoặc những gì bạn đã ... sao chép dự án, tải, biên dịch ... Bạn đang sử dụng các công cụ chuyên nghiệp hoặc thực hiện thủ công?
WernerCD

84
Máy xây dựng của tôi ở đâu đó ở Nam Carolina và tôi ở Seattle. Tôi đảm bảo với bạn rằng tôi không đi xuống bất kỳ bộ cầu thang nào để sử dụng nó. Tôi nghĩ rằng lần cuối cùng tôi có quyền truy cập vật lý vào máy xây dựng là khi tôi là nhân viên thực tập phụ trách máy xây dựng cho trình biên dịch Microsoft vào năm 1994, khi chúng vừa với một tủ quần áo nhỏ; bây giờ họ là một trung tâm dữ liệu ở đâu đó Nhận máy trên mạng của bạn; tốt hơn nữa, đưa nó vào đám mây và khiến người khác chăm sóc nó.
Eric Lippert

Câu trả lời:


138

Thông thường, bạn sẽ không chỉ có một máy xây dựng chuyên dụng mà còn chạy một máy chủ xây dựng trên máy chuyên dụng đó. Một máy xây dựng chuyên dụng chỉ cung cấp lợi thế là không bao giờ chặn công việc của nhà phát triển và triển khai từ một máy tập trung.

Một máy chủ xây dựng cung cấp nhiều hơn nữa. Bản dựng sever cho phép CI (tích hợp liên tục), nghĩa là nó sẽ tự động xây dựng trên mỗi lần đẩy tới VCS của bạn (như git), thậm chí có thể thực hiện kiểm tra đơn vị nếu bạn có chúng và cho phép "triển khai một lần nhấp". Xây dựng máy chủ có thể thông báo cho bạn mỗi thư nếu việc xây dựng hoặc kiểm tra thất bại. Họ cung cấp dữ liệu lịch sử và xu hướng về những gì đã xảy ra.

Xây dựng máy chủ thường có thể được truy cập bởi nhiều người dùng hoặc nhóm cùng một lúc, bằng cách sử dụng gui web chạy trên trình duyệt.

Trong thế giới Java, một trong những máy chủ xây dựng được sử dụng nhiều nhất là Jenkins. Jenkins hoạt động hoàn toàn tốt với các bản dựng C ++ (Vì dường như bạn sử dụng hai ngôn ngữ đó). Jenkins tự gọi mình là máy chủ tự động, vì nó có thể chạy tất cả các loại nhiệm vụ không liên quan đến lập trình và xây dựng.


3
Tôi thực sự đã không chạm vào c ++ từ khi học đại học, nhưng tôi có thể hiểu được sự hữu ích. Mặc dù trong trường hợp này, tôi nghĩ những gì chúng ta thực sự đang làm có thể bị loại bỏ khỏi mục đích đã định.
Zibbobz ngày

21
Đối với một số ngôn ngữ (cụ thể là C ++), việc có một hộp chuyên dụng có nhiều khả năng xử lý hơn cũng có thể hữu ích, do đó là một trình biên dịch tương đối chậm.
thúc ngày

31
Tích hợp liên tục có nghĩa là nhiều hơn là chỉ có một máy chủ xây dựng - điều đó cũng có nghĩa là mọi người tích hợp các thay đổi của nhau thường xuyên nhất có thể, để tránh các vấn đề hợp nhất "vụ nổ lớn". Nếu không, tại chỗ.
Rob Crawford ngày

Mặc dù tôi thích sức mạnh mà một ví dụ đưa ra cho điểm được đưa ra ở đây, tôi vẫn nghĩ đoạn cuối là hoàn toàn không cần thiết trong câu trả lời này.
Pierre Arlaud

3
"Một máy xây dựng chuyên dụng chỉ cung cấp lợi thế là không bao giờ chặn công việc của nhà phát triển và triển khai từ một máy tập trung." Điều đó không hoàn toàn đúng. Người hỏi chỉ ra rằng rất dễ có môi trường ô uế trên máy của nhà phát triển. Các thư viện bao gồm và các biến môi trường khác đều có thể thay đổi kết quả xây dựng. Một máy chuyên dụng nên có một môi trường được ghi chép tốt để cho phép giải trí dễ dàng xây dựng.
TafT

107

Ngoài câu trả lời của Traubenfuchs, bạn đã gợi ý về một lý do khác cho một cỗ máy xây dựng trong câu hỏi của bạn.

Chỉ vì phần mềm được xây dựng trên máy của bạn , điều đó không có nghĩa là phần mềm sẽ được xây dựng trên bất kỳ ai khác. Bạn có thể đang dựa vào một số tệp ngẫu nhiên tình cờ xuất hiện trên máy của bạn (và thậm chí có thể không được kiểm soát phiên bản). Bạn có thể đang dựa vào một số ứng dụng hoặc thư viện bị lãng quên được gọi từ một tập lệnh xây dựng tối nghĩa.

Nếu bạn có một máy xây dựng chuyên dụng, bạn nên biết những gì được cài đặt trên nó. Điều này nên được ghi chép lại. Nếu có nhu cầu xây dựng lại phần mềm, có lẽ nhiều năm sau, chỉ cần tạo một máy xây dựng mới với các tài liệu được cài đặt trên nó.


37
+ 1 Số lần một thứ gì đó hoạt động trên máy của nhà phát triển, chứ không phải phần còn lại của nhóm của anh ta ...
user2259716

45
Điều này. Các chính mục đích xây dựng trên máy khác là phải có tái sản xuất được xây dựng ; đáng chú ý bằng cách loại bỏ các công cụ không cam kết, phân biệt các biến môi trường, v.v ... khỏi phương trình.
Matthieu M.

9
Mở rộng về điều đó: sử dụng một hình ảnh container mới, sạch mà từ đó bạn bắt đầu mỗi bản dựng. Sau đó có một kịch bản bootstrap thiết lập hệ thống. Điều đó thực sự đảm bảo các bản dựng tái sản xuất.
Matthias Kuhn

9
@MatthiasKuhn: thực sự (byte cho byte) tái sản xuất xây dựng đòi hỏi nhiều hơn, cf: reproducible-builds.org wiki.debian.org/ReproducibleBuilds
ninjalj

1
Ngoài ra, chỉ vì phiên bản Linux của sản phẩm xây dựng và vượt qua các bài kiểm tra trên máy tính để bàn Linux của bạn không có nghĩa là phiên bản Windows hoặc phiên bản Mac sẽ xây dựng.
Solomon chậm

53

Lý do chính để có một máy xây dựng chuyên dụng là để có được các bản dựng nhất quán bất kể ai đang thực hiện bản dựng. Máy trạm của nhà phát triển hiếm khi (đọc: không bao giờ) giống hệt nhau. Thật khó để biết rằng mỗi bản dựng đang sử dụng cùng một phiên bản phụ thuộc và trình biên dịch chính xác, v.v ... Một trong những vấn đề tồi tệ nhất với bản dựng máy trạm dev là các nhà phát triển có thể xây dựng từ mã không được kiểm tra trong kiểm soát phiên bản.

Không rõ bạn đang sử dụng nền tảng / ngôn ngữ nào nhưng lý tưởng nhất là bạn nên có một máy chủ xây dựng lấy trực tiếp từ kiểm soát nguồn. Đó là, khi một bản dựng được yêu cầu, nó sẽ lấy nguồn từ một phiên bản nhất định của kho lưu trữ và tự động biên dịch nó. Điều này đòi hỏi sử dụng các công cụ xây dựng tự động để kịch bản xây dựng. Nếu bạn không có điều này, đó sẽ là bước # 1.

Hãy nhớ rằng không có gì sai khi xây dựng tại địa phương để phát triển. Bạn chắc chắn nên làm việc tại địa phương chạy thử nghiệm đơn vị, phân tích chất lượng mã và để mài giũa các tập lệnh xây dựng. Nếu không bạn sẽ lãng phí rất nhiều thời gian. Đầu ra của máy chủ xây dựng dành cho bất cứ thứ gì bạn muốn có khả năng chuyển sang sản xuất. Tất cả các hoạt động QA như tích hợp và kiểm tra chấp nhận chỉ nên được thực hiện với các bản dựng từ máy chủ bản dựng.


Ngoài ra, kháng vi rút bổ sung.
Joshua

@Joshua Điều gì cho bạn ý tưởng đó?
jpmc26

14
@ jpmc26: Máy xây dựng được cài đặt phần mềm ít hơn rất nhiều, cần ít điểm truy cập từ xa hơn và không ai mở trình duyệt web cho các trang web ngẫu nhiên trên đó.
Joshua

19

Các câu trả lời khác lưu ý khá chính xác rằng bạn nên tự động hóa bản dựng, điều đó có nghĩa là không cần thiết phải đi bộ đến văn phòng khác. Tuy nhiên, hãy để tôi đề xuất một số bước nhất định bạn có thể thực hiện để cải thiện quy trình xây dựng của mình:

  • Đầu tiên, hãy thiết lập quyền truy cập từ xa vào máy chủ xây dựng! Nếu bạn xây dựng thủ công bằng cách nhập lệnh "make", điều này có nghĩa là bạn không phải đi bộ đến văn phòng khác nữa để nhập "make", bạn chỉ cần SSH vào máy chủ xây dựng và nhập "make". Nếu bạn chưa sử dụng make hoặc một hệ thống xây dựng tương tự, hãy sử dụng một hệ thống xây dựng như vậy.
  • Thứ hai, cài đặt môi trường tích hợp liên tục tự động lấy các thay đổi mới nhất từ ​​hệ thống kiểm soát phiên bản (bạn có hệ thống kiểm soát phiên bản, phải không? Nếu không, đó sẽ là một bước bổ sung) và xây dựng chúng. Tôi đề nghị Jenkins. Thiết lập Jenkins để chạy thử nghiệm đơn vị của bạn và kiểm tra tích hợp cấp hệ thống (bạn có cả hai, phải không? Nếu không, hãy tạo chúng bắt đầu từ thử nghiệm đơn vị và sau đó kết thúc vào thử nghiệm tích hợp cấp hệ thống).
  • Thứ ba, nếu bạn thấy việc chia sẻ cùng một máy với các nhóm khác có vấn đề (chẳng hạn như nếu bạn có ý kiến ​​khác nhau về hệ điều hành nào và phiên bản nào và bạn nên sử dụng), hãy cân nhắc sử dụng ảo hóa. Một máy chủ tốt ngày nay có thể chạy một số lượng lớn máy ảo. Có lẽ bạn có thể thiết lập cho mình một máy 32 bit và máy 64 bit để bạn biết bản dựng hoạt động trên cả hai kiến ​​trúc.
  • Cuối cùng, điều này có thể không cần thiết: nếu bạn nhất định phải có một máy chuyên dụng, chẳng hạn như nếu hiệu suất ứng dụng của bạn có tầm quan trọng lớn và các bản dựng / chạy thử khác chạy cùng lúc ảnh hưởng đến kết quả của bạn quá nhiều, hãy cài đặt một máy chủ phần cứng chuyên dụng hơn chỉ có bạn sử dụng. Tuy nhiên, trên các máy chủ gần đây có thể có tới 40 lõi CPU ảo hoặc thậm chí nhiều hơn, việc tạo ra một số máy ảo không chia sẻ quyền truy cập vào cùng một lõi CPU là tương đối đơn giản.

Tôi sẽ xem xét một máy chia sẻ tốt hơn nhiều so với các bản dựng thủ công. Dự án hiện tại của tôi hiện đang sử dụng máy ảo, nhưng do nhu cầu kiểm tra hiệu năng tích hợp ở cấp hệ thống, chúng tôi đang chuyển sang một máy chủ chuyên dụng với 40 lõi CPU trong đó các bài kiểm tra hiệu năng yêu cầu 17.


16

... Thay vì sử dụng một máy thực tế trong văn phòng của chúng tôi để sử dụng, chúng tôi phải chia sẻ một máy duy nhất với một số nhóm khác ...

Bạn nói rằng đó là một điều xấu.

Bây giờ bạn có một máy chủ xây dựng chung mà tất cả các bản dựng của bạn - của bạn và của các nhóm khác - được xây dựng thông qua. Tính nhất quán của xây dựng? Kiểm tra.

... Rắc rối khi phải rời khỏi văn phòng của tôi với tất cả các thông tin cần thiết và sau đó đi xuống cầu thang đến văn phòng khác chỉ để thực hiện một công trình đơn giản đang khiến tôi tự hỏi tại sao tôi lại đề xuất điều này ngay từ đầu.

Bạn vẫn đang thực hiện việc xây dựng thủ công và điều đó không tốt.

Bạn cần một quy trình máy chủ mà bạn gửi / yêu cầu hàng đợi để xây dựng được thực hiện thay mặt bạn và yêu cầu quá trình đó gửi lại cho bạn (các) kết quả.


5
"Bạn nói rằng đó là một điều xấu." Nó có thể là nếu họ có triều đại miễn phí để cài đặt bất cứ thứ gì họ muốn. Nếu họ từ xa truy cập hoặc truy cập vật lý vào nó, tôi không thấy làm thế nào có thể ngăn chặn được.
jpmc26 ngày

7
"Bạn nói rằng đó là một điều tồi tệ. Bây giờ bạn có một máy chủ xây dựng chung mà tất cả các bản dựng của bạn - của bạn và của các nhóm khác - được xây dựng thông qua. Tính nhất quán của bản dựng? Kiểm tra". Đó hoàn toàn trái ngược với một bản dựng nhất quán! Nếu bất kỳ nhóm nào khác quyết định cập nhật trình biên dịch của họ hoặc bất kỳ công cụ nào khác, bạn sẽ bất ngờ xử lý một môi trường xây dựng hoàn toàn khác. Đó là khá nhiều trường hợp xấu nhất (ngoài việc không có máy xây dựng để bắt đầu).
Voo

1
Đồng ý muốn có một quy trình tự động để tạo các bản dựng mới, nhưng đồng thời bạn cũng muốn ảo hóa các tác nhân xây dựng của mình để đảm bảo môi trường xây dựng của bạn nằm dưới sự kiểm soát của chính bạn. VM là một công cụ tuyệt vời cho các nhà phát triển và bạn nên tận dụng tối đa nó.
Voo

@Voo Đó không phải là một trường hợp xấu nhất, đó là một trường hợp trung bình. Những gì người hỏi hiện đang có là một trường hợp xấu nhất. (Cũng lưu ý rằng nếu bạn không bao giờ sao chép các bản dựng, việc nâng cấp trình biên dịch ngẫu nhiên không phải là vấn đề quá lớn)
user253751

@immibis Bạn đã đọc phần parens ngay sau phần bạn trích dẫn? Đây là một trường hợp xấu nhất nếu một máy chủ xây dựng có liên quan. Vấn đề với các lỗi không thể lặp lại là bạn thực sự không thể thực hiện Hotfix nếu toàn bộ môi trường xây dựng của bạn thay đổi trong thời gian đó. Đó không phải là vấn đề lớn nếu bạn chỉ có một phiên bản được phát hành duy nhất gần với thân cây, nhưng trong tất cả các trường hợp khác, nó khá tệ.
Voo

1

Ngoài các câu trả lời có liên quan khác, có vẻ như bạn đang chạy các bản dựng của mình trực tiếp trên máy.

Đối với một hệ thống xây dựng đáng tin cậy, đặc biệt là khi chia sẻ máy xây dựng với người dùng khác, việc chạy các bản dựng của bạn trong một máy ảo là điều bình thường. Điều này đảm bảo người dùng khác không thể thay đổi hành vi của các bản dựng của bạn bằng cách cài đặt các phiên bản ứng dụng hoặc thư viện của riêng họ mà mã của bạn phụ thuộc vào. Một lợi thế lớn của điều này là VM có thể dễ dàng được sao lưu và nó cũng có thể dễ dàng được sao chép vào bất kỳ PC nào khác (bao gồm cả máy phát triển của riêng bạn).


1

Nó cung cấp một vị trí trung lập, tập trung để thực hiện các bản dựng, độc lập với IDE, OS, cấu hình thư viện của từng nhà phát triển.

Với một máy xây dựng chuyên dụng, bạn có thể xây dựng lại mỗi khi có mã đẩy vào kho lưu trữ. Khi ai đó phá vỡ bản dựng, quy trình có thể ngay lập tức gửi cảnh báo để vấn đề có thể được khắc phục ngay lập tức.

Ngoài việc làm cho mọi thứ trở nên lặp lại và đáng tin cậy hơn và đảm bảo kho lưu trữ không chứa đầy rác bị hỏng với các vấn đề phụ thuộc, nó làm cho cuộc sống của các nhà phát triển dễ dàng hơn vì tất cả những gì họ phải làm để xây dựng trên máy của họ là sao chép mọi thứ đang được thực hiện trên máy xây dựng.


4
điều này dường như không cung cấp bất cứ điều gì đáng kể qua các điểm được thực hiện và giải thích trong 6 câu trả lời trước
gnat
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.