2011-11-22 21 views
5

Tôi đã tự hỏi làm cách nào để triển khai các dự án web của mình bằng ftp và/hoặc ssh.Jenkins: Triển khai FTP/SSH, bao gồm xóa và di chuyển các tệp

Hiện tại chúng tôi có hệ thống triển khai tự thực hiện có thể xử lý việc này, nhưng tôi muốn chuyển sang Jenkins.

Tôi biết có các plugin xuất bản và chúng hoạt động tốt khi tải lên các tạo phẩm xây dựng. Nhưng họ không thể xóa hoặc di chuyển tệp.

Bạn có bất kỳ gợi ý, tipps hoặc ý tưởng nào liên quan đến vấn đề của tôi không?

Trả lời

2

Plugin Publish Over SSH cho phép bạn gửi lệnh bằng ssh tới máy chủ từ xa. Điều này làm việc rất tốt, chúng tôi cũng thực hiện một số di chuyển/xóa các tập tin trước khi triển khai phiên bản mới, và không có vấn đề gì bằng cách sử dụng phương pháp này.

+0

Cảm ơn, điều đó có thể sẽ giúp tôi với các máy chủ ssh của tôi. được di chuyển/xóa? Git chắc chắn biết điều đó, nhưng làm thế nào để tích hợp nó trong tiến trình triển khai? – 4eyes

+0

Nếu các tệp bạn quan tâm trong việc di chuyển/xóa đã có trong git, bạn chỉ có thể sao chép repo của mình trên các máy chủ triển khai và sử dụng dòng lệnh git để kéo các thay đổi bằng cách sử dụng xuất bản trên ssh. Đây có thể là một cách tốt để đi nếu bạn có các tệp tĩnh, không cần phải được biên soạn hoặc kiểm tra, chỉ cần triển khai. Có lẽ sẽ làm việc tốt nhất nếu bạn có repos riêng biệt cho mã nguồn và các tập tin tĩnh. – pushy

+0

Cảm ơn. Dự án của chúng tôi là tất cả các tệp "tĩnh" khi chúng tôi phát triển phần mềm dựa trên php (TYPO3). Tôi biết rằng tôi có thể lấy các tệp đã di chuyển/xóa bằng git, thực ra đó là những gì chúng tôi đã làm trong hệ thống triển khai dựa trên phing đơn giản của riêng chúng tôi. Tôi chỉ ngạc nhiên, rằng có vẻ như không phải là một plugin bao gồm triển khai ftp/ssh sạch và hiệu quả. Tôi tự hỏi làm thế nào các công ty khác triển khai các dự án web của họ, họ không sử dụng ftp (s)? Hoặc chỉ cần lưu trữ tùy chỉnh đắt hơn với ssh và/hoặc git trên máy chủ trực tiếp? – 4eyes

1

Cách dễ nhất để xử lý việc xóa và di chuyển các mục là xóa mọi thứ trên máy chủ trước khi bạn triển khai bản phát hành mới bằng một trong các tiện ích 'Publish over'. Tôi muốn nói rằng thực sự là cách duy nhất để biết phiên bản được triển khai là phiên bản bạn muốn. Nếu bạn muốn có nhiều hành vi kiểu hệ thống phiên bản hơn, bạn cần phải sử dụng hệ thống phiên bản hoặc có thể rsync sẽ bao gồm một phần của nó.

Nếu nhu cầu của bạn rất cụ thể, bạn có thể phát triển quy ước của riêng mình để đánh dấu xóa và yêu cầu chúng được thực hiện bằng một tập lệnh riêng biệt (giống như bạn thay đổi cơ sở dữ liệu bằng Liquibase hoặc tương tự).

Nhân tiện: Tôi khuyên bạn không nên tự động cập nhật các trang web trực tiếp của mình sau mỗi lần tạo bằng cách sử dụng tiện ích 'xuất bản lên ...'. Trong trường hợp chúng tôi thực sự muốn có một trang web trực tiếp tự động cập nhật, chúng tôi dựa trên các Promoted Builds Plugin để giữ cho nó gần như hoàn toàn tự động nhưng thêm một chút an toàn.

+0

Cảm ơn bạn Simone cho lời khuyên của bạn, tôi sẽ kiểm tra plugin xây dựng được quảng bá. Dù sao, nó chỉ không có ý nghĩa với tôi, tại sao tôi cần tải lên một trang web hoàn chỉnh, khi tôi chỉ đơn giản là thay đổi một chút css hoặc cố định một lỗi trong một kịch bản. Bằng cách nào đó, tôi dường như chỉ có một vấn đề này hoặc tất cả mọi người khác hoặc triển khai các dự án trang web của họ để lưu trữ fancier (ssh/git) hoặc không sử dụng triển khai tự động. – 4eyes

0

Tôi đã đưa ra một giải pháp đơn giản để xóa các tệp đã xóa và tải thay đổi lên máy chủ FTP từ xa dưới dạng tác vụ xây dựng trong Jenkins bằng cách sử dụng tập lệnh gương lftp đơn giản. Lftp Manual Page

Tóm lại, bạn tạo tệp cấu hình trong thư mục người dùng jenkins ~/.netrc và điền thông tin đăng nhập FTP của bạn.

machine ftp.remote-host.com 
login mySuperSweetUsername 
password mySuperSweetPassword 

Tạo một kịch bản lftp deploy.lftp và thả nó trong thư mục gốc của repo git của bạn

set ftp:list-options -a 
set cmd:fail-exit true 
open ftp.remote-host.com 
mirror --reverse --verbose --delete --exclude .git/ --exclude deploy.lftp --ignore-time --recursion=always 

Sau đó, thêm một "Exec Shell" xây dựng hành động để thực hiện lftp trên kịch bản.

lftp -f deploy.lftp 

Kịch bản lftp sẽ

  • gương: sao chép tất cả các file đã thay đổi
  • ngược lại: đẩy các file cục bộ đến một máy chủ từ xa. một chiếc gương thông thường kéo từ máy chủ từ xa đến địa phương.
  • verbose: đổ tất cả các ghi chú về những tập tin đã được sao chép ở đâu để xây dựng log
  • xóa: xóa các tập tin từ xa không còn hiện diện trong repo git
  • loại trừ: không công bố thư mục .git hoặc triển khai. kịch bản lftp.
  • bỏ qua thời gian: sẽ không xuất bản dựa trên thời gian tạo tệp. Nếu bạn không có điều này, trong trường hợp của tôi, tất cả các tệp đã được xuất bản kể từ khi một bản sao mới của git repo cập nhật tệp tạo dấu thời gian. Nó vẫn hoạt động khá tốt mặc dù và ngay cả các tập tin được sửa đổi bằng cách thêm một không gian duy nhất trong chúng được xác định là khác nhau và được tải lên.
  • đệ quy: sẽ phân tích mọi tệp thay vì tùy thuộc vào thư mục để xác định xem có tệp nào có thể sửa đổi được hay không. Điều này không cần thiết về mặt kỹ thuật vì chúng tôi bỏ qua tem thời gian nhưng dù sao tôi cũng có nó ở đây.

Tôi đã viết một bài viết giải thích cách tôi keep FTP in sync with Git cho trang web WordPress tôi chỉ có thể truy cập qua FTP. Bài viết giải thích cách đồng bộ từ FTP sang Git sau đó cách sử dụng Jenkins để xây dựng và triển khai trở lại FTP. Cách tiếp cận này không hoàn hảo nhưng nó hoạt động. Nó chỉ tải lên các tệp đã thay đổi và nó xóa các tệp khỏi máy chủ đã bị xóa khỏi git repo (và ngược lại)

Các vấn đề liên quan