2015-07-23 10 views
9

मेरे पास S3 & क्लाउडफ्रंट में तैनात एक AngularJS ऐप है। Grunt & जेनकिंस के माध्यम से मेरी बिल्ड प्रक्रिया में मेरी स्क्रिप्ट & विक्रेता जेएस फाइलों के प्रत्येक नए संस्करण को विशिष्ट रूप से नामित करने के लिए एक फ़ाइलरिव चरण शामिल है। अंत में, FileRev मेरी स्क्रिप्ट & विक्रेता फ़ाइलों के नवीनतम संस्करण संस्करणों के संदर्भ में मेरे 'index.html' पृष्ठ टैग को भी अपडेट करता है।अमेज़ॅन क्लाउडफ्रंट वर्जनिंग 'index.html'

सभी बहुत अच्छा है, सिवाय ...

मैं कैसे CloudFront तुरंत अपने सभी किनारे स्थानों में 'index.html' रद्द करने के लिए मिलता है, प्रोग्राम के रूप में प्रत्येक रिलीज पर एक नया अमान्यकरण बनाने की कमी ??

धन्यवाद!

+0

आप index.html प्रत्येक रिहाई के लिए के रूप में अच्छी संस्करणीकृत है सकते हैं अगर आप अमान्य नहीं करना चाहते हैं। इस तरह के मामलों में प्रत्येक रिलीज पर आपके लोडबैंसर या प्रॉक्सी को नए index.html पर इंगित करने की आवश्यकता होगी, मैं केवल इस सर्कस को करने के बजाय index.html पर अमान्य कहूंगा, अन्य सभी UI संसाधनों के संस्करणों को अपडेट कर दूंगा। – Dhananjay

+1

क्लाउडफ्रंट https://docs.aws.amazon.com/cli/latest/reference/cloudfront/create-invalidation.html – JaredHatfield

+0

में index.html फ़ाइल को अमान्य करने के लिए कॉल करने के लिए आप AWS CLI का उपयोग करने के लिए जेनकींस को कॉन्फ़िगर कर सकते हैं @ EarlD आप इसे कैसे हल किया? –

उत्तर

2

यहां बताया गया है कि आप इस प्रोग्रामेटिक तरीके से कैसे कर सकते हैं। यह आपकी तैनाती स्क्रिप्ट का हिस्सा होना चाहिए। हम केवल उनके फ़ाइल नाम के माध्यम से index.html को अमान्य कर देंगे क्योंकि हम पहले से ही अन्य संसाधनों वर्ज़निंग रहे हैं:

const aws = require('aws-sdk') 

function invalidateIndex() { 
    const client = new aws.CloudFront({ 
    accessKeyId: process.env.AWS_ACCESS_ID, 
    secretAccessKey: process.env.AWS_SECRET_ACCESS_KEY, 
    }) 
    const invalidation = client.createInvalidation({ 
    DistributionId: process.env.AWS_CLOUDFRONT_DISTRIBUTION_ID, /* required */ 
    InvalidationBatch: { 
     /* required */ 
     CallerReference: Date.now() + '', /* required - request ID given by you, any string is okay*/ 
     Paths: { 
     /* required */ 
     Quantity: 1, /* required */ 
     Items: [ 
      '/', 
      /* more items */ 
     ] 
     } 
    } 
    }, function (err, data) { 
    if (err) console.log(err, err.stack); // an error occurred 
    else  console.log('Index was invalidated with invalidation id: ', data.Invalidation.Id);   // successful response 
    }) 
} 

invalidateIndex() 

आप API दस्तावेज़ यहाँ में और अधिक पढ़ सकते हैं: http://docs.aws.amazon.com/AWSJavaScriptSDK/latest/AWS/CloudFront.html#createInvalidation-property

+0

क्या आपको आइटम के रूप में /index.html निर्दिष्ट करने की आवश्यकता नहीं है? महान पोस्ट धन्यवाद। – Learner

+0

@Learner इसे 'आइटम: ['/'] द्वारा नियंत्रित किया जाता है। – amit

संबंधित मुद्दे