জেনকিন্স থেকে ডকার পাত্রে কীভাবে বিল্ডস চালানো যায়


18

আমি ডকার পাত্রে একটি সি ++ প্রকল্প তৈরি করতে জেনকিন্সকে ব্যবহার করার চেষ্টা করছি। জেনকিন্সে জেনকিনসের বাইরে কোনও ধারক তৈরি করতে আমার কোনও সমস্যা নেই।

নীচে আমি চেষ্টা করেছিলাম। আমি স্পষ্টতার জন্য ভলিউম ম্যাপিংটি বাদ দিচ্ছি।

মামলা 1

নিম্নলিখিত কমান্ডটি সফলভাবে একটি শেলের মধ্যে একটি বিল্ড চালায়।

docker run --rm --interactive=true --tty=true $IMAGE make

তবে জেনকিন্সে যখন "এক্সিকিউট শেল" পদক্ষেপ হিসাবে চালানো হয় তখন ডকার নিম্নলিখিত ত্রুটিটি প্রদান করে।

cannot enable tty mode on non tty input

মামলা 2

নিম্নলিখিত কমান্ডটি আগের মত একই তবে ইন্টারঅ্যাক্টিভিটি অক্ষম করে।

docker run --rm $IMAGE make

জেনকিনস সফলভাবে একটি বিল্ড চালাতে পারে। তবে কোনও বিল্ড বাতিল করতে গিয়ে গুরুতর সমস্যা রয়েছে। বিল্ডটি অবিলম্বে বাতিল হওয়া হিসাবে চিহ্নিত হয়েছে তবে বিল্ডটি সম্পূর্ণ না হওয়া পর্যন্ত ধারকটি চলতে থাকবে। এছাড়াও প্রস্থানটি বের হওয়ার পরে পাত্রে সরানো হয় না

শেল চালানোর সময় কমান্ডটি সাফল্যের সাথে তৈরি হয় তবে তাতে বাধা দেওয়া সম্ভব হয় না। এছাড়াও প্রস্থানটি বেরোনোর ​​পরে সরিয়ে ফেলা হয়।

প্রশ্ন

কেউ কীভাবে জেনকিন্স থেকে ডকারের পাত্রে পরিষ্কারভাবে বিল্ডগুলি চালাতে এবং বিল্ডগুলি বাতিল করার ক্ষমতা বজায় রাখতে জানেন?

জেনকিন্সের কোনও প্লাগইন ব্যবহার করা কোনও বিকল্প নয় কারণ ডকার কলগুলি স্ক্রিপ্টগুলির মধ্যে রয়েছে এবং সহজেই তা বের করা যায় না।


1
হয়তো কোনও পোস্ট-বিল্ড জব দিয়ে কার কাজ পাত্রে সরিয়ে ফেলা? এবং যে কোনও ক্ষেত্রে আপনি কোনও বিল্ড গর্ভপাত বন্ধ করে দেন, সম্ভবত আপনার কাছে একটি বিশেষ বিল্ড থাকতে পারে যা সমস্ত উত্সাহী পাত্রে থামবে এবং সরিয়ে ফেলবে? এটি সাবঅপটিমাল তবে কমপক্ষে এটি সেট আপ করা সহজ কাজ। :-)

1
এটি পরিষ্কার সম্পর্কে আমার সংজ্ঞাটির সাথে মেলে না :) তবে আমি এই পরামর্শটির প্রশংসা করি এবং এটি অবশ্যই একটি কার্যকর বৈকল্পিক।
marcv81

উত্তর:


3

জেনকিনসে আপনার ডকার বিল্ডস চালানোর সহজতম উপায় হ'ল পাইপলাইন কাজটি ব্যবহার করা। এটিতে অনেকগুলি ইনবিল্ট প্লাগইন রয়েছে যা আপনার ডকার পরিবেশ এবং পাত্রে নিয়ন্ত্রণ করতে পারে।

কয়েকটি উদাহরণ হল

    docker.image("image-name").run() -Runs the container from the image 
    docker.image("image-name").inside(){//your commands} -Runs your commands inside the docker container and also removes your container as soon as your commands are executed.

আরও তথ্যের জন্য: https://www.cloudbees.com/blog/orchestrating-work ফ্লোস- jenkins- এবং- ডকার


2

আপনি নিম্নলিখিত ওয়ার্কফ্লো বাস্তবায়ন করতে পারেন:

  1. একটি ডকার ধারক তৈরি করুন এবং একটি নাম নির্দিষ্ট করুন যাতে আপনি সহজেই এটি উল্লেখ করতে পারেন (যেমন স্ক্রিপ্টগুলিতে)
  2. এটি শুরু করুন এবং এন্ট্রি পয়েন্ট হিসাবে এমন কিছু ব্যবহার করুন যা ধারকটি চলমান রাখে
  3. docker exec container cmd ...আপনার বিল্ড এবং পরীক্ষার আদেশগুলি জারি করতে ব্যবহার করুন
  4. ধারক থামান
  5. ছবিটি সরান

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

একটি বিল্ড জব এর পরে এর মাধ্যমে বাতিল করা যেতে পারে:

  • docker stop container (টিআরএম এবং কেআইএল প্রেরণ করে এবং এর মধ্যে অপেক্ষা করে), বা
  • docker kill container, অথবা এমনকি
  • docker exec container pkill someexecutable

কংক্রিট কমান্ড সহ কর্মপ্রবাহ:

$ docker create --name cxx-devel \
    -v $HOME/src:/srv/src:ro -v $HOME/build:/srv/build \
    gsauthof/fedora-cxx-devel:23
$ docker start cxx-devel     # <- entrypoint is /usr/bin/sleep infinity
$ docker exec cxx-devel /srv/src/projecta/build.sh
$ docker exec cxx-devel /srv/src/projecta/check.sh
$ docker stop cxx-devel
$ docker rm cxx-devel

এই ওয়ার্কফ্লো ব্যবহার করে এমন একটি বাস্তব উদাহরণের জন্য, আপনি এই .travis.yml ফাইলটি, প্রকৃত সিআই স্ক্রিপ্টগুলি , ধারকটির ভিতরে চলমান স্ক্রিপ্ট এবং ব্যবহৃত চিত্রগুলির ডকার ফাইলগুলি দেখতে পারেন

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