Làm thế nào để tự động thiết lập môi trường phát triển? [đóng cửa]


80

Mỗi khi một nhà phát triển mới tham gia vào nhóm hoặc máy tính mà nhà phát triển đang sử dụng thay đổi, nhà phát triển cần thực hiện nhiều công việc để thiết lập môi trường phát triển cục bộ để dự án hiện tại hoạt động. Với tư cách là một nhóm SCRUM, chúng tôi đang cố gắng tự động hóa mọi thứ bao gồm cả việc triển khai và thử nghiệm, vì vậy điều tôi hỏi là: có công cụ hoặc phương pháp thực hành nào để tự động hóa thiết lập môi trường phát triển cục bộ không?

Ví dụ để thiết lập môi trường của tôi, đầu tiên tôi phải cài đặt eclipse, sau đó là SVN, Apache, Tomcat, MySQL, PHP. Sau đó, tôi điền vào DB và tôi phải thực hiện những thay đổi nhỏ trong các tệp cấu hình khác nhau, v.v ... Có cách nào để giảm công việc này xuống còn một cú nhấp chuột không?

Câu trả lời:


68

Có một số tùy chọn và đôi khi sự kết hợp của những tùy chọn này rất hữu ích:

  • cài đặt tự động
  • hình ảnh đĩa
  • ảo hóa
  • kiểm soát mã nguồn

Chi tiết về các tùy chọn khác nhau:

  1. Tự động cài đặt Công cụ để tự động cài đặt và cấu hình dịch vụ khác nhau của một máy trạm, các công cụ và các tập tin cấu hình:

    • Con rối có một đường cong học tập nhưng mạnh mẽ. Bạn xác định các lớp của máy (hộp phát triển, máy chủ web, v.v.) và sau đó nó thực hiện những gì cần thiết để cài đặt, cấu hình và giữ hộp ở trạng thái thích hợp. Bạn đã yêu cầu một cú nhấp chuột, nhưng Puppet theo mặc định là không nhấp chuột, vì nó kiểm tra máy của bạn định kỳ để đảm bảo rằng nó vẫn được định cấu hình như mong muốn. Nó sẽ phát hiện khi một tệp hoặc chế độ đã được thay đổi và khắc phục sự cố. Tôi hiện đang sử dụng điều này để duy trì một số ít hộp RedHat Linux, mặc dù nó có khả năng xử lý hàng nghìn. (Không hỗ trợ Windows từ 2009-05-08).
    • Cfengine là một cái khác. Tôi đã thấy điều này được sử dụng thành công tại một cửa hàng với 70 kỹ ​​sư sử dụng RedHat Linux. Những hạn chế của nó là một phần lý do cho Puppet.
    • SmartFrog là một công cụ khác để định cấu hình máy chủ. Nó hỗ trợ Windows.
    • Các tập lệnh shell. RightScale có các ví dụ về cách định cấu hình hình ảnh Amazon EC2 bằng cách sử dụng các tập lệnh shell.
    • Cài đặt các gói. Trên hộp Unix, bạn có thể thực hiện việc này hoàn toàn bằng các gói và trên Windows msi có thể là một tùy chọn. Ví dụ: RubyWorks cung cấp cho bạn một ngăn xếp Ruby on Rails đầy đủ, tất cả bằng cách cài đặt một gói và lần lượt cài đặt các gói khác thông qua các gói phụ thuộc.
  2. Ảnh đĩa Tất nhiên cũng có các công cụ tạo ảnh đĩa để lưu trữ hình ảnh của một máy chủ đã được cấu hình để có thể khôi phục nó vào một máy chủ khác. Như với ảo hóa, điều này đặc biệt tốt cho các hộp thử nghiệm, vì rất dễ dàng khôi phục mọi thứ về một phương tiện chặn sạch sẽ. Giữ mọi thứ liên tục được cập nhật vẫn là một vấn đề - việc tạo hình ảnh mới chỉ để tuyên truyền thay đổi tệp cấu hình có đáng không?

  3. Ảo hóa là một tùy chọn khác, ví dụ như tạo bản sao của hình ảnh Xen, VirtualPC hoặc VMWare để tạo máy chủ mới. Điều này đặc biệt hữu ích với các hộp kiểm tra, vì bất kể bài kiểm tra tạo ra mớ hỗn độn nào, bạn có thể dễ dàng khôi phục về trạng thái sạch, đã biết. Cũng như các công cụ tạo ảnh đĩa, việc cập nhật các máy chủ yêu cầu nhiều bước thủ công và thận trọng hơn so với việc sử dụng công cụ cài đặt / cấu hình tự động.

  4. Kiểm soát mã nguồn Khi bạn đã cài đặt / định cấu hình các công cụ cần thiết, thì việc xây dựng phải là vấn đề kiểm tra những gì cần thiết từ kho mã nguồn và xây dựng nó.

Hiện tại tôi sử dụng kết hợp các điều trên để tự động hóa quy trình như sau:

  • Bắt đầu với cài đặt HĐH cơ bản trên máy khách VMWare
  • Chạy tập lệnh shell để cài đặt Puppet và truy xuất cấu hình của nó từ điều khiển mã nguồn
  • Con rối để cài đặt các công cụ / thành phần / cấu hình
  • Kiểm tra các tệp từ kiểm soát mã nguồn để xây dựng và triển khai ứng dụng web của chúng tôi

Trong văn phòng của chúng tôi có windows, linux và mac os. vì vậy tôi sẽ chọn tùy chọn ảo hóa.
nimcap

Chúng tôi bay với ảo hóa và đó là một giải pháp tốt. Khi tôi bắt đầu, tôi cần 3-4 ngày để thiết lập, bây giờ các nhà phát triển mới sẽ thiết lập trong thời gian cần thiết để sao chép hình ảnh VPC.
Burt

5
Bạn đã viết agile.dzone.com/articles/4-methods-automate-development vì nó nghe rất giống?
Aaron D

5
Không, tôi không viết bài báo đó, mặc dù xét từ những điểm tương đồng, có vẻ như tôi đã truyền cảm hứng cho nó. :-)
Pete TerMaat 18/09/13


20

Tôi tình cờ gặp câu hỏi này và rất ngạc nhiên khi chưa có ai đề cập đến Vagrant .

Vagrant

Như Pete TerMaat và những người khác đã đề cập, ảo hóa là một cách tuyệt vời để quản lý và tự động hóa các môi trường phát triển. Về cơ bản, Vagrant sẽ loại bỏ được những khó khăn khi thiết lập các hộp ảo này.

Trong vòng vài phút, bạn có thể có một bản sao hoàn toàn mới của bản phân phối Linux yêu thích của mình và được cung cấp giống hệt như cách máy chủ sản xuất của bạn.

Không còn phải chiến đấu với OSX hoặc Windows để cài đặt PHP, MySQL, v.v. Tất cả phần mềm đều sống và chạy bên trong máy ảo. Bạn thậm chí có thể SSH với vagrant ssh. Nếu bạn mắc lỗi hoặc vi phạm điều gì đó, hãy chỉ vagrant destroynó và vagrant upbắt đầu lại từ đầu.

Vagrant tự động tạo một thư mục được đồng bộ hóa với hệ thống tệp cục bộ của bạn, có nghĩa là bạn không cần phải phát triển trong máy ảo (tức là sử dụng Vim). Sử dụng bất kỳ trình soạn thảo nào mà bạn chọn.

Bây giờ tôi tạo một "hộp Vagrant" mới cho hầu hết mọi dự án mà tôi thực hiện. Tất cả các cài đặt của tôi được lưu vào kho lưu trữ dự án, vì vậy thật dễ dàng để đưa thành viên khác trong nhóm. Họ chỉ cần kéo repo và chạy vagrant up, và theo nghĩa đen, họ đã sẵn sàng để bắt đầu.

Điều này cũng làm cho việc xử lý các dự án có các yêu cầu phần mềm khác nhau trở nên dễ dàng hơn nhiều. Có thể bạn có một số dự án dựa trên PHP 5.3, nhưng một số dự án mới hơn chạy PHP 5.4. Chỉ cần cài đặt phiên bản bạn muốn cho dự án đó.

Kiểm tra nó ra!


1
Gỡ lỗi có thể là một vấn đề trong môi trường ảo hóa
Jonathan

13

Một điểm quan trọng là thiết lập các dự án của bạn trong kiểm soát nguồn để bạn có thể ngay lập tức xây dựng, triển khai và chạy sau khi thanh toán.

Điều đó có nghĩa là bạn cũng nên kiểm tra cơ sở hạ tầng trợ giúp, chẳng hạn như Makefiles, ant buildfiles, v.v. và cài đặt cho các công cụ, chẳng hạn như tệp dự án IDE.

Điều đó sẽ giải quyết rắc rối khi thiết lập cho các dự án riêng lẻ.

Đối với thiết lập máy cơ bản, bạn có thể sử dụng hình ảnh chuẩn. Một tùy chọn khác là sử dụng các công cụ của nền tảng của bạn để tự động cài đặt. Trong Linux, bạn có thể tạo một gói meta phụ thuộc vào tất cả các gói bạn cần. Trong Windows, điều tương tự cũng có thể thực hiện được bằng MSI hoặc tương tự.

Biên tập:

Tốt nhất, thay vì kiểm tra cơ sở hạ tầng của trình trợ giúp, bạn kiểm tra thông tin cho phép bản dựng tạo ra cơ sở hạ tầng của trình trợ giúp. Đây là cách tiếp cận được thực hiện bởi ví dụ như hệ thống xây dựng GNU (công cụ tự động, v.v.), hoặc bởi Maven. Điều này thậm chí còn thanh lịch hơn, vì bạn có thể (về mặt lý thuyết) tạo cơ sở hạ tầng cho bất kỳ môi trường xây dựng (được hỗ trợ) nào, do đó bạn không bị ràng buộc với ví dụ: một IDE cụ thể và các cài đặt trong cơ sở hạ tầng trợ giúp (đường dẫn, v.v.) không cần phải trùng lặp cài đặt dự án chính.

Tuy nhiên, đây cũng là một cách tiếp cận phức tạp hơn, vì vậy nếu bạn không thể làm cho nó hoạt động, tôi tin rằng việc kiểm tra trực tiếp những thứ như tệp IDE là có thể chấp nhận được.


7

Tôi thích sử dụng Virtual PC hoặc VMware để ảo hóa môi trường phát triển. Điều này cung cấp một "môi trường nhà phát triển" tiêu chuẩn có thể được chia sẻ giữa các nhà phát triển. Bạn không phải lo lắng về phần mềm mà người dùng có thể thêm vào hệ thống của họ có thể xung đột với môi trường phát triển của bạn. Nó cũng cung cấp cho tôi một cách để làm việc với hai dự án mà môi trường phát triển không thể cùng nằm trên một hệ thống (sử dụng hai phiên bản khác nhau của một công nghệ cốt lõi).


Việc chạy trong môi trường VirtualPc / VMWare có ảnh hưởng nhiều đến hiệu suất không? Bạn có sử dụng Visual Studio 2008 không?
Joel Gauvreau

Tôi biết ít nhất một cửa hàng phát triển phần mềm lớn thực hiện TẤT CẢ việc phát triển của họ độc quyền trong VM (VMWare). Mọi thứ giờ đã tốt hơn nhiều khi các CPU có hỗ trợ ảo hóa phần cứng ...
tomfanning

Bạn phải cẩn thận với các xung đột tên máy tính. Windows không quá vui khi hai máy có cùng tên xuất hiện trên một mạng. Tôi cũng không muốn có môi trường phát triển của mình trong máy ảo. Chi phí thực sự có thể kéo giảm hiệu suất của tôi.
Kieveli

2
Chúng tôi sử dụng môi trường Dev hoàn toàn ảo hóa. Chúng tôi sử dụng VMServer hoặc VirtualBox để lưu trữ các máy ảo Vista. Hình ảnh VM chứa toàn bộ ngăn xếp phát triển của chúng tôi nhưng không được đính kèm với miền công ty. Khi người dùng cần một máy mới, họ sao chép nó cục bộ, chạy NewSID và sau đó tham gia miền với một tên máy duy nhất. Trên phần cứng hiện đại, không có sự suy giảm hiệu suất đáng chú ý. Chúng tôi sử dụng VS2008 với ~ 20 dự án C ++ / C # trong một giải pháp và tất cả đều hoạt động tốt.
Colin Desmond

Một ưu điểm tuyệt vời mà tôi thấy với ảo hóa là khả năng lưu trạng thái hiện tại, để sau này khi quay lại, bạn sẽ quay lại chính xác vị trí cũ của mình. Không liên quan chính xác đến việc thiết lập một máy phát triển mới mà là một tác dụng phụ của việc sử dụng máy ảo.
Joel Gauvreau

3

Sử dụng con rối để định cấu hình cả môi trường phát triển và sản xuất của bạn. Sử dụng hệ thống tự động hóa hàng đầu là cách duy nhất để mở rộng quy mô hoạt động của bạn.


1

Luôn có tùy chọn sử dụng máy ảo (xem ví dụ: VMWare Player ). Tạo một môi trường và sao chép nó cho từng nhân viên mới với cấu hình tối thiểu cần thiết.


1

Tại một nơi trước đó, chúng tôi đã có mọi thứ (và ý tôi là MỌI THỨ) trong SCM (clearcase rồi đến SVN). Khi một nhà phát triển mới có thể trong họ đã cài đặt ClearCase | SVN và hút hết kho lưu trữ. Điều này cũng xử lý trường hợp bạn cần cập nhật một lib / công cụ cụ thể vì bạn có thể yêu cầu các nhóm phát triển cập nhật môi trường của họ.

Chúng tôi đã sử dụng hai repo cho việc này để mã và công cụ / cấu hình nằm ở những nơi riêng biệt.


1

Tôi thực sự giới thiệu Blueprint từ DevStructure. Nó là mã nguồn mở và trường hợp sử dụng của bạn thực sự là lý do chính xác mà chúng tôi viết phần mềm ban đầu. Mục tiêu của chúng tôi đã phần nào thay đổi, nhưng nó vẫn là công cụ hoàn hảo cho những gì bạn đang mô tả. Tóm lại, bạn có thể tạo cấu hình máy chủ có thể sử dụng lại - quản lý cấu hình đơn giản. Tôi hi vọng cái này giúp được!

https://github.com/devectors/blueprint (Blueprint @ Github)


1
Đó là về môi trường phát triển hay máy chủ?
nimcap

1

Tôi đã tự mình suy nghĩ về điều này. Có một số công nghệ khác mà bạn có thể đưa vào hỗn hợp. Đây là những gì tôi hiện đang thiết lập:

  • Hình ảnh cài đặt được gieo sẵn dựa trên PXE (Debian Squeeze). Bạn có thể khởi động một máy kim loại trần (hoặc thiết bị ảo mới) và chọn hình ảnh từ menu khởi động PXE. Điều này có lợi thế lớn là có thể cài đặt môi trường của bạn trên các máy vật lý (ngoài các thiết bị ảo).
  • Ai đó đã đề cập đến Puppet. Tôi sử dụng CFEngine nhưng đó là một thỏa thuận tương tự. Về cơ bản, cấu hình của bạn được lập thành tài liệu và tập trung trong các tệp chính sách được thực thi liên tục bởi một tác nhân trên máy khách.
  • nếu bạn không muốn một môi trường cứng nhắc (tức là các nhà phát triển có thể chọn kết hợp các bộ công cụ), bạn có thể cuộn các gói gỡ lỗi của riêng mình để các nhà phát triển mới có thể nhập sudo apt-get install acmecorp-eclipse-envhoặc sudo apt-get install acmecorp-intellij-envchẳng hạn.
  • Hơi lạc đề, nhưng nếu bạn chạy môi trường dựa trên Debian (tức là Ubuntu), hãy xem xét cài đặt apt-cacher(proxy gói). Ngoài việc tiết kiệm băng thông, nó sẽ giúp quá trình cài đặt của bạn nhanh hơn nhiều (vì các gói được lưu vào bộ nhớ đệm trên mạng cục bộ của bạn).


0

Nếu bạn sử dụng máy ở cấu hình tiêu chuẩn, bạn có thể hình ảnh đĩa với bản cài đặt được cấu hình hoàn hảo mới - đó là cách tiếp cận rất phổ biến ở nhiều công ty (và không chỉ dành cho các nhà phát triển). Nếu bạn cần hệ điều hành được định cấu hình riêng, bạn có thể tar-bz2 tất cả các tệp được thêm và thay đổi sau khi hệ điều hành đã định cấu hình được chuyển thành thiết lập mong muốn của bạn và chỉ cần gỡ bỏ nó dưới dạng root để tạo môi trường mong muốn của bạn từ đầu.


0

nếu bạn đang sử dụng hương vị linux, bạn có thể có một hệ thống quản lý gói: nghĩ rằng .rpm cho fedora / redhat hoặc .deb cho ubuntu / debian. nhiều thứ bạn mô tả đã có sẵn các gói: svn, eclipse, v.v. bạn có thể cuộn các gói của riêng mình cho phần mềm cụ thể của công ty, tạo một kho lưu trữ (có lẽ chỉ có sẵn trên mạng cục bộ) và sau đó thiết lập của bạn có thể được giảm xuống một bash script sẽ thêm repo công ty vào /etc/apt/sources.list (debian / ubuntu) và sau đó gọi một lệnh như,


/home/newhire$ apt-get update && apt-get install some complete package list

bạn có thể sử dụng buildbot để sau đó tự động hóa các bản dựng thông thường cho các gói công ty thường xuyên thay đổi.


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.