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


99

আপনি যখন কোনও ফ্রি স্টাইল প্রকল্প ব্যবহার করছেন তখন আপনি সেট করতে পারেন 20 মিনিটের পরে বিল্ডটি বাতিল করা যদি শেষ না হয়। জেনকিনস মাল্টি ব্রাঞ্চ পাইপলাইন প্রকল্পের মাধ্যমে এটি কীভাবে সম্ভব?

উত্তর:


199

আপনি সময়সীমা ধাপটি ব্যবহার করতে পারেন :

timeout(20) {
  node {
    sh 'foo'
  }
}

আপনার যদি MINUTES এরTimeUnit চেয়ে আলাদা প্রয়োজন হয় তবে আপনি যুক্তিটি সরবরাহ করতে পারেন :unit

timeout(time: 20, unit: 'SECONDS') {

সম্পাদনা আগস্ট 2018: আজকাল আরও সাধারণ ঘোষণামূলক পাইপলাইনগুলির সাথে (সহজেই শীর্ষ-স্তরের pipelineকনস্ট্রাক্ট দ্বারা স্বীকৃত ) সময়সীমা optionsবিভিন্ন স্তরে (সামগ্রিক পাইপলাইন বা প্রতি স্তরের প্রতি) ব্যবহার করে নির্দিষ্ট করা যেতে পারে :

pipeline {
  options {
      timeout(time: 1, unit: 'HOURS') 
  }
  stages { .. }
  // ..
}

তবুও, আপনি যদি কোনও ঘোষণামূলক পাইপলাইনের একক পদক্ষেপে সময়সীমা প্রয়োগ করতে চান তবে এটি উপরে বর্ণিত হিসাবে ব্যবহার করা যেতে পারে।


6
রেফারেন্স এছাড়াও অধীনে 1. পাওয়া যায় জেনকিন্স ড্যাশবোর্ড<কোনো পাইপলাইন প্রকল্প> ▼ → পাইপলাইন সিনট্যাক্সধাপ রেফারেন্স বা 2. JENKINS_URL/job/<any Pipeline project>/pipeline-syntax/ধাপ রেফারেন্স
জেরুল্ড ব্রোজার

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

নোডটি অনলাইনে রয়েছে কিনা তা আপনি যদি জানতে চান তবে আপনি জিজ্ঞাসা করতে পারেন: def n=Jenkins.instance.getNode("ETService3") if (n!=null && n.computer && n.computer.online) { echo "Online" } else { echo "Offline" // wait a little bit and try again }দু'বার নোড অর্জন করার জন্য একটি কৌতুকপূর্ণ উপায়। প্রথম বার বাইরের সময়সীমা সহ, দ্বিতীয় অভ্যন্তরীণ সময়সীমা সহ। আমি বৈশিষ্ট্যটিও মিস করছি।
elou

@ জেক, এটি একটি প্রশ্ন হওয়া উচিত!
Charlie_pl

4
সময়সীমা শেষ হয়ে গেলে আপনি কীভাবে নিজের ত্রুটি বার্তাটি ছুঁড়বেন?
red888

6

একটি ডিক্লারেটিভ পাইপলাইনের জন্য বিকল্প-বিভাগে সময়সীমার ধাপটি ব্যবহার করার পরামর্শ দেওয়া হয় ।

নির্ধারিত সময়সীমা সহ ব্লকের অভ্যন্তরে কোডটি কার্যকর করে। যদি সময়সীমাটি পৌঁছে যায়, তবে একটি ব্যতিক্রম (org.jenkinsci.plugins.workflow.steps.FlowInterusedException) নিক্ষেপ করা হয়, যা বিল্ডটি বাতিল করে দেয় (যদি না এটি ধরা পড়ে এবং কোনওভাবে প্রক্রিয়াজাত না করা হয়)। ইউনিট alচ্ছিক তবে কয়েক মিনিটের ডিফল্ট।

সময়সীমা-ধাপে আপনি কনফিগার করতে পারেন এমন 3 টি প্যারামিটার রয়েছে:

  • সময় (প্রয়োজনীয়, পূর্বে)

    • টাইমআউটটির পরিমাণ, কোনও ইউনিট যদি মিনিটের মধ্যে সময়কালে বর্ণিত না হয়
  • ক্রিয়াকলাপ (alচ্ছিক, বুলিয়ান)

    • নিরঙ্কুশ সময়কাল পরিবর্তে এই ব্লকের লগগুলিতে কোনও ক্রিয়াকলাপ না পেরে সময়সীমা শেষ।
  • ইউনিট (alচ্ছিক, মানগুলি: ন্যানোসেকেন্ডস, মাইক্রোসেকেন্ডস, মিলিসেকেন্ডস, সেকেন্ডস, মিনিটস, আওয়ারস, দিন)

    • সময়ের জন্য ইউনিট , ডিফল্ট হয় MINUTES

উদাহরণ:

timeout(time: 10) // would lead to a timeout of 10 minutes (MINUTES is default value)
timeout(time: 10, unit: 'SECONDS') // a 10 seconds timeout
timeout(time: 10, activity: false, unit: 'MILLISECONDS')

সরকারী জেনকিন্স ডকুমেন্টেশন একটি টাইমআউটের ব্যবহারের জন্য একটি খুব সুন্দর উদাহরণ রয়েছে:

pipeline {
    agent any
    options {
        timeout(time: 1, unit: 'HOURS') 
    }
    stages {
        stage('Example') {
            steps {
                echo 'Hello World'
            }
        }
    }
}

4
activityডিফল্ট হিসাবে মিথ্যা আছে। কখন activityমিথ্যা - সম্পূর্ণ কাজের জন্য trueসময়সীমা, ক্রিয়াকলাপের জন্য সময়সীমা (লগতে কোনও কিছু মুদ্রণের জন্য)।
ম্যাক্সিম সুস্লোভ

4
আমি timeoutএকটি নির্দিষ্ট পর্যায়ে এমনভাবে যুক্ত করতে চাই যাতে পরবর্তী পর্যায়টি সুদৃfully়ভাবে চলুক। উপরের উদাহরণে, পাইপলাইন সময়সীমা শেষ হওয়ার পরে এবং পরবর্তী পর্যায়ে সম্পাদন করা হয় না। আমার প্রয়োজনীয়তা পূরণের জন্য কি কোনও উপায় আছে? প্রদত্ত পর্যায়ে সময়সীমা নির্ধারণের জন্য নমুনা কোড (অফিশিয়াল জেনকিন্স ডক থেকে):pipeline { agent any stages { stage('Example') { options { timeout(time: 1, unit: 'HOURS') } steps { echo 'Hello World' } } } }
যশ
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.