সিআই / সিডি পাইপলাইন বাস্তবায়নে বিভিন্ন ভাড়াটেদের জন্য ডকফেরাইলকে গতিময়ভাবে পরিচালনা করা


13

আমি ডকার, কুবারনেটস এবং জেনকিন্স ব্যবহার করে আমার প্রকল্পের জন্য সিআই / সিডি পাইপলাইনটি বাস্তবায়নের চেষ্টা করছি। আমার অ্যাপ্লিকেশনটি মাল্টি-টেন্যান্ট অ্যাপ্লিকেশন, যাতে ডেটাবেস অ্যাপ্লিকেশন ভেরিয়েবলগুলি বিভিন্ন ভাড়াটেদের জন্য আলাদা।

অ্যাপ্লিকেশন কৌশল

আমি যখন কোনও ডকার চিত্র তৈরি করছি তখন আমি ডকফাইফিল ব্যবহার করছি। এবং আমি আমার ডকস্পাইলকে আমার এসভিএন কোড সংগ্রহস্থলের ভিতরে রাখি। প্রতিটি ভাড়াটেদের জন্য কোড সংগ্রহস্থল সমান। আমি যখন একটি চিত্র তৈরি করছি, তখন আমার বিভিন্ন ভাড়াটে লোকের জন্য বিভিন্ন চিত্র তৈরি করা দরকার।

ডকফেরফিল বাস্তবায়ন

আমার ডকার ফাইলে আমি নীচের মতো এন্ট্রি পয়েন্ট যুক্ত করছি,

ENTRYPOINT ["java", "-jar", "-Dspring.profiles.active=tenant1config" , "TestProject.war"]

আমার যদি অন্য ভাড়াটে লোকের জন্য ডকার চিত্র তৈরি করতে হয় তবে এটি যুক্ত করা দরকার
-Dspring.profiles.active=tenant2config

সুতরাং ডকফাইফিল এন্ট্রিপয়েন্টটি গতিশীল।

আমার বিভ্রান্তি

  1. ডকফাইফিলের ভিতরে এন্ট্রি পয়েন্ট কমান্ড পরিচালনার জন্য গতিশীলভাবে কী সম্ভব?
  2. বা অন্য ভাড়াটিয়াদের জন্য আমার কি অন্য ডকফেরিল যুক্ত করা দরকার? এবং আলাদা ভাড়াটেদের জন্য আলাদাভাবে ডকার বিল্ড কমান্ড চালানো দরকার?

এই সমস্যাটি কার্যকর করার জন্য আমি কীভাবে একটি ভাল মানক উপায় পেতে পারি?


3
তুমি তোমার পরিবেশ ভেরিয়েবল ব্যবহার করতে পারেন ENTRYPOINTঅর্থাত ... -Dspring.profiles.active=${TENANT}তারপর আপনার স্থাপনার সময় সঠিক পরিবেশ সেট।
masseyb

উত্তর:


13

12 ফ্যাক্টর - কনফিগার থেকে উদ্ধৃতি

একটি অ্যাপ্লিকেশনটির কনফিগারেশন হ'ল সবকিছু যা মোতায়েনের (স্টেজিং, উত্পাদন, বিকাশকারী পরিবেশ ইত্যাদি) মধ্যে পৃথক হতে পারে। এটা অন্তর্ভুক্ত:

  • রিসোর্স ডাটাবেস, মেমক্যাচড এবং অন্যান্য ব্যাকিং পরিষেবাগুলিতে হ্যান্ডেল করে

  • অ্যামাজন এস 3 বা টুইটারের মতো বাহ্যিক পরিষেবার শংসাপত্র

  • প্রতি-স্থাপনার মানগুলি যেমন মোতায়েনের জন্য ক্যানোনিকাল হোস্টনাম name

আপনার প্রতি ভাড়াটিয়ের জন্য আলাদা ডকার ইমেজ তৈরি করা উচিত নয় কারণ বাইনারি একই হওয়া উচিত এবং কোনও রানটাইম কনফিগারেশন পরিবেশের মাধ্যমে ইনজেকশন করা উচিত।

রানটাইম কনফিগারেশন ইনজেক্ট করার জন্য বিভিন্ন বিকল্প রয়েছে

  1. পরিবেশের পরিবর্তনশীল

এন্ট্রিপয়েন্টে প্রোফাইল হার্ডকোডিংয়ের পরিবর্তে একটি পরিবেশের পরিবর্তনশীল যুক্ত করুন

ENTRYPOINT ["java", "-jar", "-Dspring.profiles.active=$TENANT_PROFILE" , "TestProject.war"]

তারপরে কুবারনেটস মোতায়েনের কনফিগারেশন থেকে পরিবেশের পরিবর্তনশীল ইনজেক্ট করুন https://kubernetes.io/docs/tasks/inject-data-application/define-en वातावरण-variable-container/ দেখুন

  1. প্রোফাইল কনফিগারেশনটিকে একটি কনফিগার হিসাবে মাউন্ট করুন এবং এটি উল্লেখ করুন

আপনার এন্ট্রিপয়েন্টটি দেখতে ভালো লাগবে

ENTRYPOINT ["java", "-jar", --spring.config.location="file:/path/to/tenantconfig.yaml" , "TestProject.war"] তারপরে প্রয়োজনীয় কনফিগারেশন ফাইলটি কুবারনেট কনফিগারেশন হিসাবে মাউন্ট করুন।

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


1
পরিবেশ পরিবর্তনশীল হিসাবে SPRING_PROFILES_ACTIVE এর বাক্সের বাইরে কাজ করা উচিত। জাভা অতিরিক্ত প্যারামিটারের প্রয়োজন নেই।
ম্যানুয়েল পোলেসেক

3

আপনি ডকার এআরজিএস ব্যবহার করতে পারেন, এটি কেবল বিল্ড টাইমে উপলব্ধ হবে এবং এটি এন্ট্রিপয়েন্টে ব্যবহার করতে পারবেন।

docker build --build-arg CONFIG_FILE=<file_name> -t tag_name .

CONFIG_FILE কনফিগার ফাইলের অবস্থান ধরে রাখবে এবং আপনি এটিকে গতিশীলভাবে পাস করতে পারবেন। এর সাথে আপনার প্রবেশের স্থানটি প্রতিস্থাপন করুন$CONFIG_FILE

ENTRYPOINT ["java", "-jar", "-Dspring.profiles.active=$CONFIG_FILE" , "TestProject.war"]

ARG CONFIG_FILE - ডকফাইফিলের ভিতরে ঘোষণা করা উচিত
রোমান এম

0

উল্লেখ করুন - সেরা ডকসফাইলে

ENTRYPOINT আপনাকে এক্সিকিউটেবল হিসাবে চালনার জন্য একটি ধারক কনফিগার করতে সহায়তা করে যা রানটাইমে আর্গুমেন্ট নিতে পারে

যে কোনও গতিশীল সম্পত্তি আপনি ওভাররাইড করতে চান, একই চিত্র দিয়ে রানটাইম সময়ে করা যেতে পারে।

রানটাইমে আপনি প্রয়োজনীয় যুক্তিটি পাস করতে পারেন।

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