Làm thế nào để bạn cập nhật các trang web trực tiếp với thay đổi mã?


21

Tôi biết đây là một câu hỏi rất cơ bản. Nếu ai đó có thể hài hước với tôi và cho tôi biết họ sẽ xử lý việc này như thế nào, tôi sẽ rất tuyệt.

Tôi quyết định đăng bài này vì tôi sắp cài đặt SynchToy để khắc phục sự cố bên dưới và tôi cảm thấy hơi thiếu chuyên nghiệp khi sử dụng "Đồ chơi" nhưng tôi không thể nghĩ ra cách nào tốt hơn.

Nhiều lần tôi tìm thấy khi tôi ở trong tình huống này, tôi đang bỏ lỡ một cách rõ ràng đau đớn để làm mọi việc - điều này xuất phát từ việc là nhà phát triển duy nhất trong công ty.

  • Ứng dụng web ASP.NET được phát triển trên máy tính của tôi tại nơi làm việc
  • Giải pháp có 2 dự án:
    • Trang web (tập tin)
    • Trang webLib (C # / dll)
  • Sử dụng kho Git
  • Đã triển khai trên máy chủ web GoGrid 2008R2

Triển khai:

  1. Thực hiện thay đổi mã.
  2. Đẩy đến Git.
  3. Máy tính từ xa đến máy chủ.
  4. Kéo từ Git.
  5. Ghi đè các tệp trực tiếp bằng cách kéo / thả bằng windows explorer.

Ở Bước 5 tôi xóa tất cả các tệp khỏi thư mục gốc của trang web .. đây không phải là một việc nên làm. Đó là lý do tôi chuẩn bị cài đặt SynchToy ...

CẬP NHẬT: CẢM ƠN tất cả các phản hồi hữu ích. Tôi không thể chọn câu hỏi nào để đánh dấu câu trả lời - giữa việc sử dụng triển khai web - có vẻ như tôi có một số suggesitons hữu ích:

  1. Dự án web = toàn bộ trang web được đóng gói thành một DLL duy nhất - đối với tôi, tôi không thể đẩy các bản cập nhật đơn giản - là nhà phát triển đơn độc trong một công ty 50, đôi khi điều này vẫn đơn giản hơn.
  2. Kéo thẳng từ SCM vào trang web gốc của trang web - ban đầu tôi không làm điều này vì sợ rằng thư mục ẩn SCM của tôi có thể bị lộ, nhưng câu trả lời ở đây đã giúp tôi vượt qua điều đó (mặc dù tôi vẫn không thích có điều đáng lo ngại hơn về việc quên để đảm bảo vẫn còn đúng theo thời gian)
  3. Sử dụng trang trại web và triển khai một cách có hệ thống đến các nút - đây là giải pháp lý tưởng cho thời gian chết bằng không, đây thực sự là điều tôi quan tâm vì trang web về cơ bản là nguồn doanh thu theo thời gian thực cho công ty của tôi - tôi có thể khó thuyết phục họ gấp đôi chi phí của các máy chủ mặc dù.

-> cuối cùng, việc thực thi lại hiệu trưởng cơ bản cần có một triển khai một lần nhấp cho trang web HOẶC ELSE THOM SOMETHING WRONG có lẽ là điều hữu ích nhất tôi nhận được từ các câu trả lời.

CẬP NHẬT 2: Tôi nghĩ rằng tôi đã quay lại vấn đề này và cập nhật với giải pháp thực tế đã có từ nhiều tháng nay và đang hoạt động hoàn hảo (đối với giải pháp máy chủ web duy nhất của tôi).

Quá trình tôi sử dụng là:

  1. Thay đổi mã
  2. Đẩy đến Git
  3. Máy tính từ xa đến máy chủ
  4. Kéo từ Git
  5. Chạy tập lệnh bó sau:

    cd C: \ Users \ Administrator

    % systemroot% \ system32 \ inetsrv \ appcmd.exe dừng trang web "/site.name:Default Trang web"

    Tài liệu robocopy \ code \ da \ 1 \ work \ Tree \ LendingTreeWebSite1 c: \ inetpub \ wwwroot / E / XF linksconfig Web.config

    % systemroot% \ system32 \ inetsrv \ appcmd.exe trang web bắt đầu "/site.name:Default Web Site"

Như bạn có thể thấy điều này làm giảm trang web, sử dụng robocopy để sao chép thông minh các tệp đã thay đổi sau đó đưa trang web trở lại. Nó thường chạy trong ít hơn 2 giây. Vì lưu lượng truy cập cao nhất trên trang web này là khoảng 2 yêu cầu mỗi giây, thiếu 4 yêu cầu cho mỗi lần cập nhật trang web là chấp nhận được.

Sine Tôi đã thành thạo hơn với Git Tôi đã thấy rằng bốn bước đầu tiên ở trên là "quy trình thủ công" cũng có thể chấp nhận được, mặc dù tôi chắc chắn rằng tôi có thể cuộn toàn bộ mọi thứ vào một cú nhấp chuột nếu tôi muốn.

Tài liệu về AppCmd.exe có ở đây . Các tài liệu cho Robocopy là ở đây .


6
Phù hợp hơn cho serverfault.
Karl Bielefeldt

Bạn nên xem xét SSH vào máy chủ của mình thay vì sử dụng máy tính để bàn từ xa, theo cách đó bạn có thể viết kịch bản triển khai nếu muốn.
Malfist

5
Tôi nghĩ rằng câu hỏi này là tốt để ở đây. Đối với tôi, việc triển khai một trang web dường như là một nhà phát triển quan tâm nhiều hơn một công việc sysadmin, mặc dù tôi đoán rằng điều đó có thể thay đổi theo công ty. Tuy nhiên, tất cả các câu trả lời cho đến nay tập trung vào nhà phát triển.
Adam Lear

1
@Malfist - Làm thế nào chính xác một ssh vào máy chủ windows?
Wyatt Barnett

@Wyatt Bằng cách chạy máy chủ SSH trên máy từ xa, (gần như) giống như bạn làm trên hộp Linux.
Adam Lear

Câu trả lời:


3

Bạn nên xem triển khai web của VS 2010. Nếu GoGrid hỗ trợ nó, gói triển khai web là một giải pháp tốt.

http://weblogs.asp.net/scottgu/archive/2010/07/29/vs-2010-web-deployment.aspx


Khi bạn sử dụng triển khai web, bạn sẽ mất tùy chọn vào hotfix, phải không? Tôi biết có nhiều người không muốn làm gì đó ngoài quy trình chính thức nhưng tôi thích có tùy chọn cho trường hợp khẩn cấp ...
Aaron Anodide

Bạn làm, điểm tốt. Tôi biết tại công ty của mình, chúng tôi không muốn mọi người làm điều đó, bởi vì chúng tôi không thể theo dõi các thay đổi. Đối với các trang cá nhân tôi thực sự thực sự thích có tùy chọn đó mặc dù.
Nate

3

Ở chủ nhân trước của tôi, để triển khai thay đổi mã, chúng tôi sẽ đặt bộ cân bằng tảiđể dừng dịch vụ đến một máy chủ web. Có thể mất 20 phút để các phiên trên máy chủ web đầu tiên hết hạn. Chúng tôi sẽ cập nhật mã trên máy chủ web đó bằng cách giải nén tệp zip triển khai, sau đó kiểm tra xem mọi thứ có ổn không bằng cách nhấn địa chỉ IP trực tiếp cho máy chủ web đầu tiên đó. Khi chúng tôi tin rằng nó hoạt động tốt, sau đó chúng tôi sẽ đặt bộ cân bằng tải để đánh vào máy chủ web đã cập nhật và chờ các phiên hết hạn trên một máy chủ khác và sau đó cập nhật cái đó (và cứ thế cho đến khi tất cả chúng được cập nhật). Sau khi họ kiểm tra ok, chúng tôi sẽ thiết lập bộ cân bằng tải để quay trở lại thực hiện công việc của mình. Điều này trở nên phức tạp khi chúng tôi có tới 10 máy chủ web được kết nối với bộ cân bằng tải trong thời gian tải theo mùa cao điểm (vì vậy việc cập nhật từng cái một có thể mất hàng giờ vì chúng tôi không thể tắt trang web trực tiếp - khách hàng phải có được vào trang web).

Trong ASP.NET, nếu bạn thả bất kỳ tệp nào có tên App_Offline.htmvào thư mục gốc của trang web, thì websiten sẽ dỡ tải, sau đó sẽ cho phép bạn cập nhật DLLS (và bất cứ điều gì). IIS sẽ phục vụ một trang có tiêu đề "Ứng dụng ngoại tuyến". Khi tệp bị xóa, đổi tên hoặc xóa, ứng dụng web sẽ khởi động lại và IIS sẽ phục vụ các trang web đến trang web đó. Đây là những gì Visual Studio làm khi bạn xuất bản một trang web từ bên trong VS.


2

Thông thường những gì tôi làm là tôi giữ mọi thứ trong kho SVN. Khi tôi hoàn thành một số thay đổi, tôi cam kết trên trang dev và sau đó kiểm tra sản xuất. Giữ mọi thứ được đồng bộ hóa, nó nhanh chóng và dễ dàng. Nếu việc kiểm tra quá nhiều rắc rối, bạn có thể thiết lập Apache với WebDAV và nó sẽ làm điều đó cho bạn.


Bạn có lo lắng về những thứ như thư mục .svn hiện diện trang web trực tiếp của bạn không?
Aaron Anodide

Không thực sự, apache thường được thiết lập để từ chối truy cập vào các thư mục đó.
Malfist

IIS cũng từ chối .svn (hoặc .git hoặc .hg).
Wyatt Barnett

Nếu người dùng độc hại có quyền truy cập vào thư mục, anh ấy / cô ấy sẽ có quyền truy cập vào tất cả các mã ở trạng thái rõ ràng.
oleksii

5
Nếu người dùng độc hại có quyền truy cập vào hệ thống tệp của bạn, bạn có nhiều điều phải lo lắng hơn.
Malfist

2

Đối với mỗi ứng dụng web của tôi, tôi có một thiết lập kho git với ba nhánh. Trực tiếp, Beta, Tính năng. Sống tất nhiên là trang web trực tiếp. Beta là trang web được sử dụng để sửa lỗi hoặc để thử nghiệm các tính năng cuối cùng ngay trước khi triển khai. Sau đó, như bạn đã nói, tôi thực hiện một thao tác git đơn giản, git kéo trực tiếp để kéo thông tin vào. Các tính năng được sử dụng cho các cải tiến "phiên bản tiếp theo".


Điều này cũng hoạt động với hầu hết các hệ thống kiểm soát nguồn.
deadalnix

2

Bạn đang cố gắng giải quyết vấn đề giao hàng liên tục . Ban đầu bạn sẽ bắt đầu với các bước thủ công, nhưng chẳng mấy chốc bạn sẽ nhận ra vấn đề. Đây là những cái phổ biến nhất:

  1. Mã hoạt động trên PC của bạn, không hoạt động trên sản xuất
  2. Thay đổi mới phá vỡ mã cũ
  3. Thay đổi tăng dần sẽ làm cho việc triển khai ngày càng khó hơn, bạn sẽ có các thư viện mới để đính kèm, các bản vá để áp dụng, v.v.

Hãy xem TeamCity (hoặc bất kỳ công cụ tương tự).


2

Sử dụng tập lệnh xây dựng và triển khai tự động

Cách tốt nhất để làm điều đó là sử dụng Tập lệnh xây dựng và triển khai tự động như MsBuild hoặc Nant.

Lý do là bạn có thể chỉ cần gõ lệnh 1 để tung ra một trang web và sau đó chỉ cần gõ lệnh 1 để cuộn lại. Và nếu bạn đủ kỹ lưỡng, điều này sẽ bao gồm việc di chuyển lược đồ cơ sở dữ liệu của bạn. (Migrator.Net)

Một trong những lý do chính không sử dụng SVN hoặc GIT để triển khai là môi trường có thể thay đổi giữa sản xuất và dàn dựng. Trong tập lệnh NANT của bạn, bạn có thể yêu cầu nó xây dựng các tệp .config dành riêng cho môi trường mà bạn đang nhắm mục tiêu. Điều này tiết kiệm việc quên nhập cài đặt cấu hình trong sản xuất.

Nó cũng tự động hóa toàn bộ quá trình để nó trở thành một lệnh và bất kỳ số lượng quy trình thủ công nào cũng trở thành 1 quy trình đơn giản.


1

Trước hết, bạn nên sử dụng một dự án web. Sự khác biệt bạn yêu cầu là gì?

Một dự án web sẽ kết hợp tất cả các tệp lớp C # (bao gồm mã phía sau) vào một DLL duy nhất (tốt hơn cho bảo mật và thực tế đó là một tệp để di chuyển)

Thứ hai, bạn nên xuất bản ứng dụng và sau đó bạn vẫn có thể điều khiển máy tính từ xa, kéo tất cả các tệp trong thư mục xuất bản của bạn và chỉ cần đặt nó thành ghi đè (các tệp mới sẽ thay thế các tệp cũ).

Xuất bản sẽ đặt tất cả các tệp cần thiết cho ứng dụng trong một thư mục.


1

Chủ nhân hiện tại của tôi triển khai bằng cách sử dụng con rối . (Dưới đây là nhiều gói phần mềm giải quyết cùng một vấn đề.)

Chủ nhân trước đây của tôi đã sử dụng một hệ thống kiểm soát công việc tùy chỉnh để xử lý phần mềm triển khai, khởi động lại, v.v. Ngay cả khi nó có sẵn, nó vẫn quá mức cho nhu cầu của bạn.

Nhà tuyển dụng mà tôi có trước đó đã có các tập lệnh tùy chỉnh để sao chép dữ liệu từ lật đổ ra máy chủ và thực hiện khởi động lại.

Một số nơi tôi thấy trước đó đã tạo các tệp để quản lý việc triển khai. Họ thường sử dụng một chiến lược như cắt một nửa máy chủ web khỏi bộ cân bằng tải, chờ, dừng một nửa, cuộn mã, khởi động lại, sau đó lật bộ cân bằng tải, chờ, dừng nửa kia, khởi động lại, sau đó đưa bộ cân bằng tải trở lại lên.

Tại tất cả các nơi tôi đã làm việc, việc đưa ra mã là một lệnh duy nhất hoặc thiếu nó là một lệnh duy nhất được công nhận là một vấn đề cần khắc phục.


1

Thông thường những gì chúng tôi sử dụng để giải quyết vấn đề này với các trang web của chúng tôi là một công cụ đi kèm với Hệ thống thực tế được gọi là đường giao nhau.

Sử dụng công cụ này, chúng tôi có thể tạo liên kết từ thư mục này sang thư mục khác. Ứng dụng gốc trên máy chủ chứa 3 thư mục. Đỏ, Xanh, Hiện tại. IIS được cấu hình để luôn luôn xem Hiện tại cho các tệp của nó.

Bạn có thể ra lệnh junction current sẽ cho bạn biết thư mục hiện tại đang được trỏ đến. Nói ví dụ rằng nó hiện đang chỉ vào Blue. Những gì chúng ta sẽ làm là xếp hàng các tệp màu Đỏ để triển khai mới và đảm bảo tất cả cấu hình đã sẵn sàng hoạt động.

Khi chúng tôi sẵn sàng, chúng tôi có thể ra lệnh junction current red để có điểm đó.

Có hai điều làm cho giải pháp này trở nên tuyệt vời

1) Bạn có toàn bộ thời gian trên thế giới để xếp hàng các thay đổi của bạn trong thư mục. Không vội vàng và thời gian xuống duy nhất là khi nhóm ứng dụng đang quay cuồng. (Có một cách để biên dịch trước bước này.)

2) Nếu có vấn đề với việc triển khai của bạn, tất cả những gì bạn phải làm để quay lại là đưa ra lệnh thay vì cố gắng hoàn nguyên các thay đổi. Lệnh trong trường hợp của chúng tôi sẽ làjunction current blue

Hy vọng rằng cách làm việc của chúng tôi có thể làm sáng tỏ một giải pháp mới cho bạn.


0

Những gì tôi đã làm và tôi không chắc nếu bạn có phạm vi cho việc này, nhưng ở đây đi. Một nhà phát triển sẽ kiểm tra mã vào một nhánh QA, sau đó nó sẽ được một kỹ sư hệ thống nạp vào môi trường QA, một khi nó đã vượt qua QA, nó sẽ được thăng cấp lên nhánh sản xuất. Có ít nhất 2 trong số tất cả các trang web được kết nối với một máy chủ theo tỷ lệ cân bằng tải và phát sinh trong trường hợp này, một trong hai máy chủ sẽ bị ngoại tuyến, iis sẽ bị dừng trang web và trang web mới sẽ được triển khai cùng với mọi thay đổi cần thiết iis sau đó sẽ được khởi động lại và sau đó bạn sẽ chuyển sang máy chủ tiếp theo. Tất cả điều này đã được viết kịch bản bằng C # trong trường hợp của chúng tôi nhưng nó đã được thực hiện trong quá khứ bằng cách sử dụng tập lệnh vb. Tôi hy vọng điều đó sẽ giúp. Chúc mừ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.