2009-09-17 37 views
9

Joel dường như think highly of daily builds. Đối với một ứng dụng được biên dịch truyền thống, tôi chắc chắn có thể thấy sự biện minh của mình, nhưng làm thế nào điều này song song với phát triển web - hay không?Hàng ngày có xây dựng đường đi cho một ứng dụng web không?

Một chút về dự án tôi đang yêu cầu - Có 2 nhà phát triển đang làm việc trên một ứng dụng web Django (Python). Chúng tôi có 1 kho svn. Mỗi nhà phát triển duy trì một bản kiểm tra và bản sao của MySQL chạy cục bộ (nếu bạn không quen với Django, nó đi kèm với máy chủ thử nghiệm riêng của nó, nhiều cách ứng dụng ASP có thể chạy bên trong Visual Studio). Phát triển và thử nghiệm được thực hiện tại địa phương, sau đó cam kết trở lại kho lưu trữ. Bản sao làm việc thực tế của trang web là thanh toán SVN (Tôi biết về việc xuất SVN và mất quá nhiều thời gian). Gần nhất chúng ta có một 'xây dựng' là một tập tin batch chạy một cập nhật SVN trên bản sao làm việc, không django bit ('manage.py syncdb'), cập nhật bộ nhớ cache công cụ tìm kiếm (solr), sau đó khởi động lại apache.

Tôi đoán những gì tôi không thấy là song song với ứng dụng web.

Bạn đang thực hiện một ứng dụng web được kiểm soát nguồn với 'bản dựng hàng đêm' - nếu có, điều đó trông như thế nào?

Trả lời

11

Bạn có thể dễ dàng chạy tất cả các bài kiểm tra đơn vị Django của bạn thông qua khung kiểm tra Django như xây dựng hàng đêm của bạn.

Đó là những gì chúng tôi làm.

Chúng tôi cũng có một số kiểm tra đơn vị thông thường không tận dụng các tính năng của Django và chúng tôi cũng chạy các tính năng đó.

Mặc dù Python (và Django) không yêu cầu kiểm tra biên dịch/liên kết/đơn vị hàng đêm mà các ngôn ngữ biên soạn làm, bạn vẫn được hưởng lợi từ kỷ luật hàng ngày của "Don't Break The Build". Và một chu kỳ hàng ngày của đơn vị kiểm tra tất cả mọi thứ bạn sở hữu là một điều tốt.

Chúng tôi đang gặp khó khăn trong việc xem xét Python 2.6 (hoạt động hoàn hảo cho chúng tôi) và chạy thử nghiệm đơn vị của chúng tôi với tùy chọn -3 để xem các tính năng không được chấp nhận mà chúng tôi đang sử dụng. Việc có một bộ kiểm thử đơn vị đầy đủ đảm bảo với chúng ta rằng một sự thay đổi đối với khả năng tương thích Python 3 sẽ không phá vỡ bản dựng. Và chạy chúng hàng đêm có nghĩa là chúng tôi phải là chắc chắn chúng tôi đang tái cấu trúc chính xác.

+1

Ứng dụng web +1 bằng ngôn ngữ động thường không yêu cầu "xây dựng", nhưng thử nghiệm tích hợp liên tục được đánh giá cao. –

3

Các ứng dụng web được xây dựng bằng ngôn ngữ động có thể không yêu cầu bước "biên dịch", nhưng vẫn có thể có một số bước "xây dựng" liên quan đến việc chạy ứng dụng. Các kịch bản xây dựng của bạn có thể cài đặt hoặc nâng cấp các phụ thuộc, thực hiện di chuyển cơ sở dữ liệu, và sau đó chạy bộ kiểm tra để đảm bảo rằng mã đó "sạch" w.r.t. phiên bản đăng ký thực tế trong kho lưu trữ. Hoặc, bạn có thể triển khai một bản sao của mã cho một máy chủ thử nghiệm, sau đó chạy một tập hợp các bài kiểm tra tích hợp Selenium với phiên bản mới để đảm bảo rằng chức năng trang web cốt lõi vẫn hoạt động.

Có thể giúp thực hiện một số đọc về chủ đề Tích hợp liên tục, là rất thực tiễn hữu ích cho các nhóm nhà phát triển webapp. Quy trình phát triển nhanh hơn và nhanh nhẹn hơn, bạn càng cần đầu vào thường xuyên từ các chỉ số kiểm tra và chất lượng tự động để đảm bảo bạn không nhanh và lớn trên bất kỳ phiên bản mã nào bị hỏng.

+0

+1 là câu trả lời đầu tiên tôi thấy kết hợp các ý tưởng về các khía cạnh không biên dịch của quá trình xây dựng với đề xuất tích hợp liên tục. FWIW, tôi đã có may mắn với CruiseControl cho một webapp. – rmeador

1

Tôi đã thành công lớn khi sử dụng Hudson để tích hợp liên tục. Thông tin chi tiết về cách sử dụng Hudson với Python bằng Redsolo.

Một vài tháng trước, một số bài viết tán thành continuous deployment gây ra sự khuấy động trực tuyến. IMVU có chi tiết về cách thức chúng deploy up to 5 times a day.

1

Toàn bộ ý tưởng đằng sau việc xây dựng thường xuyên (hàng đêm hoặc thường xuyên hơn như trong tích hợp liên tục) là nhận phản hồi ngay lập tức nhằm giảm thời gian trôi qua giữa việc giới thiệu sự cố và phát hiện sự cố. Vì vậy, việc xây dựng thường xuyên chỉ hữu ích nếu bạn có thể tạo ra một số phản hồi thông qua quá trình biên dịch, kiểm tra chất lượng (tự động lý tưởng), kiểm tra chất lượng, v.v. Không có phản hồi, không có điểm thực.

2

Nếu nó thực sự chỉ là bạn và một nhà phát triển khác làm việc trên nó, xây dựng hàng đêm có lẽ sẽ không cung cấp cho bạn nhiều.

Tôi có thể nói rằng ứng dụng web tương đương với các bản dựng hàng đêm sẽ là các trang web dàn dựng (có thể được xây dựng hàng đêm).

Nơi hàng đêm xây dựng cho khu vực dàn dựng bắt đầu trả cổ tức thực là khi bạn có khách hàng, người quản lý dự án và người QA cần có thể xem phiên bản cập nhật nhưng tương đối ổn định của ứng dụng. Hộp cát nhà phát triển của bạn (nếu bạn giống như tôi, ít nhất) có thể dành nhiều thời gian ở trạng thái không sử dụng được vì bạn đang phá vỡ mọi thứ đang cố gắng để có được tính năng tiếp theo được triển khai. Vì vậy, vấn đề điển hình là một người QA muốn xác minh rằng một lỗi đã được sửa, hoặc một PM muốn kiểm tra xem một số tính năng đã được lên kế hoạch có được triển khai chính xác không, hoặc khách hàng muốn thấy rằng bạn đã đạt được tiến bộ về vấn đề họ quan tâm trong khoảng. Nếu họ chỉ có quyền truy cập vào hộp cát dành cho nhà phát triển, có một cơ hội tốt là khi họ đi xung quanh để xem xét nó, phiên bản sandbox không chạy (vì nó có nghĩa là ./manage.py runserver đang ở trong một thiết bị đầu cuối ở đâu đó) hoặc trong trạng thái bị hỏng vì cái gì khác. Điều đó thực sự làm chậm toàn đội và lãng phí rất nhiều thời gian.

Có vẻ như bạn không có thiết lập dàn dựng vì bạn chỉ tự động cập nhật phiên bản sản xuất. Điều đó có thể tốt nếu bạn là cách cẩn thận hơn và kỷ luật hơn tôi (và tôi nghĩ hầu hết các nhà phát triển) sáng và không bao giờ cam kết bất cứ điều gì không hoàn toàn chống đạn. Cá nhân, tôi muốn chắc chắn rằng công việc của tôi đã làm cho nó thông qua ít nhất một số QA cursory bởi một ai đó khác hơn tôi trước khi nó chạm vào sản xuất.

Vì vậy, trong kết luận, việc thiết lập nơi tôi làm việc:

  • mỗi nhà phát triển chạy sandbox của mình tại địa phương (giống như bạn làm điều đó)
  • có một "chung" dàn dựng sandbox trên máy chủ dev mà được cập nhật hàng đêm từ một cronjob. PM, khách hàng và QA đến đó. Họ không bao giờ được cấp quyền truy cập trực tiếp vào hộp cát của nhà phát triển.
  • Có triển khai tự động (mặc dù được bắt đầu theo cách thủ công) để sản xuất. Một nhà phát triển hoặc PM có thể "đẩy" sản xuất khi chúng tôi cảm thấy mọi thứ đã đủ QA'd và ổn định và an toàn.

Tôi muốn nói nhược điểm duy nhất (bên cạnh một chút phụ phí thiết lập bản dựng dàn dựng hàng đêm) là nó làm cho một ngày quay vòng về xác minh lỗi.tức là, QA báo cáo lỗi trong phần mềm (dựa trên việc xem bản dựng hàng ngày của ngày đó), nhà phát triển sửa lỗi và cam kết, sau đó QA phải đợi cho đến ngày xây dựng ngày hôm sau để kiểm tra xem lỗi có thực sự cố định hay không. Nó thường không phải là một vấn đề lớn vì mọi người đều có đủ thứ để nó không ảnh hưởng đến lịch trình. Khi một mốc quan trọng đang đến gần và chúng tôi đang ở chế độ chỉ có lỗi, được sửa lỗi, chúng tôi sẽ thực hiện cập nhật thủ công thường xuyên hơn cho trang web dàn dựng.

Các vấn đề liên quan