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ả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
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
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