Quản lý sách dạy nấu ăn trong môi trường nhóm


13

Tôi đang học đầu bếp và gặp vấn đề về cấu trúc mọi thứ để làm việc với nhóm của mình.

Đối với người mới bắt đầu, có vẻ như bạn nên tạo một thư mục đầu bếp-repo, nơi bạn sẽ lưu trữ và sửa đổi các sách nấu ăn được sử dụng để quản lý các nút của bạn.

Tôi làm việc trên nhiều dự án khác nhau và mỗi dự án đều nằm dưới sự kiểm soát nguồn git. Lý tưởng nhất là tôi sẽ giữ một thư mục repo đầu bếp trong mỗi dự án của mình với sách dạy nấu ăn của dự án đó phải không?

Tuy nhiên, trong thư mục đầu bếp-repo, tôi phải thêm một thư mục cấu hình (.chef) với cấu hình dao và các xác nhận khóa của tôi, và những thứ này là dành riêng cho tôi. Có phải là bình thường khi chỉ cần thêm thư mục .chef vào tệp gitignore?

Tôi hiểu các sách dạy nấu ăn được tải lên máy chủ đầu bếp để sau đó được triển khai. Làm thế nào để các đội khác tách biệt dàn dựng khỏi môi trường sản xuất mà không lặp lại nhiều công việc? Chúng tôi có một chi nhánh chính là chi nhánh sản xuất của chúng tôi, một chi nhánh phát triển là chi nhánh của chúng tôi (nhận được ít hơn 5% yêu cầu của trang web) và các chi nhánh tính năng. Hầu hết thời gian, nhánh dev khi ổn định được sáp nhập vào nhánh chính. Làm thế nào chúng ta có thể tải lên các sách dạy nấu ăn riêng biệt để có thể có hai môi trường theo một cách riêng biệt?

Cảm ơn đã giúp đỡ!


Bạn có thể thiết lập .chefthư mục để sử dụng các biến môi trường hoặc một cái gì đó?
ceejayoz

Bạn có thể vui lòng mô tả mục tiêu của bạn chi tiết hơn? Loại cơ sở hạ tầng nào bạn muốn tự động hóa bằng Chef? Bạn đã đề cập đến các chi nhánh khác nhau - nếu bạn đang nói về việc triển khai phần mềm, một công cụ CI như Jenkins có thể là giải pháp tốt hơn.
geewiz

Thật tốt khi con rối hỗ trợ các môi trường như thế này, thực sự.
Tom O'Connor

Câu trả lời:


15

Tôi làm việc với nhiều dự án, vì vậy giải pháp của cjc sẽ không hiệu quả với tôi. Ngoài ra còn có một vấn đề về cấu hình chung so với cấu hình tùy chỉnh (địa chỉ vv là chung cho công ty, cũng có một chút ma thuật trong cấu hình). Kế hoạch cuối cùng tôi đã giải quyết là một chút hack, nhưng nó là một tiện ích để sử dụng.

Thay vì toàn cầu ~/.chef, tôi sử dụng thư mục con '.chef' trong đầu bếp-repo, không được lưu trữ trong git (nó được thêm vào .gitignore). Tôi cũng có tập tin tập config/knife.rbtin được kiểm tra vào Git và chứa cấu hình chia sẻ. Nó bắt đầu với đoạn trích này:

root_dir = File.join(File.dirname(__FILE__), '..')
%w(knife-secrets.rb knife-local.rb).each do |conf_name|
  conf = File.join(root_dir, ".chef", conf_name)
  Kernel::load(conf) if File.exists? conf
end

Điều này tải các tệp .chef/knife-local.rbchứa cấu hình tùy chỉnh (trong phiên bản cơ bản, nó chỉ là OPSCODE_USER='username'hằng số được sử dụng sau này, nhưng nó có thể chứa bất kỳ cấu hình dao nào) và .chef/knife-secrets.rbchứa các bí mật chung (khóa AWS, v.v.).

Bên dưới đó, có cấu hình dao thông thường sử dụng các hằng số được xác định trong các tệp này, ví dụ:

client_key               "#{root_dir}/.chef/#{OPSCODE_USER}.pem"

Bằng cách này, tôi đạt được sự ổn định của cấu hình dao trên toàn công ty, điều này có nghĩa là bất kỳ đoạn mã hoặc lệnh gọi dao nào được chia sẻ trong wiki sẽ hoạt động cho tất cả mọi người. Có đủ sự nhầm lẫn và ma thuật trong chính con dao - các cấu hình khác nhau sẽ chỉ làm cho nó tồi tệ hơn. Ngoài ra, mọi người đều được hưởng lợi từ các đoạn ma thuật nhỏ, như đoạn này để knife sshsử dụng cấu hình đăng nhập trong người dùng~/.ssh/config

Ngoài ra còn có vấn đề về các bí mật được chia sẻ: khóa xác thực của máy chủ đầu bếp, khóa AWS được lưu trữ knife-secrets.rb, khóa riêng SSH của EC2, khóa túi dữ liệu được mã hóa, v.v. Chúng tôi chắc chắn không muốn chúng được lưu trữ trong kho lưu trữ - hoặc, thực sự, bất cứ nơi nào chúng không được mã hóa an toàn. Vì vậy, chúng tôi phân phối các tệp đó dưới dạng .tar.gztệp, được mã hóa GPG cho mọi người trong công ty và được chia sẻ qua Dropbox.

Việc cấu hình tất cả điều này đang trở nên phức tạp và tôi muốn mọi người trong nhóm thực sự sử dụng thứ đó, vì vậy có yếu tố cuối cùng: rake inittác vụ tạo .chefthư mục, liên kết tượng trưng config/knife.rbở đó, giải mã và giải nén chef-secrets.tgztệp, đảm bảo khóa Opscode Platform riêng tư của người dùng ở đó và .chef/knife-local.rbđúng được cấu hình, bổ trợ dao symlink và đặt quyền thích hợp trên thư mục và tệp bên trong. Nhiệm vụ này được thiết lập sao cho an toàn để chạy nó nhiều lần trên kho lưu trữ đã được khởi tạo (ví dụ: để cập nhật bí mật hoặc bổ trợ dao).

Ngoài ra còn có một nhiệm vụ trợ giúp đóng gói lại tất cả các bí mật, mã hóa tarball cho mọi người và sao chép nó vào dropbox, để dễ dàng thêm nhân viên mới hoặc thay đổi bí mật.

Về nhiều môi trường: Chef có một tính năng gọi là môi trường . Tôi chưa sử dụng nó, nhưng nó sẽ làm những gì bạn cần. Bạn cũng có thể tách biệt nghiêm ngặt môi trường sản xuất (để tránh các nhà phát triển có bất kỳ khóa nào liên quan đến bất kỳ cách nào để sản xuất env) bằng cách có hai tổ chức Chefed hoặc máy chủ Chef riêng biệt. Đoạn mã dao.rb này cho biết cách định cấu hình dao theo cách khác dựa trên nhánh đã được kiểm tra hiện tại - bạn có thể sử dụng điều này để đặt môi trường cũng như url của máy chủ đầu bếp. Ngoài ra còn có plugin dao gọi là dao dòng chảy , cung cấp quy trình làm việc hai tổ chức hoàn chỉnh hơn.


Cảm ơn các câu trả lời chi tiết. Nhìn thấy công việc sắp đặt nó ít nhất có nghĩa là tôi đã không bỏ lỡ điều gì rõ ràng ...
Alex Recarey

3

Bạn cần thiết lập hai máy chủ Chef, một cho sản xuất và một cho phát triển. Lý do là không một máy chủ Chef nào có thể hỗ trợ phát triển theo nhánh; ngay cả với môi trường.

Hoặc bạn có thể từ bỏ khái niệm máy chủ Chef và sử dụng Chef-solo. Bạn có thể duy trì sách dạy nấu ăn của bạn trong Git. Bạn có thể phân nhánh và hợp nhất. Bạn có thể bỏ qua các vấn đề với thông tin đăng nhập dao vì bạn sẽ không sử dụng chúng nữa.

Bạn sẽ không thể sử dụng tìm kiếm dao hoặc túi dữ liệu **. Nhưng một số người không cần những tính năng này.

** Vâng, bạn sắp xếp có thể: http://wiki.opscode.com/display/chef/Data+Bags#DataBags-UsingDataBagswithChefSolo


2

Tôi có hai thư mục trong nhà của tôi, .chef và đầu bếp-repo. Các đầu bếp-repo là trong git. .Chef là một số thư mục riêng mặc định cho dao. Bạn không cần phải đặt bí mật của mình từ .chef vào git; dao sẽ tìm ~ / .chef.


2

Thư mục ~ / .chef của bạn không nên có trong repo git.

Tôi có một thư mục ~ / dự án / theo đó tôi giữ repo đầu bếp của mình. Theo cách này, cấu hình máy chủ của tôi.

Công việc cuối cùng của tôi là Kỹ sư hệ thống tại cửa hàng Ruby-on-Rails. Các cấu hình nginx, véc ni và đường ray của chúng tôi (trong số các cấu hình khác) đi vào repo đầu bếp, nhưng bản thân các ứng dụng Rails được giữ trong các repo git riêng biệt và được triển khai riêng.

Môi trường dàn dựng của chúng tôi là một máy chủ duy nhất chạy toàn bộ môi trường dàn dựng. Điều này không lý tưởng vì nó không giống với Sản xuất trong đó Rails và DB nằm trên các hộp riêng biệt. Những gì tôi muốn giới thiệu là sử dụng Môi trường của Đầu bếp để phân tách Giai đoạn và Sản xuất. (Đó là khi tôi đến đó và tôi không có thời gian để sửa nó trước khi tôi rời đ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.