সাফল্য হিসাবে জেনকিনস পাইপলাইন কাজের অকাল থেকে বেরিয়ে আসার সবচেয়ে সহজ উপায়?


55

আমার একটি কাজ রয়েছে যা ফাইলগুলি তৈরি করবে, যদি না এটিতে দেওয়া মানগুলির মধ্যে একটি পুরানো মানের সাথে মেলে না। জেনকিন্সের সবচেয়ে কার্যকর উপায়টি কোনটি ছাড়াই , কাজটি বাতিল বা ছাড়তে হবে FAILED? এটি প্রস্থান করা সঠিক আচরণ তাই আমি বিল্ডটি চিহ্নিত করতে চাই SUCCESS

এটি যদি একটি বিবৃতিতে এর মত শেষ হবে;

stage ('Check value') {

     if( $VALUE1 == $VALUE2 ) {
       //if they do match exit as a success, else continue with the rest of the job 
    }

}

আমি কোনও ত্রুটি কোড ছুঁড়ে দিতে চাই না যদি না এটি কোনওভাবে এটির মধ্যে একটি সফল বিল্ড হিসাবে চিহ্নিত না করে অনুবাদ করা যায়।


1
শুধু exit 0...
Tensibai

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

ঠিক আছে, কেবল স্ক্রিপ্টগুলিতে বাশ করুন, প্রস্থান 0 এর অর্থ সাফল্য, প্রস্থান নয় শূন্যের অর্থ ব্যর্থতা ...
টেনসিবাই

এটি কোনও বাশ স্ক্রিপ্টের মধ্যে নয়, এটি পাইপলাইনের কাজ নিজেই, তাই গ্রুভী। এটা কি জিনিস পরিবর্তন করে?
অ্যালেক্স

গ্রোভিতে আমি কেবল একটি চেষ্টা করব return 0, গ্রুভি কোডের যে কোনও প্রান্তে যা ব্যতিক্রম ছুঁড়ে না তা আমার মনে করা উচিত। আমি
জেনকিনসের

উত্তর:


46

এটা বের করে আনা। যে কোনও পর্যায়ের বাইরে (অন্যথায় এটি সফলতার হিসাবে নির্দিষ্ট পর্বটি শেষ করবে) নিম্নলিখিতগুলি করুন;

if( $VALUE1 == $VALUE2 ) {
   currentBuild.result = 'SUCCESS'
   return
}

return আপনি যে ধাপে বা নোডটি চালাচ্ছেন তা বন্ধ করে দেবে তাই মঞ্চের বাইরে চালানো গুরুত্বপূর্ণ, currentBuild.resultসেটাকে ব্যর্থ হওয়া থেকে বাধা দেয়।


শুধু ফিরে আসার সাথে রাইড স্ট্যাটাস এবং ফলাফলের সাথে বিল্ডটি ছেড়ে দেওয়া উচিত ... সুতরাং ব্যর্থ বিল্ডের মতো একেবারে একই নয়।
আঁকুন

1
আপনি কীভাবে ফিরে আসবেন এবং বাকি সমস্ত পর্যায়ে এড়িয়ে যাবেন?
জেস

1
@ স্নিপেট আপনি যেখানে রেখেছেন সে সম্পর্কে এটি জেসবাওয়ার্স আপনি যদি স্টেজ-লেভেলের চেয়ে নোড-লেভেল করেন তবে এটি সম্পূর্ণ কাজ শেষ করবে।
অ্যালেক্স

4
দয়া করে মনে রাখবেন যে এটি কেবল স্ক্রিপ্টযুক্ত পাইপলাইনের জন্য কাজ করে, ঘোষণাপত্রের জন্য নয়
কাগারলিখ

@ কাগারলিকিজ - এই উত্তরটি লেখার সময় সঠিক, ঘোষণামূলক পাইপলাইন উপস্থিত ছিল না!
অ্যালেক্স

10

আপনি বর্তমান পর্যায়টি থেকে বেরিয়ে আসার জন্য ত্রুটিটিও ব্যবহার করতে পারেন, তারপরে আপনাকে বর্তমান পর্যায়ে স্তরক্রম এবং অনুরূপ জিনিসগুলি বিবেচনা করতে হবে না:

def autoCancelled = false

try {
  stage('checkout') {
    ...
    if (your condition) {
      autoCancelled = true
      error('Aborting the build.')
    }
  }
} catch (e) {
  if (autoCancelled) {
    currentBuild.result = 'SUCCESS'
    // return here instead of throwing error to keep the build "green"
    return
  }
  // normal error handling
  throw e
}

তবে এটি একটি লাল পর্যায়ে নিয়ে যায়, যদি কোনও পর্যায়ের মধ্যে ত্রুটি দেখা দেয়।

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

এটি আপনার প্রয়োজনীয়তার উপর নির্ভর করে, আপনি কোন উপায়ে ব্যবহার করতে চান।


আপনি যদি এইভাবে এটি করতে যাচ্ছেন তবে RuntimeExceptionসমস্ত ব্যতিক্রম ধরা এবং একটি পতাকা পরীক্ষা করার প্রয়োজনের পরিবর্তে নিক্ষেপের একটি নতুন সাবক্লাস তৈরি করুন
মাইকেল মরোজেক

1

সত্যিই আপনার বিশেষভাবে প্রস্থান কমান্ডটি ব্যবহার করার দরকার নেই, তবে একটি শর্তসাপেক্ষ বিল্ডস্টেপ প্লাগইন রয়েছে যা একই পরিণতি অর্জন করতে পারে (কোডটি যা চালায় না)।

আমি এখনও এর বিরুদ্ধে আসিনি, তাই প্লাগইন ব্যবহার করিনি।

জেনকিন্সের পূর্ববর্তী স্ট্যাক ওভারফ্লো পোস্টে শর্তযুক্ত রয়েছে : জেনকিনস পাইপলাইন শর্তসাপেক্ষ পদক্ষেপ / মঞ্চ


1
যদিও আপনার উত্তরটি বৈধ বলে মনে হচ্ছে (যেহেতু আমি অন্য কোনও কাজের সন্ধান পেয়েছি এটি সরাসরি পরীক্ষা করে দেখেনি), তবে "সত্যই আপনার প্রস্থান করা উচিত নয়" এটিকে শুরু করার একটি ভাল উপায় বলে আমি মনে করি না; পরিষ্কারভাবে এই পদ্ধতির অস্তিত্ব মানে কখনও কখনও প্রস্থান করা প্রয়োজন necessary
অ্যালেক্স

তুমি কি পরামর্শ দাও? একটি শেষ বিবৃতিতে সরানো? "সাধারণত" বাছাইকারী যোগ করা হচ্ছে? আপনি "প্রতিক্রিয়া" সরবরাহ করেছেন তবে অভিপ্রায়টি জানাতে বা এটি কার্য্য করা আমার পক্ষে সহজ নয়, দয়া করে কম পরিশ্রমী হোন।
মিঃমিসিস

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

1
আহ আমি দেখছি, আমি মনে করি আমি "আপনার আক্ষরিক exitআদেশটি ব্যবহার করা উচিত নয় " - এর পরিবর্তে "কাজ শেষ করার জন্য কিছু করা খারাপ" হিসাবে আপনার বক্তব্যটির ভুল ব্যাখ্যা করেছে - যদি আমি ক্ষমা চেয়ে নিই তবে এটি আমার ভুল ধারণা।
অ্যালেক্স

3
আমি এটিকে আরও পরিষ্কার করার চেষ্টা করেছি, একেবারেই ক্ষমা চাওয়ার দরকার নেই, ভাষা একটি চঞ্চল জন্তু, বিশেষত ইন্টারনেটে :)
মিঃ মিজিস

0

Executor.interrupt(Result)পদ্ধতি পরিষ্কার, সবচেয়ে সরাসরি আমি একটি build অকালে বন্ধ করতে খুঁজে পাইনি এবং একটি সাফল্য হিসেবে চিহ্নিত করেন।

script {
    currentBuild.getRawBuild().getExecutor().interrupt(Result.SUCCESS)
}

পেশাদাররা :

  • একটি ঘোষিত পাইপলাইনের পাশাপাশি একটি স্ক্রিপ্টযুক্ত কাজ করে।
  • হ্যান্ডেল করার জন্য কোনও চেষ্টা / ধরা বা ব্যতিক্রম নয়।
  • কলিং স্টেজ এবং যেকোন ধারাবাহিক পর্যায়টিকে ইউআইতে সবুজ / পাস হিসাবে চিহ্নিত করে।

কনস :

  • নিরাপত্তাহীন বলে মনে করা হয় এমন একটি সহ অনেকগুলি ইন-প্রসেস স্ক্রিপ্ট অনুমোদনের প্রয়োজন । অনুমোদন করুন এবং সাবধানতার সাথে ব্যবহার করুন।

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