Có phải là một ý tưởng tốt để cài đặt Mercurial trên máy chủ của bạn và hg pull để triển khai?


12

Tôi vừa mới bắt đầu một công việc mới trong tháng vừa qua và có vẻ như họ KHÔNG kiểm soát nguồn cho mã của họ. Họ đang dựa vào các bản sao lưu mà nhà cung cấp dịch vụ lưu trữ của họ dành cho họ.

Sau khi nói chuyện một chút, tôi đã thuyết phục sếp của mình rằng chúng tôi chắc chắn nên sử dụng kiểm soát nguồn và sau khi tôi có một cuộc hội thảo ngắn về nó, toàn bộ đội ngũ đã ở trên tàu; họ yêu Mercurial.

Vì vậy, ngay bây giờ đây là cách chúng tôi làm việc:

º----------BitBucket
º---------/
º--------/

Bản thân tôi và ba nhà phát triển khác hg pulltừ BitBucket, thực hiện các thay đổi của chúng tôi, sau đó hg pushđến BitBucket.

Bây giờ để triển khai, ai đó sẽ cần FTP các tệp mới nhất về phía máy chủ sản xuất.

Tôi đã nghĩ đến việc cài đặt Mercurial trên máy chủ của chúng tôi và sử dụng hg clone(sau đó hg pull) để giữ cho các phiên bản được cập nhật khi sản xuất.

º---push->-----BitBucket----<-pull-----º (production server)
º---push->----/
º---push->---/

Đây có phải là một ý tưởng tốt? Bất kỳ cạm bẫy tiềm năng nào tôi có thể không nhìn thấy? Có ai ở đây đã làm một cái gì đó tương tự? Làm thế nào để bạn triển khai một ứng dụng khung PHP lớn (Chúng tôi đang sử dụng Moodle)?


Đó là ý tưởng tuyệt vời. Tại sao bạn có nghi ngờ?
Nikolay Fominyh

Đó là một quá trình mà nhiều người làm và thực sự coi là "bình thường" đủ để Microsoft hiện đã tích hợp hỗ trợ để thực hiện Git (có thể hỗ trợ hg trong tương lai) dựa trên dịch vụ Azure của họ.
Alan Barber

Câu trả lời:


11

Đây chắc chắn là một ý tưởng tốt và nó là một phương pháp phổ biến để sử dụng để triển khai. Bạn có thể muốn sử dụng một nhánh ổn định cho mục đích triển khai trong khi giữ thân cây để phát triển liên tục để bạn có thể kiểm tra nhánh ổn định trước khi bạn triển khai nó vào sản xuất.

Vấn đề duy nhất có thể xảy ra khi bạn có thông tin nhạy cảm trong cơ sở mã của mình (chẳng hạn như khóa API, v.v.) mà bạn không muốn tải lên máy chủ của bên thứ ba (trong trường hợp của bạn là Bitbucket). Trong trường hợp này, một tập lệnh đơn giản được chạy khi bạn đã kéo dữ liệu từ kho lưu trữ để khôi phục dữ liệu nhạy cảm ở đúng vị trí sẽ giải quyết vấn đề đó.


10

Lưu ý rằng chiến lược triển khai này không phải là nguyên tử. Có thể xảy ra việc một số tệp đã được cập nhật trong khi các tệp khác có thể vẫn ở trạng thái cũ trong khi ứng dụng đang bị tấn công. Điều này có thể gây ra tác dụng phụ không mong muốn.

Một cách để thực hiện triển khai nguyên tử là bằng cách sử dụng các liên kết tượng trưng. Tạo một thư mục chứa các tập tin mới. khi mọi thứ đã sẵn sàng thay đổi một liên kết tượng trưng cho thư mục được sử dụng. Nếu bạn giữ phiên bản cũ xung quanh bạn cũng có thể dễ dàng quay trở lại.


3
Dù sao thì bạn cũng có thể dễ dàng quay trở lại, đó là điểm của VCS.
Cướp

1
không nhất thiết - sau đó bạn cần giữ cấu hình hoặc một số tệp được tạo có thể phụ thuộc vào phiên bản và hệ thống trong VCS. Ngoài ra, bạn sẽ phải sử dụng các thẻ (không được đề cập trong quy trình được mô tả trong câu hỏi) để ele trở về phiên bản làm việc đã biết.
johannes

2

Một khả năng khác (theo ý kiến ​​của tôi tốt hơn) : sử dụng máy chủ xây dựng / máy chủ tích hợp liên tục.

Giải thích ngắn gọn: đây là một máy chủ (có thể là nội bộ, không cần có trên internet) mà bạn đã thiết lập để giám sát kho lưu trữ của mình và bất cứ khi nào có các thay đổi mới trong kho, máy chủ sẽ tạo mã của bạn ( AFAIK điều này không cần thiết trong PHP) , chạy thử nghiệm đơn vị và triển khai mã của bạn đến máy chủ web.

Để biết thêm thông tin, hãy kiểm tra các liên kết sau:

Có rất nhiều sản phẩm khác nhau cho CI , nhưng sản phẩm duy nhất tôi đã sử dụng cho đến nay là TeamCity . Rất dễ cài đặt ... trên thực tế, đó là cái đầu tiên tôi đã thử, và tôi thích nó đến nỗi tôi đã gắn bó với nó.


Giải pháp thay thế giá rẻ:

Nếu việc thiết lập máy chủ xây dựng quá nhiều nỗ lực hoặc nếu bạn muốn kiểm soát nhiều hơn khi chính xác trang web của bạn được triển khai, chỉ cần thiết lập tệp tập lệnh (Batch / Powershell trên Windows hoặc một cái gì đó tương tự trên Linux / Mac) để kéo phiên bản mới nhất từ ​​kho lưu trữ của bạn và FTP nó trên máy chủ sản xuất.

Về cơ bản, nó giống như một máy chủ xây dựng, chỉ đơn giản hơn.


Cho dù cuối cùng bạn giải quyết nó chính xác như thế nào ... hãy chắc chắn tự động hóa nó bằng cách nào đó!

Bạn muốn có thể triển khai chỉ bằng một cú nhấp chuột / bằng cách gõ một lệnh duy nhất, để MỌI NGƯỜI có thể làm điều đó mà không cần phải biết điều gì đặc biệt và không mắc lỗi - ngay cả trong trường hợp thảm họa hoặc bị căng thẳng.


1

Chúng tôi làm điều này, hoặc những thứ tương tự như thế này. Góc không đề cập @johannes đề cập đến một vấn đề, mặc dù trong điều kiện thực tế, nó xảy ra quá nhanh, nó sẽ ổn và có nhiều cách để giải quyết vấn đề này.

Có lẽ quan trọng hơn tính phi nguyên tử này là "làm thế nào để bạn quản lý các cập nhật lược đồ cơ sở dữ liệu" - triển khai mã xấu theo cách này giúp việc khắc phục dễ dàng. Vấn đề lớn là khi bạn triển khai một bản cập nhật thay đổi cơ sở dữ liệu mà bạn muốn khôi phục. Hoặc nếu bạn đang thực hiện cập nhật xấu và dữ liệu bị hỏng.

Vấn đề khác chúng tôi gặp phải với các công cụ DCVS (trái ngược với việc sử dụng SVN) là bây giờ bạn có một bản sao của toàn bộ cơ sở mã trên máy ở một nơi nào đó mà kẻ tấn công có thể lấy. Và cũng là cơ sở mã DCVS có thể có kích thước khá nặng, điều này có thể quan trọng nếu bạn đang trả tiền cho việc lưu trữ và / hoặc sao lưu. Chúng tôi vẫn đang sử dụng SVN để triển khai cuối cùng vì những lý do này.


1

Đó là một ý tưởng tuyệt vời, tuy nhiên hãy ghi nhớ những điều sau:

  • Cố gắng không cam kết trên máy chủ (mặc dù một số lần hiếm khi thực hiện việc này, ví dụ: cài đặt plugin hoặc thêm nội dung)
  • Sử dụng máy chủ dàn hoặc triển khai kho lưu trữ thứ cấp để thử nghiệm
  • Hãy luôn cẩn thận mà hg update -Ckhông ảnh hưởng đến sản xuất (tức là xóa các tệp quan trọng)
  • Có chi nhánh sản xuất và phát triển, chỉ triển khai chi nhánh sản xuất
  • Coi tài sản là bản sao lưu (ví dụ: hình ảnh cho nội dung) và bỏ qua dữ liệu người dùng (ví dụ: tệp đính kèm / tải lên, bộ đệm, v.v.)
  • Luôn có hg statusđầu ra sạch trên máy chủ (điều này sẽ giúp bạn đảm bảo rằng bạn đang bỏ qua mọi thứ như bộ đệm)
  • Đừng triển khai kho lưu trữ trong thư mục web. Sử dụng liên kết tượng trưng từ bên ngoài không gian công cộng (ví dụ: ln -s / myrepo / src / web / public_html / myapp)
  • Cẩn thận không để các tệp cấu hình phiên bản (đặc biệt với mật khẩu cơ sở dữ liệu hoặc khác)
  • Không sử dụng thay vì sao lưu sản xuất, đây là bản sao lưu phát triển cho sản xuất , không phải dữ liệu sản xuất

Cuối cùng, tôi nghĩ rằng điều quý giá nhất để thêm DVCS vào quy trình triển khai của bạn là điều này sẽ tăng thêm bảo mật cho việc triển khai của bạn, đôi khi tin tặc tiêm mã độc vào công cụ của bạn và bạn thực sự không có cách nào phát hiện ra nó một cách dễ dàng nếu không có kiểm soát phiên bản ( được phân phối đặc biệt, vì khía cạnh phân tán cho VCS giúp kiểm tra tính toàn vẹn của các tệp của bạn dễ dàng hơn).

Tôi đã có một số trang web nhận hack một vài lần, có Mercurial giúp tôi litterally undo hacks này bằng cách chỉ ra một hg update -Ctrong các máy chủ (tất nhiên bạn có thể muốn làm một hg statusvà có được các tập tin bị ảnh hưởng để phân tích sau).

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.