Không, không phải vì hai lý do:
Tốc độ
Cam kết nên nhanh chóng. Một cam kết mất 500 ms, chẳng hạn, quá chậm và sẽ khuyến khích các nhà phát triển cam kết tiết kiệm hơn. Vì bất kỳ dự án nào lớn hơn Hello World, bạn sẽ có hàng chục hoặc hàng trăm bài kiểm tra, sẽ mất quá nhiều thời gian để chạy chúng trong quá trình cam kết trước.
Tất nhiên, mọi thứ trở nên tồi tệ hơn đối với các dự án lớn hơn với hàng ngàn thử nghiệm chạy trong vài phút trên một kiến trúc phân tán, hoặc vài tuần hoặc vài tháng trên một máy.
Điều tồi tệ nhất là bạn không thể làm gì nhiều để làm cho nó nhanh hơn. Các dự án Python nhỏ, có hàng trăm bài kiểm tra đơn vị, mất ít nhất một giây để chạy trên một máy chủ trung bình, nhưng thường lâu hơn nhiều. Đối với ứng dụng C #, nó sẽ trung bình bốn năm giây, vì thời gian biên dịch.
Từ thời điểm đó, bạn có thể trả thêm 10 000 đô la cho một máy chủ tốt hơn sẽ giảm thời gian, nhưng không nhiều hoặc chạy thử nghiệm trên nhiều máy chủ, điều này sẽ chỉ làm mọi thứ chậm lại.
Cả hai đều trả tốt khi bạn có hàng ngàn bài kiểm tra (cũng như các bài kiểm tra chức năng, hệ thống và tích hợp), cho phép chạy chúng trong vài phút thay vì vài tuần, nhưng điều này sẽ không giúp bạn cho các dự án quy mô nhỏ.
Thay vào đó, những gì bạn có thể làm là:
Khuyến khích các nhà phát triển chạy thử nghiệm liên quan mạnh mẽ đến mã mà họ đã sửa đổi cục bộ trước khi thực hiện cam kết. Họ có thể không thể chạy hàng ngàn bài kiểm tra đơn vị, nhưng họ có thể chạy năm phần mười trong số đó.
Hãy chắc chắn rằng việc tìm kiếm các bài kiểm tra có liên quan và chạy chúng thực sự dễ dàng (và nhanh chóng). Visual Studio, ví dụ, có thể phát hiện các thử nghiệm nào có thể bị ảnh hưởng bởi những thay đổi được thực hiện kể từ lần chạy trước. Các IDE / nền tảng / ngôn ngữ / khung công tác khác có thể có chức năng tương tự.
Giữ cam kết càng nhanh càng tốt. Thực thi các quy tắc phong cách là OK, bởi vì thông thường, đó là nơi duy nhất để làm điều đó và bởi vì các kiểm tra như vậy thường rất nhanh. Thực hiện phân tích tĩnh là OK ngay khi nó vẫn còn nhanh, điều này hiếm khi xảy ra. Chạy thử nghiệm đơn vị không ổn.
Chạy thử nghiệm đơn vị trên máy chủ Tích hợp liên tục của bạn.
Hãy chắc chắn rằng các nhà phát triển được thông báo tự động khi họ phá vỡ bản dựng (hoặc khi kiểm tra đơn vị không thành công, điều này thực tế giống như vậy nếu bạn coi trình biên dịch là một công cụ kiểm tra một số lỗi có thể bạn đưa vào mã của mình).
Ví dụ: truy cập trang web để kiểm tra các bản dựng cuối cùng không phải là một giải pháp. Họ nên được thông báo tự động . Hiển thị cửa sổ bật lên hoặc gửi SMS là hai ví dụ về cách chúng có thể được thông báo.
Hãy chắc chắn rằng các nhà phát triển hiểu rằng việc phá vỡ bản dựng (hoặc thất bại trong các bài kiểm tra hồi quy) là không ổn, và ngay khi nó xảy ra, ưu tiên hàng đầu của họ là sửa nó. Việc họ làm việc trên một tính năng ưu tiên cao không phải là vấn đề mà ông chủ của họ yêu cầu giao hàng vào ngày mai: họ đã thất bại trong quá trình xây dựng, họ nên sửa nó.
Bảo vệ
Máy chủ lưu trữ kho lưu trữ không nên chạy mã tùy chỉnh, chẳng hạn như kiểm tra đơn vị, đặc biệt là vì lý do bảo mật. Những lý do này đã được giải thích trong trình chạy CI trên cùng một máy chủ của GitLab?
Mặt khác, nếu ý tưởng của bạn là khởi chạy một quy trình trên máy chủ xây dựng từ hook pre-commit, thì nó sẽ làm chậm hơn nữa các cam kết.