Làm cách nào để triển khai các ứng dụng (trong .tar.gz) với Puppet?


11

Tôi là người mới bắt đầu với Puppet và tôi muốn biết liệu tôi có đang đúng cách để triển khai các ứng dụng với Puppet không.

Các applciations nằm trong tệp tar.gz chứa tệp có số phiên bản. Vì vậy, tôi làm điều này để triển khai (tôi vào máy chủ và thực hiện khởi động lại máy khách để nhận tarball mới):

nodes.pp

node 'server1.domain.com' inherits basenode {
    apps { apps:
            version => 56,
            apps_name => "apps_tarball.tgz",
    }


init.pp (modules)

exec {"apps_wget":
            command => "/usr/bin/wget http://web_server/${version}-${apps_name} -O /tmp/${container_zip_name}",
            unless  => "test -f /tmp/${version}-${apps_name}",
            require => [ Package["wget"] ],
    }

exec {"apps_unzip":
            cwd     => "/usr/local/apps/path",
            command => "/usr/bin/unzip /tmp/${version}-${apps_name}",
            unless  => "test -f /usr/local/apps/path/apps-version-${version}",
            require => [ Package["unzip"], Exec["container_wget"] ],
    }

Nhưng, khi tôi muốn nâng cấp, tôi không biết nói Puppet để xóa thư mục cũ? Ví dụ: Nếu tôi muốn nâng cấp phiên bản 56 lên 57: Tôi phải xóa thư mục phiên bản 56.

Tôi đã nghe nói về Capristrano và có vẻ tốt hơn khi sử dụng Puppet cho các gói Manageinig, tệp cấu hình và sử dụng Capristrano để triển khai ứng dụng, phải không?

Cảm ơn.


Tôi sử dụng mô-đun forge.puppetlabs.com để quản lý tải xuống / giải nén / đặt những thứ chỉ có sẵn dưới dạng tarball. Nó hoạt động rất tốt.
jrjohnson

Câu trả lời:


0

Tôi muốn biết liệu tôi có đang đúng cách để triển khai các ứng dụng với Puppet không.

Không có bạn không phải là.

Bạn nên sử dụng quản lý gói có sẵn trên hệ điều hành của bạn. Nếu phần mềm của bạn ở tar.gzđịnh dạng, bạn nên tái gói nó tại địa phương như .deb, .rpmhoặc bất cứ điều gì.

Nếu phần mềm là thứ được phát triển cục bộ, bạn nên sử dụng bất kỳ công cụ xây dựng / triển khai nào có sẵn cho nó.


10
Trong một thế giới hoàn hảo, quản trị viên sẽ dành thời gian để tạo các gói từ tarball. Trong thế giới thực, kinh nghiệm của tôi đã cho thấy điều này không xảy ra. Khách hàng của chúng tôi cài đặt nhiều ứng dụng, đôi khi là các ứng dụng rất lớn, từ tarball và không có ý định thay đổi điều này.
EmmEff

4
@EmmEff Đó không phải là sự khác biệt giữa thế giới hoàn hảo và thế giới thực. Đó là một sự khác biệt giữa "Chúng tôi bị mắc kẹt với những cách cũ và không sẵn sàng cho quản lý cấu hình tự động" và những nơi quản lý cấu hình hoạt động. Tôi đã thấy cả hai - và thậm chí đã thấy cái sau biến thành cái trước với sự thay đổi của quản trị viên.
Daniel C. Sobral

5
Bạn có quyền ý kiến ​​của bạn. Những quan sát của tôi trong thế giới thực khác hơn thế.
EmmEff

13

Bạn có thể muốn thử sử dụng fpm để tạo RPM hoặc DEB của tarball của bạn; Nó thực sự đơn giản để sử dụng và bạn không cần phải hiểu bất cứ điều gì về các định dạng gói bạn không muốn.

Để trả lời câu hỏi ban đầu của bạn, cách đúng đắn để triển khai các ứng dụng với Puppet là làm cho Puppet thực hiện càng ít công việc càng tốt; bất kỳ exectài nguyên phức tạp nào tải xuống và trích xuất tarball đều bị ràng buộc là rất, rất dễ vỡ và làm cho Puppet chỉ là yum installmột gói có lợi cho sức khỏe lâu dài hơn.


Tôi biết những gì tôi đang làm là rất sai. Nhưng việc xây dựng vòng tua máy luôn khiến tôi sợ hãi. fpm là sự cứu rỗi của tôi. Cảm ơn bạn Handyman5. f-yeah
8 giờ

bình luận tuyệt vời. Thay vì rao giảng "sử dụng vòng / phút", bạn đã cung cấp một cách đơn giản "sử dụng vòng / phút giả và sử dụng công cụ đơn giản này để đạt được nó".
Andre de Miranda

6

Tôi sẽ rất cố gắng để đóng gói ứng dụng dưới dạng gói RPM hoặc .deb và xây dựng kho lưu trữ yum hoặc apt để giữ các gói. Việc đóng gói tarball hoặc zip mà bạn vừa mở vào một thư mục khá dễ dàng (nhưng nên là một câu hỏi riêng). Bao bì có sẵn theo cách đó theo dõi các phiên bản độc đáo và xử lý tất cả các loại mà chỉ cần mở một tarball sẽ không xử lý tốt.

Nếu tôi thực sự không thể xây dựng một gói phù hợp, tôi sẽ làm một cái gì đó như thế này:

hạch.pp:

node 'server1.domain.com' inherits basenode {
    apps { apps:
            version    => 56,
            oldversion => 55,
            apps_name  => "apps_tarball.tgz",
    }

init.pp (mô-đun):

file {
   [ "/usr/local/apps/path/apps-version-${oldversion}", "/tmp/${oldversion}-${apps_name}" ]:
            recurse => true,
            ensure  => absent;
}
exec {
      "apps_wget_${apps_name}":
            command   => "/usr/bin/wget http://web_server/${version}-${apps_name} -O /tmp/${container_zip_name}",
            logoutput => on_failure,
            creates   => "/tmp/${version}-${apps_name}",
            require   => [ Package["wget"] ];

      "apps_unzip_${apps_name}":
            cwd     => "/usr/local/apps/path",
            command => "/usr/bin/unzip /tmp/${version}-${apps_name}",
            creates => "/usr/local/apps/path/apps-version-${version}",
            require => [ Package["unzip"], Exec["container_wget"], Exec["apps_wget_${apps_name}] ];
}

Một cách khác là chỉ cần sử dụng tài nguyên con rối đệ quy như:

file {
    "/usr/local/apps/path/":
      source => "puppet:///modules/modulename/apps/path",
      ensure => directory,
      replace => true,
      purge   => true,
      recurse => true;
}

(trong đó bạn đã xác định chính xác mọi thứ trên máy chủ rối. Có lẽ cũng yêu cầu bất kỳ gói nào đang chạy dịch vụ và thông báo cho bất kỳ dịch vụ nào sắp hết).


0
file { "/usr/local/apps/path/apps-version-${old-version}":
    ensure => absent
}

Ở một khía cạnh khác, làm mọi thứ như những người thực thi là hơi xấu, và có thể khó khắc phục sự cố khi mọi thứ bắt đầu bị phá vỡ; nếu bạn có thể, có thể giữ các phiên bản trích xuất của tệp ứng dụng trên máy chủ con rối và sử dụng filetài nguyên đệ quy để truy xuất?


0

Tôi chắc chắn thích đóng gói tarball (RPM hoặc bất cứ điều gì), nhưng một vài gợi ý:

Để xóa phiên bản cũ, bạn chỉ cần xóa tất cả các phiên bản nhưng phiên bản bạn đang cài đặt. Với một bash và extglob đủ gần đây cho phép bạn có thể rm -r /usr/local/apps/path/apps-version-!(${version}). Cẩn thận với việc xóa các tập tin cấu hình và như vậy. Bạn có thể thực hiện exec refreshonly => truevà sau đó notifynó từ thực thi cài đặt.

Bạn có thể sử dụng createsthuộc tính thay vì unless => 'test -f ...'. Một nhưng dễ hiểu hơn.

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.