Làm thế nào để thực hiện một môi trường thử nghiệm đông lạnh?


8

Dưới đây là trích dẫn một phần từ câu trả lời cho câu hỏi về " Làm thế nào để tránh sự mất ổn định do tích hợp liên tục trong môi trường thử nghiệm? ":

Môi trường này thường đóng băng trong các thử nghiệm.

Câu hỏi của tôi: thực hiện mẫu của một môi trường đông lạnh là gì? Tức là bạn có thể làm gì để thực thi về mặt kỹ thuật rằng không ai (trừ khi được cho phép bởi người dùng được ủy quyền như người quản lý phát hành) sẽ có thể thay đổi bất cứ điều gì trong môi trường đóng băng như vậy.

Làm rõ :

  • Tôi không nói về những gì (tôi nghĩ) được gọi là "giai đoạn đóng băng" trong (ví dụ) xử lý cuối năm tại các ngân hàng. Đó là về việc không được phép áp dụng bất kỳ thay đổi (lặp lại bất kỳ) nào cho môi trường sản xuất, để giảm rủi ro thay đổi / sửa lỗi mới được đưa ra có thể ảnh hưởng đến quá trình xử lý cuối năm.

  • Giả sử rằng người dùng được phép phê duyệt / áp dụng các thay đổi dù sao (chẳng hạn như trình quản lý phát hành trong ví dụ của tôi), sẽ chỉ làm như vậy trong các trường hợp đặc biệt. Chẳng hạn như trong quá trình kiểm tra, một vấn đề nghiêm trọng cao gặp phải, trong đó trì hoãn sửa chữa cho bản phát hành tiếp theo không phải là một lựa chọn (vì nó sẽ tạo ra rủi ro nếu bản phát hành được kích hoạt mà không có bản sửa lỗi đó).

  • Điều này chỉ có thể là về việc đình chỉ bất kỳ cập nhật tự động trong thời gian thử nghiệm. Vấn đề là: tránh người khác nâng cấp Ứng dụng A lên phiên bản Y trong khi một nhóm khác vẫn đang thử nghiệm ứng dụng B trong phiên bản X dựa trên ứng dụng A. Điều này có thể có nghĩa là phải có người bảo vệ để tránh nhóm thử nghiệm yêu cầu cập nhật phụ thuộc theo kiểm tra.

Câu trả lời:


3

Câu trả lời của tôi trong bối cảnh của câu hỏi là một môi trường thử nghiệm rất tốn kém (ví dụ như máy tính lớn hoặc thiết bị viễn thông rất lớn), dự kiến ​​sẽ được chia sẻ bởi nhiều người dùng cho nhiều thử nghiệm, thậm chí đồng thời.

Trong nhiều trường hợp, thiết bị như vậy có một hệ thống quản lý phần mềm chịu trách nhiệm, trong số những thứ khác, kiểm soát phần mềm (un) cài đặt / nâng cấp / hạ cấp / v.v. Cần có một số cơ chế để chặn các hoạt động đó (nếu tôi hiểu chính xác câu hỏi, tương đương với việc đóng băng môi trường) dựa trên một số chính sách lập trình ít nhiều.

Trong trường hợp như vậy, một chính sách cụ thể có thể được phát triển chính xác để hỗ trợ lịch đóng băng mong muốn cần thiết cho môi trường thử nghiệm. Tự động lý tưởng, chấp nhận các kích hoạt đóng băng / tan băng từ các nguồn bên ngoài có thể là các trình bao bọc thực thi thử nghiệm hoặc các hệ thống CI. Và có thể với các phần ghi đè do con người kích hoạt, nếu thấy cần thiết.

Tất nhiên, tính năng như vậy của hệ thống quản lý phần mềm sẽ hữu ích khi kiểm tra các thành phần khác của thiết bị, nhưng có thể không phải để kiểm tra chính hệ thống quản lý phần mềm.


Câu trả lời này là về những gì tôi đã từng sử dụng (máy tính lớn), nơi chúng tôi thực hiện những điều này trong ít nhất 1,5 thập kỷ hoặc lâu hơn (trước khi "DevOps" ra đời). Tôi tự hỏi liệu có nên thêm câu trả lời của riêng tôi ở đây không (để mở rộng hơn nữa cho câu trả lời này, làm thế nào chúng ta làm điều này với CMN / ZMF, ví dụ như "ngân hàng"), hoặc chỉ đưa nó vào một câu hỏi mới (tự trả lời). Bạn nghĩ sao?
Pierre.Vriens

Có lẽ một ý kiến ​​riêng sẽ tốt hơn - ý kiến ​​của tôi chủ yếu là vì tôi không trực tiếp trải nghiệm môi trường như vậy, tôi chỉ thảo luận về nó bây giờ và sau đó với những người bạn đã làm.
Dan Cornilescu

4

TeamCity có tính năng xây dựng Tài nguyên được chia sẻ cho phép bạn xác định tài nguyên mà nhiều Định nghĩa xây dựng phụ thuộc vào nó. Xây dựng định nghĩa có thể yêu cầu Khóa đọc hoặc Khóa ghi, bạn cũng có thể xác định xem các khóa này là độc quyền hay cho phép mức độ song song.

Nếu chúng tôi đưa ra các giả định sau đây về một môi trường được chia sẻ có tên PreProd :

  • Tài nguyên được chia sẻ tồn tại có tên "PreProd".
  • Tất cả các định nghĩa xây dựng, chẳng hạn như triển khai, thực hiện bất kỳ thay đổi nào đối với môi trường đó đều có Khóa ghi độc quyền trên "PreProd".
  • Tất cả các định nghĩa xây dựng, chẳng hạn như các thử nghiệm không hạn chế, thực hiện các hoạt động chỉ đọc trên môi trường đều có Khóa đọc không độc quyền trên "PreProd".
  • TeamCity là quy trình duy nhất có thể làm bất cứ điều gì trên PreProd, mặc dù có thể thông qua một công cụ khác.

Do đó, những điều sau đây là đúng:

  • Khi việc triển khai đang diễn ra thì không có gì khác có thể sử dụng PreProd, chúng sẽ được xếp hàng.
  • Khi một bài kiểm tra đang chạy, mọi triển khai sẽ được xếp hàng cho đến khi các bài kiểm tra hoàn tất.

Bạn có thể sử dụng một cơ chế tương tự với Jenkins bằng cách sử dụng plugin Loại trừ . Trên thực tế, bạn có thể xây dựng chức năng này vào bất kỳ quy trình nào bằng cách sử dụng khóa hoặc semaphore - ví dụ: Apache ZooKeeper hoặc HashiCorp Consul .


Mô tả tốt của'standard 'hiện thực về những gì tôi đã đưa vào'guard' ý tưởng :)
Tensibai

merci, có liên kết nào để chia sẻ / thêm vào chính TeamCity, để tìm hiểu thêm về nó không?
Pierre.Vriens

1
Tuyệt đối, tôi đã thêm các siêu liên kết cho cả TeamCity và Jenkins trong câu trả lời, cá nhân tôi có thể đề xuất khóa học TeamCity trên Udemy .
Richard Slater

merci cho bản cập nhật thêm! PS: tại sao không bao gồm liên kết khóa học trong câu trả lời của bạn, ví dụ như thông qua một PS ở cuối? Theo cách đó, nếu một ngày nào đó người điều hành xuất hiện và bắt đầu xóa các bình luận, thì nó không có nguy cơ bị mất (điều này xảy ra với tôi khá nhiều tại một số trang SE khác).
Pierre.Vriens

Tôi thận trọng về việc đăng liên kết đến nội dung thương mại trong câu trả lời trên các trang SE nói chung. Tuy nhiên, tôi muốn trở nên hữu ích khi tôi giới thiệu khóa học này, tuy nhiên, vì đây là khóa học duy nhất tôi tham gia theo ý kiến ​​của riêng tôi.
Richard Slater

0

Điều này nghe có vẻ như một mô hình chống đối với tôi. Tôi tin rằng tất cả mọi người hoặc không ai nên có quyền truy cập vào tất cả các môi trường.

Nếu người dùng đang phá vỡ quy trình thì tôi sẽ xem xét nghiêm túc quy trình để thử và đảm bảo nó không bị cản trở.

Việc thực hiện một cơ chế tự động thực thi một trạng thái cụ thể cũng hữu ích cho việc khuyến khích mọi người thực hiện mọi việc đúng cách. Điều này có thể thông qua Quản lý cấu hình hoặc hủy bất kỳ trường hợp bất biến nào nếu ai đó SSH vào nó


Vui lòng kiểm tra "ghi chú" thứ 2 tôi đã thêm. Nó có giúp bạn xem xét lại đoạn đầu tiên của bạn không? Ngoài ra, tôi không hiểu phần còn lại của câu trả lời của bạn thực sự trả lời phần "làm thế nào" cho câu hỏi của tôi. Có lẽ có điều gì đó tôi không hiểu trong đó, vì vậy bạn có thể giúp tôi hiểu rõ hơn câu trả lời của bạn không? PS: Đừng lo lắng, tôi hiếm khi downvote câu trả lời (nếu tôi làm, tôi để lại ý kiến ​​....).
Pierre.Vriens

Bạn có một vấn đề xy meta.stackexchange.com/questions/66377/what-is-the-xy-probols . Tôi không trả lời cách triển khai giải pháp của bạn Tôi đang trả lời tôi sẽ giải quyết vấn đề của bạn như thế nào
Robo

@Robo Tôi không đồng ý, câu hỏi về ý nghĩa như thế nào, không có sự lật đổ hay bất cứ điều gì. Điều này chỉ có thể tạm dừng bất kỳ cập nhật tự động trong thời gian thử nghiệm. Bạn đang xem đó là hành động thủ công, vấn đề là: tránh người khác nâng cấp Ứng dụng A lên phiên bản Y trong khi một nhóm khác vẫn đang thử nghiệm ứng dụng B trong phiên bản X dựa trên ứng dụng A. Điều này có nghĩa là phải có người bảo vệ để tránh nhóm thử nghiệm để yêu cầu cập nhật về một phụ thuộc được thử nghiệm.
Tensibai

Điều đó không rõ ràng từ câu hỏi của bạn. Trong trường hợp đó bạn cần một số loại khóa.
Robo

Xin lưu ý rằng tôi vừa tích hợp (hầu hết) nhận xét của @Tensibai như là một sự làm rõ thêm (viên đạn cuối cùng). Hy vọng "nó" sẽ giúp nó làm cho câu hỏi của tôi rõ ràng hơn. Có lẽ bạn (Robo) cũng muốn xem lại câu trả lời của mình theo sự làm rõ thêm đó? Tái bút: merci Tensibai ...
Pierre.Vriens
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.