कठपुतली के साथ आवेदन (.tar.gz) को कैसे तैनात करें?


11

मैं कठपुतली के साथ शुरुआत कर रहा हूं और मैं जानना चाहूंगा कि क्या मैं कठपुतली के साथ आवेदन करने के लिए सही तरीके से हूं।

तालियाँ एक tar.gz फ़ाइल में होती हैं जिसमें संस्करण संख्या के साथ एक फ़ाइल होती है। इसलिए, मैं इसे परिनियोजित करने के लिए करता हूं (मैं सर्वर पर जाता हूं और नए टारबॉल को लेने के लिए क्लाइंट रिस्टार्ट करता हूं):

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

लेकिन, जब मैं अपग्रेड करना चाहता हूं, तो मुझे पुरानी निर्देशिका को हटाने के लिए कठपुतली कहने की ज़रूरत नहीं है? उदाहरण के लिए, यदि मैं संस्करण 56 से 57 को अपग्रेड करना चाहता हूं: मुझे 56 के संस्करण निर्देशिका को हटाना होगा।

मैंने Capristrano के बारे में सुना है और यह managinig संकुल के लिए कठपुतली का उपयोग करने के लिए बेहतर प्रतीत होता है, फाइलों को कॉन्फ़िगर करना और एप्लिकेशन को तैनात करने के लिए Capristrano का उपयोग करना, है ना?

धन्यवाद।


मैं मॉड्यूल forge.puppetlabs.com का उपयोग उन चीज़ों को डाउनलोड / डिकम्प्रेस करने / रखने के लिए करता हूं जो केवल टारबॉल के रूप में उपलब्ध हैं। यह बहुत अच्छा काम करता है।
jrjohnson

जवाबों:


0

मैं जानना चाहूंगा कि क्या मैं कठपुतली के साथ आवेदन करने के लिए सही रास्ते पर हूं।

नहीं आप नहीं हैं।

आपको अपने ऑपरेटिंग सिस्टम पर उपलब्ध पैकेज प्रबंधन का उपयोग करना चाहिए। यदि आपका सॉफ़्टवेयर tar.gzप्रारूप में है, तो आपको इसे स्थानीय रूप .debसे .rpmया जो भी हो , फिर से पैकेज करना चाहिए ।

यदि सॉफ़्टवेयर स्थानीय रूप से विकसित है, तो आपको इसके लिए जो भी निर्माण / तैनाती के उपकरण उपलब्ध हैं, उनका उपयोग करना चाहिए।


10
एक आदर्श दुनिया में, टैरेबल्स से पैकेज बनाने के लिए प्रवेश समय लगेगा। वास्तविक दुनिया में, मेरे अनुभव ने दिखाया है कि ऐसा नहीं होता है। हमारे ग्राहक कई एप्लिकेशन इंस्टॉल करते हैं, कभी-कभी बहुत बड़े एप्लिकेशन, टारबॉल से। और इसे बदलने का कोई इरादा नहीं है।
एम्मीफ

4
@EmmEff यह सही दुनिया और वास्तविक दुनिया के बीच का अंतर नहीं है। यही कारण है कि "हम पुराने तरीकों से चिपके हुए हैं और स्वचालित कॉन्फ़िगरेशन प्रबंधन के लिए तैयार नहीं हैं" स्थानों और स्थानों पर जहां कॉन्फ़िगरेशन प्रबंधन काम करता है। मैंने दोनों को देखा है - और यहां तक ​​कि बाद में पूर्व में प्रवेश को एक परिवर्तन के साथ देखा।
डैनियल सी। सोबरल

5
आपको अपनी राय का अधिकार है। वास्तविक दुनिया में मेरी टिप्पणियां इससे भिन्न हैं।
EmmEff

13

आप RPMs या अपने टारबॉल के DEBs बनाने के लिए fpm का उपयोग करने की कोशिश करना चाह सकते हैं ; यह वास्तव में उपयोग करने के लिए सरल है, और आपको उन पैकेज प्रारूपों के बारे में कुछ भी समझने की ज़रूरत नहीं है जो आप नहीं चाहते हैं।

अपने मूल प्रश्न का उत्तर देने के लिए, कठपुतली के साथ अनुप्रयोगों को तैनात करने का सही तरीका यह है कि कठपुतली को जितना संभव हो उतना कम काम करना चाहिए; execटारबॉल डाउनलोड करने और निकालने के लिए कोई भी जटिल संसाधन बहुत, बहुत भंगुर होने के लिए बाध्य हैं, और कठपुतली सिर्फ yum installएक पैकेज बनाने से बहुत लंबे समय तक स्वस्थ रहता है।


मुझे पता था कि मैं जो कर रहा था वह बहुत गलत था। लेकिन आरपीएम बिल्डिंग ने मुझे हमेशा डराया है। fpm मेरा उद्धार है। थैंक यू अप्रेंटिस ५। च-हाँ।
8 नं .1

महान टिप्पणी। "आरपीएम का उपयोग करें" का प्रचार करने के बजाय, आपने एक सरल "नकली आरपीएम का उपयोग करें और इसे प्राप्त करने के लिए इस सरल टूल का उपयोग करें"।
आंद्रे डी मिरांडा

6

मैं एक RPM या .deb पैकेज के रूप में ऐप को बंडल करने और पैकेज रखने के लिए yum या apt रिपॉजिटरी बनाने की बहुत कोशिश करूँगा। टारबॉल या जिप की पैकेजिंग जो आप अभी एक डायरेक्टरी में खोल रहे हैं वह बहुत आसान है (लेकिन एक अलग प्रश्न होना चाहिए)। उस तरह से उपलब्ध पैकेजिंग संस्करणों को अच्छी तरह से ट्रैक करती है और सभी प्रकार की चीजों को संभालती है जो सिर्फ एक टारबॉल को खोलती हैं, अच्छी तरह से संभाल नहीं पाएंगी।

अगर मैं वास्तव में एक उचित पैकेज नहीं बना पाता तो मैं ऐसा कुछ कर सकता हूं:

nodes.pp:

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

init.pp (मॉड्यूल):

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

एक अन्य विकल्प बस पुनरावर्ती कठपुतली संसाधन का उपयोग करना है:

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

(जहां आपने कठपुतली मास्टर पर सही ढंग से पहले से ही असत्य चीजें लगाई हैं। संभवतः सेवा को चलाने के लिए जो भी पैकेज चाहिए और जो भी सेवा चल रही है उसे सूचित करें।)


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

एक तरफ के रूप में, सब कुछ निष्पादित के रूप में थोड़े बदसूरत है, और जब चीजें टूटने लगती हैं तो उनका निवारण करना कठिन हो सकता है; यदि आप कर सकते हैं, तो शायद कठपुतली सर्वर पर ऐप फ़ाइलों के निकाले गए संस्करण, और fileपुनः प्राप्त करने के लिए पुनरावर्ती संसाधन का उपयोग करें ?


0

मैं निश्चित रूप से टारबॉल (आरपीएम या जो भी) की पैकेजिंग का पक्ष लेता हूं, लेकिन कुछ संकेत:

पुराने संस्करण को हटाने के लिए आप सभी संस्करणों को हटा सकते हैं लेकिन जिसे आप इंस्टॉल कर रहे हैं। हाल ही में पर्याप्त बैश और एक्सग्लोब सक्षम होने के साथ आप कर सकते हैं rm -r /usr/local/apps/path/apps-version-!(${version})। कॉन्फ़िगर फ़ाइलों और इस तरह से मिटा देने से सावधान रहें। आप इसे कर सकते हैं exec refreshonly => trueऔर फिर notifyइसे इंस्टॉलेशन एक्जीक्यूट से।

आप createsइसके बजाय विशेषता का उपयोग कर सकते हैं unless => 'test -f ...'। एक लेकिन अधिक समझ में आता है।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.