एक Jenkins निर्माण दास में npm कैश को सक्षम करने के लिए कैसे करें?


13

मेरे पास एक डॉकर छवि है, चलो इसे कॉल करते हैं frontend.image, जो कि मैं जेनकिंस के गुलाम बनाने के लिए उपयोग करता हूं। जेनकिंस डॉकर प्लगइन इस छवि से एक कंटेनर को स्पिन करेगा और कंटेनर के अंदर कलाकृतियों का निर्माण करेगा। यह सब बहुत अच्छा काम करता है। इस मामले में, frontend.imageएक AngularJs ऐप बनाने के लिए उपयोग किया जाता है। इस एंगुलर ऐप को बनाने का एक हिस्सा एनपीएम पैकेज इंस्टॉल करना है, जिसके लिए ऐप की आवश्यकता होती है।

यह प्रक्रिया, npm स्थापित, एक लंबा समय लगता है, 3 मिनट ऐसा लगता है, npm हमेशा हर बार हर पैकेज को स्थापित करता है।

इसलिए मैंने अपने गुलाम के लिए एक वॉल्यूम जोड़ा, यह एक होस्ट माउंटेड वॉल्यूम है, डॉकर प्लगइन इस वॉल्यूम का उपयोग हर बार फ्रंटएंड कंटेनर को चलाने में करेगा:

यहाँ छवि विवरण दर्ज करें

कमांड निष्पादित करने वाला उपयोगकर्ता npm installहै jenkins। npm एक कैश रखता है जिसे आप कमांड के साथ पा सकते हैं npm config get cacheजो आउटपुट देता है/home/jenkins/.npm

यही कारण है कि मेरे पास होस्ट वॉल्यूम /slaves/volumes/tsl.frontend:/home/jenkinsमेरे वेब कंटेनर स्लेव के लिए है।

मैं जेनकिन्स परियोजना का उपयोग करके अपने कोणीय ऐप का निर्माण करता हूं, कोई समस्या नहीं बनाता है, कई एनपीएम पैकेज स्थापित होते हैं। अगर मेरे डॉकर होस्ट में ssh और cmd चलाते हैं तो ls /slaves/volumes/tsl.frontendमुझे बहुत सारे npm पैकेज मिलते हैं। इसका मतलब है कि गुलाम के लिए मेरा होस्ट वॉल्यूम माउंट है। यहाँ छवि विवरण दर्ज करें

अब मैं जेनकिंस परियोजना का निर्माण फिर से करता हूं, एनपीएम हर एक पैकेज को फिर से स्थापित करता है, भले ही डॉकर दास बिल्ड कंटेनर वॉल्यूम होस्ट माउंट का उपयोग कर रहा हो। मैं भी cmd docker exec -it <some_clever_random_container_id> bashतो cmd के साथ दास कंटेनर में को कोसने से पुष्टि कर सकता हूँ su jenkinsतो cmd npm cache lsजो कई npm पैकेजों को सूचीबद्ध करता है जो कैश होते हैं। यहाँ छवि विवरण दर्ज करें

इसलिए, मेरे होस्ट माउंट वॉल्यूम के साथ, जिसकी अनुमति अनुमतियाँ भी हैं chmod 777ताकि कोई समस्या न हो, मुझे npm installकैश का उपयोग करने की अनुमति नहीं मिल सकती है ।

मेरे जेनकींस बिल्ड में, जो डॉकर स्लेव कंटेनर में घूमता है, पहला सेमी मैं चलता हूं npm cache lsऔर कई पैकेज सूचीबद्ध हैं, इसका मतलब यह नहीं है कि मेरा होस्ट वॉल्यूम अपेक्षित रूप से काम कर रहा है और एनपीएम कैश इंडेक्स अखंडता उर्फ ​​भ्रष्ट नहीं है?

यहाँ छवि विवरण दर्ज करें

मैंने नियमित npm installसीएमडी की कोशिश की है , जो, जब मैं अपने लोकलहोस्ट मशीन पर चलाता हूं, तो पहली बार सभी पैकेज स्थापित करता है और अगली बार लगभग कोई पैकेज नहीं। और यह भी npm कैश "हैक" npm --cache-min 9999999 install, इस एसओ उत्तर के साथ ही cmd से लिया गयाnpm --skip-installed --cache-min 9999999 install

एक संबंधित प्रश्न StackOverflow पर पोस्ट किया गया था।


मैं शर्त लगाता हूं कि कैश इंडेक्स ~ विवरण के अनुसार ~ / .npm पर संग्रहीत नहीं किया जाता है
Tensibai

@ टेंसिबाई आप गलत हैं और मैं इस बारे में बहुत आश्वस्त हूं, उपयोगकर्ता जेनकिंस है, क्योंकि आप दूसरे तरीके से यही कह रहे हैं, क्योंकि मैं जेपीएन उपयोगकर्ता के रूप में एनपीएम कैश लेस चलाता हूं और जो संकुल को सूचीबद्ध करता है, आप कह रहे हैं कि पीपीएम इंस्टॉल है। किसी अन्य उपयोगकर्ता द्वारा निष्पादित किया जा रहा है
ब्रायन ओग्डेन

नहीं, मैं कह रहा हूं कि इंडेक्स स्वयं कहीं और / usr / लोकल में संग्रहीत है या जो भी रास्ता npm या whatelse में स्थापित है, मुझे कोई पता नहीं है। यह सिर्फ ऐसा लगता है जैसे npm अभिनय कर रहा है जैसे कि कैश में कुछ भी नहीं था, इसलिए मुझे लगता है कि यह निर्देशिका को सूचीबद्ध नहीं करता है लेकिन किसी अन्य प्रकार के सूचकांक पर खुद को आधार बनाता है।
तन्निबाई

@Tensibai लेकिन cmd npm कॉन्फिगर को कैश रिटर्न /home/jenkins.npm मिलता है क्योंकि क्या आपको लगता है कि कैश के स्थान की पुष्टि नहीं करता है?
ब्रायन ओग्डेन

कैश का स्थान हां, जो कि कैश इंडेक्स को लागू नहीं करता है, बिल्कुल उसी स्थान पर है। मैं एक जोड़ना होगा npm cache lsऔर एक कच्चे ls ~/.npm/* -alजब निर्माण शुरू करने का निर्माण स्क्रिप्ट ही किसी अन्य निर्माण कदम से पहले में सिर्फ कंटेनर के राज्य सुनिश्चित करने के लिए।
तन्निबाई

जवाबों:


5

मैंने आखिरकार इस उत्तर का अनुसरण करते हुए npm इंस्टाल के लिए डॉकर इमेज लेयर कैशिंग का उपयोग करके इसे हल किया

इसका मतलब यह है कि मैंने Dpmer स्लेव इमेज से बाहर npm को इनस्टॉल किया और वास्तव में फ्रंटएंड इमेज में, यहाँ मेरी डॉक डॉक फाइल है जो कि पैकेज के बीच में npm को इनस्टॉल करता है अगर पैकेज में कोई बदलाव नहीं हुआ है:

FROM centos:7
MAINTAINER Brian Ogden

# Not currently being used but may come in handy
ARG ENVIRONMENT
ENV NODE_VERSION 6.11.1

RUN yum -y update && \
    yum clean all && \
    yum -y install http://nginx.org/packages/centos/7/noarch/RPMS/nginx-release-centos-7-0.el7.ngx.noarch.rpm \
    yum -y makecache && \
    yum -y install nginx-1.12.0 wget

# Cleanup some default NGINX configuration files we don’t need
RUN rm /etc/nginx/conf.d/default.conf

#############################################
# NodeJs Install
#############################################

#Download NodeJs package
RUN wget -q -O - https://nodejs.org/dist/v$NODE_VERSION/node-v$NODE_VERSION-linux-x64.tar.gz \
    | tar --strip-components=1 -xzf - -C /usr/local

# /programming//a/35774741/1258525
# use changes to package.json to force Docker not to use the cache
# when we change our application's nodejs dependencies:
COPY ./package.json /tmp/package.json
RUN cd /tmp && npm install
RUN mkdir /app && cp -a /tmp/node_modules /app/

WORKDIR /app
COPY . /app

RUN npm run build-$ENVIRONMENT

RUN cd /app && cp -a dist/* /usr/share/nginx/html
COPY ./docker/conf/frontend.conf /etc/nginx/conf.d/frontend.conf
COPY ./docker/conf/nginx.conf /etc/nginx/nginx.conf


EXPOSE 80

CMD ["nginx"]

2
यह आपकी समस्या को हल नहीं करता है जो प्रश्नों में वर्णित था। यह कैश करने का सिर्फ एक और तरीका है। क्या आप इसका कारण अभी तक जानते हैं? @ ब्रायन
एन गुयेन

@AnNguyen नहींं, और मैंने काम करने के लिए npm कैश प्राप्त करने की कोशिश में बहुत समय बिताया। मेरा सुझाव है कि आप मेरे समाधान का उपयोग करें
ब्रायन ओग्डेन

मेरी स्थिति अलग है। हर बार एक बिल्ड ट्रिगर होने पर एक गुलाम k8 पर प्रावधान किया जाएगा। इसलिए मैं डॉक बिल्ड प्रक्रिया के आधार पर कैश नहीं कर सकता। मैं एनपीएम कैश पर आधार बनाना चाहता हूं ताकि मैं हर बार इसे प्रावधानित होने पर लगातार मात्रा में माउंट कर
एन गुयेन

0

एक और तरीका जो आप कर सकते हैं वह एक नेक्सस रिपॉजिटरी सर्वर सेट करना है जहाँ आप अपने npm मॉड्यूल को होस्ट करते हैं और बाहरी लोगों को प्रॉक्सी करते हैं। यह कैश का लाभ नहीं उठाता है, लेकिन क्योंकि संसाधन आपके स्थानीय नेटवर्क के भीतर हैं या शायद एक ही झुंड में इसे लंबे समय तक नहीं लेना चाहिए।

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