Cách hiệu quả để giữ các dự án trong quá khứ với môi trường phát triển làm việc của họ?


19

Tôi thấy rằng bất cứ khi nào tôi muốn chạy một dự án trong quá khứ, sẽ mất một thời gian dài trước khi tôi có thể tìm thấy nó và trước khi tôi có mọi thứ được thiết lập lại để nó có thể chạy.

Ví dụ, tôi có các dự án python mà tôi đã tạo trong Linux và nó phụ thuộc vào các gói phần mềm dễ cài đặt trong Linux, nhưng tôi không còn có máy ảo Linux mà tôi đang sử dụng. Và một số dự án khác của tôi phụ thuộc vào các biến khác như cấu hình máy chủ web, biến PATH, sdk, IDE, phiên bản HĐH, thiết bị, v.v.

Có ai đó có một cách hiệu quả để xử lý vấn đề này? Cho đến bây giờ tôi chỉ quan tâm đến việc giữ mã nguồn sao lưu nhưng rất khó để thiết lập lại môi trường phát triển làm việc và cũng rất khó để giữ môi trường phát triển làm việc xung quanh .


6
NSA là bản sao lưu của tôi
Steffe

Câu trả lời:


17

Những gì tôi đã làm trong quá khứ là chuyển đổi máy phát triển vật lý thành VM hoặc nếu nó đã là VM, hãy giữ lại để sử dụng trong tương lai. Nó không hiệu quả như tôi muốn cho việc sử dụng dung lượng đĩa, nhưng dung lượng thì rẻ. Ngoài ra, quá trình này ít tốn kém thời gian hơn nhiều so với việc cố gắng cấu hình lại một môi trường trong tương lai nếu cần.


2
Tôi nghĩ bạn cũng cần giữ lại các bản sao của tất cả phần mềm / phiên bản và cài đặt dự án của bạn từ một tập lệnh. Đó là một bước tiến lớn để có thể nhanh chóng tái tạo cài đặt mỗi lần .
tzerb

Đây là những gì tôi đã làm trong quá khứ ... thật tuyệt vời khi hỗ trợ các môi trường máy khách khác nhau, v.v. Nếu bạn sử dụng một VM cơ sở, thì mỗi VM liên tiếp có thể chỉ là một tệp khác, sẽ tiết kiệm không gian đĩa nếu đó là một vấn đề ... Nhưng cá nhân tôi nghĩ rằng ổ cứng là giá rẻ. :-)
davewasthere

Với sự hỗ trợ của LXC trở nên tốt hơn, nó an toàn để sử dụng thay vì VM khi làm việc với môi trường linux. Đó là đòi hỏi ít hơn về tài nguyên và cách nhanh hơn. ATM công cụ tốt nhất để quản lý chúng là Docker
karka91

11

Phương pháp yêu thích hiện tại của tôi là duy trì một tập lệnh cài đặt TẤT CẢ các phụ thuộc cần thiết cho một dự án, tải xuống nguồn và nối mọi thứ lên. Một số tập lệnh có hai chế độ - một chế độ để sản xuất, thường là một tập hợp con của chế độ khác: phát triển.

Một số môi trường chỉ mất khoảng 5 phút để cài đặt tập lệnh - trong trường hợp đó tôi giữ một máy ảo cục bộ với bản cài đặt mới của HĐH đích mà tôi triển khai tập lệnh dự án khi tôi đi làm vào buổi sáng - và sau đó thực hiện tất cả mã hóa công việc liên quan trên ví dụ VM đó. Trước khi tôi rời đi, tôi đẩy tất cả các thay đổi thông qua git đến máy vật lý của tôi hoặc kho lưu trữ trung tâm của chúng tôi và chấm dứt VM.

Nếu môi trường mất nhiều thời gian hơn để thiết lập (cài đặt chạy lâu, tệp lớn để tải xuống, bất cứ điều gì tương tự) tôi thực hiện quy trình trên mỗi tuần một lần.

Lợi ích là rất dễ dàng để triển khai đến một máy mới và / hoặc máy chủ sản xuất, tất cả đều được ghi lại trong tập lệnh và tập lệnh được xác minh rất thường xuyên.


4

Khái niệm bạn đang mô tả là quản lý cấu hình. Đây là âm thanh, một cách để xác định, ghi lại, phiên bản / bản nhạc và báo cáo một môi trường. Nó thường là một nhiệm vụ liên quan mạnh mẽ đến kiểm soát phiên bản và quản lý xây dựng, nhưng nó đủ khác biệt thường đòi hỏi một chiến lược riêng, ngay cả khi nó sử dụng một số khái niệm giống nhau và cùng cơ chế xử lý và lưu trữ.

Quản lý cấu hình bên cạnh việc giúp kiểm soát môi trường làm việc cũng giúp thiết lập hồ sơ về các môi trường làm việc khác nhau trong đó phần mềm được sử dụng (phát triển như đã đề cập, cộng với thử nghiệm / QA, triển khai cho khách hàng thường xuyên, triển khai cho khách hàng cần xem xét đặc biệt hoặc cấu hình đặc biệt hoặc xây dựng các thuộc tính, và như vậy).

Như tôi đã nói, đây thường là một nhiệm vụ trùng với kiểm soát phiên bản nguồn và thường dữ liệu quản lý cấu hình nằm bên cạnh nguồn trong cả tài liệu và kho lưu trữ nguồn. Nó không phải như vậy, nhưng thường là một vấn đề thuận tiện.

Tự động hóa một số khía cạnh của quản lý cấu hình đã được cải thiện phần lớn trong những năm gần đây. Một số câu trả lời và nhận xét đề xuất các tập lệnh như một cách để thúc đẩy quản lý cấu hình và các tập lệnh là một câu trả lời tốt để giúp đạt được kết quả có thể lặp lại, nhưng thường thì các tập lệnh thủ công tự chúng không nhất quán và không đầy đủ. Một cách như vậy điều này đã được cải thiện là thông qua cung cấp tự động. Các hệ thống như con rối hoặc đầu bếpgiúp chỉ định các thành phần và hệ thống phần mềm cho một người dùng hoặc máy cụ thể hoặc cho một cấu hình tác vụ cụ thể và cung cấp 'công thức nấu ăn' cho phép thực hiện phương pháp tiếp cận để thiết lập một máy hoặc môi trường hoàn chỉnh. Về cơ bản, nó lấy khái niệm về kho lưu trữ phân phối phần mềm và mở rộng và khái quát hóa nó cung cấp không chỉ các gói phần mềm cần thiết cho hệ thống, mà còn cả các cấu hình cấu hình cụ thể cho từng gói để nó sẵn sàng sử dụng theo cách phù hợp với bạn tình hình.

Vagrant thực hiện điều này theo một hướng hơi khác và cung cấp một cách để nhanh chóng quay vòng các định nghĩa máy ảo, sao cho VM có thể được cung cấp phần mềm và phần cứng ảo tự động và có thể chứng minh là một cách thuận tiện để tái tạo một đại diện cụ thể của phần cứng môi trường được sử dụng bởi người dùng phần mềm của bạn.

Mỗi hệ thống (và các biến thể) cần một chút để thiết lập, nhưng có một số giá trị rõ ràng nếu bạn thấy nhiệm vụ tải lại và cấu hình lại là một nhiệm vụ chung.


Xin vui lòng bạn có thể mở rộng về những gì chiến lược bạn đề cập trong tuyên bố của mình "nhưng nó đủ khác biệt thường đòi hỏi một chiến lược riêng biệt"? Tôi sẽ sử dụng Vagrant và lưu trữ một cấu hình VM trong kho lưu trữ mã nguồn của tôi và tôi tự hỏi tại điểm nào nó sẽ phải được xử lý khác nhau?
CL22

3

Docker sẽ là một lựa chọn tốt. Bạn có thể sử dụng một dockerfile để hoạt động như một bảng kê khai cho VM bạn muốn. Bạn không cần lưu trữ bất kỳ hình ảnh nào, nó sẽ tải xuống hình ảnh cần thiết. Ngoài ra, nó có thể sử dụng hình ảnh của riêng bạn, vì vậy bạn có thể tạo hình ảnh cơ sở của riêng mình và sau đó thêm các thành phần theo yêu cầu của môi trường.

Sử dụng docker, điều này cũng có thể cải thiện các phần khác trong quy trình làm việc của bạn:

  • Môi trường được tạo có thể được đặt trên cùng một CVS so với dự án của bạn, điều đó mang lại cho bạn một môi trường được phiên bản (gọn gàng!)
  • Docker có thể được sử dụng để cung cấp môi trường sống, làm giảm sự đau đầu của việc khởi động các dự án của bạn trong sản xuất.
  • Nếu những người khác bắt đầu làm việc với bạn, tất cả những gì họ cần là dockerfile để tải thiết lập môi trường khổng lồ đó.

Vì vậy, những ý tưởng ở đây về việc sử dụng VM chỉ đúng một phần, tôi biết rằng ổ cứng ngày càng lớn hơn nhưng đó không phải là lý do để sử dụng hết dung lượng bạn có. Ngoài ra, khi môi trường VM cần thêm dung lượng ổ cứng trong nội bộ, điều này có thể hơi khó khăn và rất có thể bạn sẽ cần phải xây dựng lại. Mặc dù kích thước tệp có thể không phải là vấn đề, tốc độ internet vẫn trở thành nút cổ chai khi bạn cần gửi hơn 5Go trên kết nối DSL thông thường.


2

Hầu hết các hệ thống (ngôn ngữ, thời gian chạy hoặc hệ điều hành) có một số cách cài đặt phần mềm và cấu hình được tiêu chuẩn hóa, vì vậy hãy thử sử dụng chúng. Nhu la:

  • Maven hoặc Gradle cho Java
  • CPAN cho Perl
  • vòng / phút cho RedHat / Fedora
  • dpkg / apt-get cho Linux
  • Gói MSI cho Windows

Sau đó thực hiện các hướng dẫn cài đặt giải thích chính xác những gì cần được cài đặt / những bước cần thiết:

  • Cung cấp các hướng dẫn ngắn về những gì bạn cho là đã được cài đặt (HĐH cơ sở, thời gian chạy cơ sở như Java / Perl / Python ...)
  • Viết một đoạn script ngắn thực hiện các cài đặt cần thiết (lý tưởng nhất là một lệnh gọi duy nhất của một công cụ như Maven)
  • Kiểm tra điều này trên bản cài đặt mới (chẳng hạn như trên VM)

Sau đó, bạn sẽ có thể tạo lại môi trường và những người khác cũng có thể làm như vậy (điều này có thể quan trọng nếu đó không phải là một dự án solo).

Bạn có thể cần lưu trữ các gói cài đặt cần thiết ở đâu đó hoặc bạn chỉ có thể bao gồm các hướng dẫn tải xuống (trừ khi hệ thống theo dõi các gói đó, chẳng hạn như apt-get hoặc Maven). Điều đó phụ thuộc vào mức độ bạn tin tưởng của các nhà cung cấp gói - có thể không cần lưu trữ các gói Debian lõi, nhưng với một số dự án phần mềm miễn phí nhỏ, đó có thể là một ý tưởng hay.

Giải pháp VM cũng sẽ hoạt động và có lẽ ít hoạt động hơn trong thời gian ngắn (chỉ cần giữ VM). Tuy nhiên, tôi cảm thấy giải pháp này mang lại sự linh hoạt hơn, ví dụ như khi thay đổi môi trường.

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.