ডোকরে চালিত জেনকিনস বিল্ড স্লেভের এনপিএম ক্যাশে কীভাবে সক্ষম করবেন?


13

আমার একটি ডকার ইমেজ আছে, আসুন এটি কল করুন frontend.image, আমি জেনকিনস বিল্ড স্লেভের জন্য ব্যবহার করি। জেনকিনস ডকার প্লাগইনটি এই চিত্র থেকে একটি ধারক স্পিন করবে এবং ধারকটির ভিতরে শিল্পকর্ম তৈরি করবে। এই সব দুর্দান্ত কাজ করে। এই ক্ষেত্রে, frontend.imageএকটি AngularJs অ্যাপ্লিকেশন তৈরি করতে ব্যবহৃত হয়। এই কৌণিক অ্যাপ্লিকেশনটি তৈরির অংশটি হ'ল এনপিএম প্যাকেজ ইনস্টল করা।

এই প্রক্রিয়াটি, এনপিএম ইনস্টল, দীর্ঘ সময় লাগে বলে মনে হয়, 3 মিনিট মনে হয়, এনপিএম সর্বদা প্রতিটি প্যাকেজ ইনস্টল করে।

সুতরাং আমি আমার ক্রীতদাসের জন্য একটি ভলিউম যুক্ত করেছি, এটি একটি হোস্ট মাউন্ট করা ভলিউম, ডকার প্লাগইন এই ভলিউমটি যখনই সম্মুখভাগের ধারকটি চালায় তখন তা ব্যবহার করবে:

এখানে চিত্র বর্ণনা লিখুন

ব্যবহারকারী যে কমান্ডটি কার্যকর করে তা npm installহ'ল jenkins। এনপিএম একটি ক্যাশে রাখে যা আপনি npm config get cacheআউটপুট কমান্ড সহ সন্ধান করতে পারেন/home/jenkins/.npm

এজন্য আমার হোস্ট ভলিউমটি /slaves/volumes/tsl.frontend:/home/jenkinsআমার ওয়েব ধারক দাসে মাউন্ট করা আছে।

আমি জেনকিনস প্রকল্পটি ব্যবহার করে আমার অ্যাংুলার অ্যাপটি তৈরি করি, কোনও সমস্যা তৈরি করে না, অনেক এনপিএম প্যাকেজ ইনস্টল করা হয়। যদি আমার ডকার হোস্টে ssh করে এবং cmd চালায় ls /slaves/volumes/tsl.frontendআমি প্রচুর এনপিএম প্যাকেজ দেখতে পাচ্ছি। এর অর্থ গোলামের জন্য আমার হোস্ট ভলিউম মাউন্টটি কাজ করেছে। এখানে চিত্র বর্ণনা লিখুন

এখন আমি আবার জেনকিনস প্রকল্পটি তৈরি করি, এনপিএম আবার প্রতিটি একক প্যাকেজ ইনস্টল করে, যদিও ডকার স্লেভ বিল্ড কনটেইনারটি ভলিউম হোস্ট মাউন্ট ব্যবহার করছে। আমি এমনকি সঙ্গে cmd ক্রীতদাস ধারক মধ্যে bashing দ্বারা নিশ্চিত করতে পারেন 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 --cache-min 9999999 install, এই এসও উত্তর থেকে নেওয়া এবং পাশাপাশি সেন্টিমিটারnpm --skip-installed --cache-min 9999999 install

স্ট্যাক ওভারফ্লোতে একটি সম্পর্কিত প্রশ্ন পোস্ট করা হয়েছিল।


আমি বাজি ধরব আপনার বর্ণনানুযায়ী ক্যাশে সূচকটি ~ / .npm এর মধ্যে সঞ্চিত নেই
টেনসিবাই

@ টেনসিবাই আপনি ভুল বলেছেন এবং আমি এ সম্পর্কে খুব নিশ্চিত, ব্যবহারকারী জেনকিনস, কারণ এটি আপনি অন্য উপায়ে বলছেন, কারণ আমি জেনকিন্স ব্যবহারকারী হিসাবে এনএমপি ক্যাশে এলএস চালাচ্ছি এবং প্যাকেজগুলি তালিকাভুক্ত করে, আপনি বলছেন যে এনপিএম ইনস্টল হয় অন্য একজন ব্যবহারকারী দ্বারা মৃত্যুদন্ড কার্যকর করা হচ্ছে
ব্রায়ান ওগডেন

না, আমি বলছি সূচকটি নিজেই সম্ভবত অন্য কোথাও, / ইউএসআর / স্থানীয় বা যে কোনও পথে এনপিএম ইনস্টল করা আছে বা hateালতে হবে, আমার কোনও ধারণা নেই। এটি কেবল এনপিএমের মতো শোনাচ্ছে যেমন ক্যাশে কিছুই ছিল না, তাই আমার ধারণা এটি ডিরেক্টরিটি তালিকাভুক্ত করে না তবে অন্য কোনও জায়গায় সূচকের উপর ভিত্তি করে।
তেনসিবাই

@ টেনসিবাই কিন্তু সিএমডি এনএমপি কনফিগারেশনে ক্যাশে রিটার্ন পাবেন / home/jenkins.npm সেই পথ হিসাবে আপনি কি মনে করেন না যে এটি ক্যাশের অবস্থান নিশ্চিত করে?
ব্রায়ান ওগডেন

ক্যাশের অবস্থান হ্যাঁ, এটি ক্যাশে সূচকটি প্রয়োগ করে না যা একই স্থানে রয়েছে। বিল্ড স্ক্রিপ্টে বিল্ড স্ক্রিপ্টে নিজেই একটি npm cache lsএবং একটি কাঁচা যুক্ত করতাম ls ~/.npm/* -alকেবল বিল্ড স্টার্ট করার সময় ধারকটির অবস্থা নিশ্চিত করার জন্য of
তেনসিবাই

উত্তর:


5

এই উত্তরটি অনুসরণ করে আমি শেষ পর্যন্ত এনপিএম ইনস্টলের জন্য ডকার ইমেজ লেয়ার ক্যাশে ব্যবহার করে এটি সমাধান করেছি

এর অর্থ আমি এনপিএল ইনস্টলটি ডকার স্লেভ ইমেজ থেকে সরিয়ে আছি এবং প্রকৃত ফ্রন্টএন্ড চিত্রে চলেছি, এখানে আমার চূড়ান্ত ডকার ফাইল রয়েছে যা প্যাকেজ.কনফাইগের কোনও পরিবর্তন না থাকলে প্রকৃতপক্ষে বিল্ডগুলির মধ্যে এনপিএম ইনস্টলকে ক্যাশে করে:

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
এটি আপনার সমস্যার সমাধান করে না যা প্রশ্নগুলিতে বর্ণিত হয়েছিল। এটি ক্যাশে করার অন্য একটি উপায়। আপনি এখনও কারণ জানেন? @Brian
একটি গুয়েন

@ আনগুইয়েন না, আর আমি এনপিএম ক্যাশে কাজ করার চেষ্টা করে অনেক সময় ব্যয় করেছি। আমি আপনাকে আমার সমাধানটি ব্যবহার করার পরামর্শ দিচ্ছি
ব্রায়ান ওগডেন

আমার পরিস্থিতি অন্যরকম প্রতিবার কোনও বিল্ড ট্রিগার হওয়ার সাথে সাথে কে -8 এস এ বিভক্ত করা হবে। সুতরাং আমি ডকার বিল্ডিং প্রক্রিয়ার ভিত্তিতে ক্যাশে করতে পারি না। আমি এনপিএম ক্যাশে বেস করতে চাই যাতে প্রতিবার যখন এটি প্রযোজ্য ততক্ষণ আমি ক্রীতদাসে একটি অবিচ্ছিন্ন ভলিউম মাউন্ট করতে পারি
একটি

0

আপনি করতে পারেন এমন অন্য পদ্ধতির একটি নেক্সাস রিপোজিটরি সার্ভার সেট আপ করা হয় যেখানে আপনি আপনার এনপিএম মডিউল এবং বাহ্যিকের প্রক্সিটি হোস্ট করেন। এটি ক্যাশে লাভ করে না তবে সংস্থানগুলি আপনার স্থানীয় নেটওয়ার্কের মধ্যে থাকতে পারে বা একই জলাশয়ে এটি বেশি সময় নেয় না।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.