Bagaimana cara menyebarkan aplikasi (dalam .tar.gz) dengan Wayang?

11

Saya seorang pemula dengan Wayang dan saya ingin tahu apakah saya berada di jalan yang benar untuk menyebarkan aplikasi dengan Wayang.

Aplikasi berada dalam file tar.gz yang berisi file dengan nomor versi. Jadi, saya melakukan ini untuk menyebarkan (saya pergi di server dan melakukan restart klien untuk mengambil tarball baru):

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"] ],
    }

Tetapi, ketika saya ingin meningkatkan, saya tidak tahu mengatakan Wayang untuk menghapus direktori lama? Misalnya, Jika saya ingin memutakhirkan versi 56 ke 57: Saya harus menghapus direktori versi 56-an.

Saya mendengar tentang Capristrano dan tampaknya lebih baik menggunakan Wayang untuk paket pengelolaan, mengonfigurasi file, dan menggunakan Capristrano untuk menyebarkan aplikasi, bukan?

Terima kasih.

Richy
sumber
Saya menggunakan modul forge.puppetlabs.com untuk mengelola mengunduh / mendekompresi / menempatkan hal-hal yang hanya tersedia sebagai tarballs. Ini bekerja dengan baik.
jrjohnson

Jawaban:

0

Saya ingin tahu apakah saya berada di jalan yang benar untuk menyebarkan aplikasi dengan Wayang.

Tidak, Kamu tidak.

Anda harus menggunakan manajemen paket yang tersedia di sistem operasi Anda. Jika perangkat lunak Anda dalam tar.gzformat, Anda harus mengemasnya kembali secara lokal .deb, .rpmatau apa pun.

Jika perangkat lunak adalah sesuatu yang dikembangkan secara lokal, Anda harus menggunakan alat bantu build / deploy apa pun yang tersedia untuknya.

Daniel C. Sobral
sumber
10
Di dunia yang sempurna, admin akan meluangkan waktu untuk membuat paket dari tarbal. Di dunia nyata, pengalaman saya menunjukkan ini tidak terjadi. Klien kami memasang banyak aplikasi, terkadang aplikasi yang sangat besar, dari tarball dan tidak memiliki niat untuk mengubahnya.
EmmEff
4
@EmmEff Itu bukan perbedaan antara dunia yang sempurna dan dunia nyata. Itu perbedaan antara "Kami terjebak dengan cara lama dan tidak siap untuk manajemen konfigurasi otomatis" tempat dan tempat di mana manajemen konfigurasi bekerja. Saya telah melihat keduanya - dan bahkan melihat yang terakhir berubah menjadi yang pertama dengan perubahan admin.
Daniel C. Sobral
5
Anda berhak atas pendapat Anda. Pengamatan saya di dunia nyata berbeda dari itu.
EmmEff
13

Anda mungkin ingin mencoba menggunakan fpm untuk membuat RPM atau DEB dari tarbal Anda; ini sangat mudah digunakan, dan Anda tidak perlu memahami apa pun tentang format paket yang tidak Anda inginkan.

Untuk menjawab pertanyaan awal Anda, cara yang tepat untuk menyebarkan aplikasi dengan Wayang adalah membuat Wayang bekerja sesedikit mungkin; setiap execsumber daya rumit yang mengunduh dan mengekstrak tarbal pasti sangat, sangat rapuh, dan menjadikan Boneka hanya yum installsebuah paket yang jauh lebih sehat untuk jangka panjang.

Handyman5
sumber
Saya tahu apa yang saya lakukan sangat salah. Tapi membangun rpm selalu membuatku takut. fpm adalah keselamatan saya. Terima kasih Handyman5. i-iya.
8Tidak Ada 1
komentar yang bagus Daripada berkhotbah "gunakan rpm" Anda memberikan yang sederhana "gunakan rpm palsu dan gunakan alat sederhana ini untuk mencapainya".
Andre de Miranda
6

Saya akan berusaha sangat keras untuk membundel aplikasi sebagai paket RPM atau .deb dan membangun repositori yum atau apt untuk menampung paket-paket tersebut. Mengemas tarball atau zip yang baru saja Anda buka ke direktori cukup mudah (tetapi harus menjadi pertanyaan terpisah). Kemasan tersedia dengan cara melacak versi dengan baik dan menangani segala macam hal yang hanya membuka tarball tidak akan menangani dengan baik.

Jika saya benar-benar tidak bisa membangun paket yang tepat saya akan melakukan sesuatu seperti ini:

nodes.pp:

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

init.pp (modul):

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}] ];
}

Alternatif lain adalah dengan hanya menggunakan sumber daya boneka rekursif seperti:

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

(Di mana Anda sudah melakukan hal-hal yang tidak diar benar pada master boneka. Mungkin juga memerlukan paket apa pun yang menjalankan layanan dan memberitahukan layanan apa pun yang kehabisan).

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

Selain itu, melakukan segala sesuatu sebagai eksekutif agak jelek, dan bisa sulit untuk memecahkan masalah ketika hal-hal mulai rusak; jika Anda bisa, mungkin tetap mengekstraksi versi file aplikasi di server boneka, dan menggunakan filesumber daya rekursif untuk mengambil?

Shane Madden
sumber
0

Saya tentu saja suka mengemas tarball (RPM atau apa pun), tetapi beberapa petunjuk:

Untuk menghapus versi lama Anda cukup menghapus semua versi tetapi yang Anda instal. Dengan cukup bash dan ekstglob baru-baru ini diaktifkan Anda bisa rm -r /usr/local/apps/path/apps-version-!(${version}). Waspadalah terhadap penghapusan file konfigurasi dan semacamnya. Anda dapat membuat exec refreshonly => truedan kemudian notifydari eksekutif instalasi.

Anda bisa menggunakan createsatribut bukan unless => 'test -f ...'. A tetapi lebih dimengerti.

chutz
sumber