Bạn có thể thực hiện triển khai liên tục với các lập trình viên cơ sở?


11

Có một lúc bạn bắt đầu hiểu rằng, trong kiến ​​trúc dịch vụ vi mô, sẽ đáng sợ hơn khi chờ đợi một tuần để triển khai tất cả các dịch vụ vi mô cùng một lúc để đảm bảo mọi thứ hoạt động cùng nhau, hơn là thực thi nghiêm ngặt phiên bản api, viết rất nhiều tự động kiểm tra (một chút của mỗi: đơn vị và thăm dò, tích hợp) và tự động triển khai để sản xuất ngay khi cam kết của bạn vượt qua khi kiểm tra trên sân khấu.

Bây giờ, có vẻ như là một ý tưởng tuyệt vời miễn là bạn nhớ viết bài kiểm tra, kiểm tra thay đổi trước khi cam kết, biết cách sử dụng phiên bản API và bạn sẽ không bỏ cơ sở dữ liệu trong tập lệnh cập nhật db tăng dần được triển khai khi triển khai (mà không phải là một vấn đề lớn vì nó sẽ thất bại trên sân khấu).

Nhưng nó có khả thi để làm điều đó với các lập trình viên cơ sở? Có lẽ tôi sẽ phải thực hiện lược đồ yêu cầu kéo. Điều này sẽ làm cho nó ít giống như triển khai liên tục (đó là dự đoán của tôi)?

Tôi hy vọng đây không phải là ý kiến ​​dựa trên và tôi có thể tin tưởng vào việc bạn chia sẻ kinh nghiệm của mình, cảm ơn.

Xin lưu ý, tôi không hỏi về CI cũng như về việc giao hàng liên tục. Chúng tôi đã có điều đó. Những gì chúng tôi đang cố gắng bây giờ là làm cho nó triển khai liên tục, có nghĩa là có tất cả trong sản xuất ngay sau khi đăng ký mã.


it is more scary to wait a week to deploy all micro services at once to make sure that everything works together, than to strictly enforce api versioning, write lots of automatic tests (...), and auto deploy to production as soon as your commit passes as tests on stage- đó là ý kiến ​​dựa trên;) IMHO khó khăn hơn nhiều để đảm bảo thành công với việc triển khai dịch vụ độc lập so với cách tiếp cận nguyên khối: softwareengineering.stackexchange.com/a/342346/187812 . Và với CI thực sự (không có nhánh tính năng / tích hợp), bạn không cần phải đợi một tuần.
Dan Cornilescu

Một hệ thống CI tốt sẽ giúp - mọi người đều phạm sai lầm, không chỉ các đàn em. Và các sự cố không nhất thiết có nghĩa là các nhà phát triển đã mắc lỗi hoặc không thực hiện đúng công việc của họ, xem Làm thế nào để thay đổi được xác minh trước thành công có thể gây ra sự hồi quy đáng lẽ phải bị bắt?
Dan Cornilescu

Câu trả lời:


16

Tại sao không? Bất kỳ điều gì bạn mô tả sẽ là một vấn đề cho dù bạn có sử dụng triển khai liên tục hay không. Vấn đề, có vẻ như là bạn đang lo lắng đàn em sẽ phạm phải một sai lầm thảm khốc. Và sai lầm đó sẽ được đưa vào sản xuất trước khi bất cứ ai có thể bắt được nó.

Đó là lý do tại sao bạn thực hiện đánh giá mã và kiểm tra. Trước khi bất cứ điều gì được sáp nhập vào chi nhánh chính của bạn và dự kiến ​​phát hành, yêu cầu nó phải được xem xét mã, bởi cả một số đàn em khác (để họ có kinh nghiệm) và bởi các nhà phát triển cao cấp (sử dụng chuyên môn của họ để làm cho mã tốt hơn). Mọi người nên tìm kiếm những con bọ thảm khốc này. Và nó nên ngăn chặn họ. Nếu không, có lẽ bạn cần một số QA / thử nghiệm tốt hơn trên môi trường dàn dựng (và có thể một số nhà phát triển tốt hơn nếu đánh giá mã bỏ lỡ những điều này).


1
Tôi lo lắng rằng việc sử dụng các nhánh tính năng và các yêu cầu kéo làm cho việc triển khai liên tục ít hơn. Về các khía cạnh mà tôi muốn giải quyết là khả năng tương thích giữa các thành phần. Tôi chắc chắn họ sẽ làm việc cùng nhau sau khi tôi thực hiện một thay đổi trong một trong các dịch vụ. Tôi cảm thấy căng thẳng khi chúng tôi phải đẩy tất cả lại với nhau sau nhiều thay đổi. Nếu tôi xem xét các thay đổi trước khi chúng tham gia vào nhánh chính thì tôi thậm chí có thể nhầm lẫn thứ tự thay đổi vì các thành phần nằm trong các repos khác nhau.
doker

@doker Nếu bạn lo lắng về việc phải đẩy nhiều dịch vụ lại với nhau thì không nên. Đảm bảo rằng mỗi dịch vụ (và các thay đổi được thực hiện) sẽ tự đứng vững. Nếu dịch vụ A bị thay đổi, hãy thực hiện đánh giá mã nhanh để đảm bảo nó sẽ hoạt động với các thay đổi mới và có thể tự triển khai. Nếu các thay đổi vi phạm được thực hiện, hãy sử dụng đánh giá mã làm nơi thực thi phiên bản API. Nếu dịch vụ B phụ thuộc vào dịch vụ A, trước tiên hãy thực hiện công việc trên A sau đó rút ra. Sau đó làm việc trên B. Nếu một đàn em trao cho bạn A, B, C và D và tất cả chúng đều phụ thuộc lẫn nhau, chúng cần phải ghi lại để bạn có thể xem lại.
Becuzz

1
@doker Những loại kịch bản này là lý do tại sao những người triển khai / phân phối liên tục thường rất chuyển đổi tính năng. Nếu các thay đổi của bạn thường đứng sau các công tắc tính năng (không nhất thiết là mỗi thay đổi nhỏ), thì bạn có thể triển khai các phần bất cứ khi nào tắt tính năng, bật chúng khi tất cả các phần được đặt và tắt chúng nếu bạn gặp vấn đề nghiêm trọng.
Derek Elkins rời SE

3

Việc triển khai liên tục sẽ hoạt động tốt nếu bạn có một bộ kiểm tra tự động tốt.

Các nhà phát triển trẻ có thể hào hứng với nhiệm vụ của chính họ và không thấy rằng họ phá vỡ mọi thứ xung quanh. Bạn có thể khắc phục điều này với một số tự động hóa. Thiết lập một máy chủ xây dựng sẽ chạy thử nghiệm mọi lúc và cung cấp cho họ một công cụ như trình thông báo xây dựng CatLight . Nó sẽ cung cấp cho họ một phản hồi nhanh chóng và rõ ràng khi họ phá vỡ mọi thứ.

Biểu tượng trạng thái bản dựng CatLight

Họ sẽ khắc phục các sự cố nhỏ khi chúng xảy ra và duy trì hoạt động giao hàng liên tục của bạn.


3

Cách duy nhất để học thói quen tốt là thực hành chúng, vì vậy, có các nhà phát triển cơ sở cũng có thể thực hành triển khai liên tục. Bạn có thể muốn đưa ra một số suy nghĩ để thêm các bước vào đường ống để thực hiện những việc như kiểm tra phạm vi kiểm tra và có thể chạy phân tích mã tĩnh và không xây dựng nếu phạm vi kiểm tra không đủ cao. Điều đó sẽ đảm bảo rằng các nhà phát triển cơ sở hiểu được những kỳ vọng trước khi một cái gì đó được coi là hoàn thành.


1

Bạn không chỉ có thể làm điều này với các nhà phát triển cơ sở mà còn là yêu cầu của bạn. Đầu tiên, bạn sẽ giảm chất lượng phần mềm của mình, và thứ hai là điều này giúp các nhà phát triển cơ sở học các kỹ năng phát triển phần mềm tốt.

Tương tự như vậy: Bạn có muốn bác sĩ của bạn không thực hành y học theo kiến ​​thức tốt nhất của mình bởi vì anh ta sẽ sợ các lỗi học nghề trẻ? Làm thế nào để các bác sĩ đối phó với thiệt hại tiềm năng?


1

Từ kinh nghiệm trong quá khứ với cơ sở mã Big Ball Of Mud phát triển tự nhiên trong nhiều năm dưới bàn tay của nhiều nhà phát triển cơ sở không có giám sát, tôi muốn chỉ ra điều gì xảy ra khi bạn không thực hành CI với những nhà phát triển đó.


Chỉnh sửa / Cập nhật : Theo nhận xét của RubberDuck; câu trả lời này giả định rằng mục tiêu hợp nhất của bạn để tích hợp là một nhánh phát triển chứ không phải là một nhánh đánh giá hoặc phát hành.

  • Rõ ràng cần phải có nhiều quyền kiểm soát hơn đối với mã để phát hành và triển khai trực tiếp; nếu không có một nhánh sản xuất riêng biệt thì sẽ đáng để xem xét thay đổi chiến lược hợp nhất / hợp nhất của bạn để chạy một nhánh phát triển tổng thể (được sử dụng để thử nghiệm tích hợp và không bao giờ được phát hành) cùng với nhánh phát hành chính. Điều này giữ cho tất cả các lợi ích của CI và hợp nhất thường xuyên mà không có nguy cơ phá vỡ mã sản xuất.

1. Các nhà phát triển trẻ ít có khả năng giao tiếp với đồng nghiệp hoặc người giám sát của họ

Tích hợp liên tục không chỉ đơn giản là vấn đề hợp nhất trong mã, đây là thời điểm mà theo đó một nhà phát triển buộc phải tương tác với các bên liên quan khác.

Giao tiếp rất quan trọng và không muốn khái quát quá mức, nó có xu hướng trở thành một kỹ năng được học ít đến với các nhà phát triển thiếu kinh nghiệm hơn so với những người đã từng làm việc trong môi trường nhóm.

Nếu bạn cho phép các nhà phát triển cơ sở ngồi trong tủ của họ và bash đi mã trong nhiều tuần mà không được yêu cầu báo cáo / đánh giá thường xuyên, thì nhiều khả năng họ sẽ tránh giao tiếp hoàn toàn.

2. Mã họ đang sản xuất có thể cần xem xét nghiêm ngặt hơn

Bạn đã bao giờ xem lại một cái gì đó tồi tệ đến mức bạn muốn bạn nhặt nó sớm hơn và ngăn nó không bao giờ được viết? Điều này xảy ra rất nhiều.

Bạn không thể ngăn chặn mã xấu được viết, nhưng bạn có thể hạn chế thời gian lãng phí. Nếu bạn cam kết đánh giá và sáp nhập thường xuyên, thì bạn sẽ giảm thiểu phạm vi lãng phí thời gian.

Trường hợp xấu nhất là bạn có thể để một nhà phát triển cơ sở một mình trong vài tuần cho dự án thu nhỏ của riêng họ và khi họ cuối cùng đã sẵn sàng để xem xét mã, đơn giản là họ không còn đủ thời gian để họ ném toàn bộ mớ hỗn độn đi và bắt đầu lại từ đầu.

Nhiều dự án trở thành một quả bóng lớn chỉ đơn giản vì toàn bộ tải mã xấu đã được viết khi không ai chú ý cho đến khi quá muộn.

3. Bạn nên ít chắc chắn rằng một nhà phát triển cơ sở hoặc thành viên nhóm mới khác đã hiểu các yêu cầu

Đôi khi một nhà phát triển có thể xây dựng giải pháp hoàn hảo cho vấn đề sai; Điều này thật đáng buồn bởi vì thường là những hiểu lầm đơn giản, điều này sẽ rất dễ tránh nếu chỉ có ai đó đã hỏi đúng câu hỏi trước đó trong quá trình.

Một lần nữa, đây là một vấn đề có nhiều khả năng ảnh hưởng đến các nhà phát triển thiếu kinh nghiệm, những người có nhiều khả năng chấp nhận các yêu cầu "xấu" theo mệnh giá thay vì đẩy lùi và đặt câu hỏi về sự khôn ngoan của yêu cầu.

4. Chúng dường như ít quen thuộc hơn với các mẫu phổ biến, với kiến ​​trúc của mã hiện có và với các công cụ và giải pháp nổi tiếng

Đôi khi, một nhà phát triển dành toàn bộ thời gian để phát minh lại bánh xe một cách không cần thiết chỉ vì họ không biết rằng một giải pháp tốt hơn thậm chí còn tồn tại. Hoặc họ có thể mất nhiều ngày cố gắng đóng một cái chốt vuông vào một cái lỗ tròn mà không nhận ra mình đang làm gì sai.

Một lần nữa, loại điều này có nhiều khả năng xảy ra với các nhà phát triển thiếu kinh nghiệm, và cách tốt nhất để giải quyết vấn đề là đảm bảo đánh giá thường xuyên.

5. Khoảng thời gian dài giữa các lần xác nhận / hợp nhất mã khiến các lỗi khó xác định và sửa chữa hơn

Khi một lỗi xuất hiện ngay lập tức sau nhiều tuần thay đổi mã có giá trị đã được sáp nhập vào nhánh chính, thách thức xác định thay đổi nào có thể khiến lỗi trở nên khó khăn hơn.

Rõ ràng chiến lược phân nhánh tổng thể của bạn cũng đi vào chơi ở đây; lý tưởng là tất cả các nhà phát triển của bạn sẽ làm việc trong các nhánh riêng của họ hoặc trong các nhánh tính năng (hoặc cả hai) và sẽ không bao giờ làm việc trực tiếp với chủ / thân.

Tôi đã thấy các tình huống trong đó tất cả các đội đều làm việc trực tiếp với chủ / thân cùng một lúc và đây là một môi trường tồi tệ cho CI, nhưng may mắn thay, giải pháp kéo mọi người ra khỏi chủ / thân thường cung cấp đủ sự ổn định cho công việc cá nhân vật phẩm / vé / v.v.

Cần phải luôn luôn "OK" cho bất kỳ nhà phát triển nào để phá vỡ nhánh chính / thân cây, với sự hiểu rằng việc sáp nhập sẽ diễn ra thường xuyên như vậy, rằng việc phá vỡ các thay đổi và khiếm khuyết sẽ được xác định nhanh hơn và do đó cũng được giải quyết nhanh hơn. Các khiếm khuyết tồi tệ nhất thường là những khuyết điểm không bị phát hiện trong nhiều tháng hoặc thậm chí nhiều năm.


Tóm tắt; những lợi thế chính của tích hợp liên tục / triển khai liên tục là:

  • Giao tiếp giữa các nhóm của bạn được cải thiện
  • Chất lượng mã thường được duy trì ở tiêu chuẩn cao hơn
  • Yêu cầu ít có khả năng bị bỏ lỡ hoặc giải thích sai
  • Các vấn đề về kiến ​​trúc và thiết kế nên được phát hiện nhanh hơn,
  • Khiếm khuyết có nhiều khả năng được phát hiện và sửa chữa ở giai đoạn sớm hơn

Vì vậy, nếu bạn không thực hành CI với các nhà phát triển cơ sở, thì bạn đang chấp nhận rất nhiều rủi ro không cần thiết đáng kể, vì đây là những thành viên trong nhóm của bạn, những người cần nó nhiều hơn những người còn lại.


OP đang nói về một mô hình trong đó cam kết làm chủ kích hoạt triển khai thực tế vào sản xuất . Vì vậy, không. Không thể phá vỡ nhánh chủ trong mô hình đó.
RubberDuck

@RubberDuck điểm tốt, đã thêm một nhận xét để làm rõ rằng cách tiếp cận này là để thử nghiệm tích hợp và không phải để đẩy các thay đổi mã mới trực tiếp đến một nhánh sản xuất.
Ben Cottrell

0

Có, bạn có thể thực hành CI với các nhà phát triển cơ sở. Sẽ là ngu ngốc nếu không trong môi trường phát triển hiện tại. Nó cực kỳ hữu ích khi có thể đẩy để repo và sau đó tự động được hợp nhất thành mã dàn dựng - và để xem tất cả trong thời gian thực trong Travis (hoặc Tre, Đường ống, v.v.)!

Đưa anh chàng DevOps của bạn và đưa anh ta đi qua quy trình với họ, cộng với một nhà phát triển cấp cao ở chế độ chờ chỉ để theo dõi mọi thứ và liên kết nó với các đánh giá mã của họ (bạn làm điều đó, phải không?)

Nếu mối quan tâm của bạn là mã shite sẽ vượt qua, thì đó không phải là CI và nó không phải ở đàn em: nó thuộc về bạn .

Vì vậy, giúp họ trở nên tốt hơn và được sử dụng để triển khai mã giai đoạn / prod nhanh hơn. Bạn sẽ cảm ơn bản thân về lâu dài.


1
OP đang nói về Triển khai liên tục không tích hợp / phân phối
RubberDuck
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.