জেনকিনস পাইপলাইন স্ক্রিপ্টে @ ননসিপিএসের প্রভাব কী?


110

জেনকিন্সে আমার পাইপলাইনের স্ক্রিপ্ট রয়েছে।

আমি এই ব্যতিক্রমটি পেতাম:

org.jenkinsci.plugins.scriptsecurity.sandbox.RejectedAccessException: স্ক্রিপ্টগুলি পদ্ধতি groovy.json.JsonSlurperClassic পার্সটেক্সট java.lang.string ব্যবহার করার অনুমতি নেই

আমি ব্যতিক্রমটি সন্ধান করেছি এবং আমি কিছু সংকেত পেয়েছি যা আমার কাছে পদ্ধতিটি বর্ননা করা উচিত যেখানে থাইএক্সসেপশন হয় @NonCPS। আমি এটি করেছি, সত্যিকার অর্থে এটি কী করে তা না বুঝে।

তবে এর পরে, একটি ব্যতিক্রম যে আমি সেই পদ্ধতিতে ফেলেছিলাম তা আর কোনও tryধারা দ্বারা ধরা পড়েনি।

তাহলে এর পিছনে @NonCPSকী ধারণা ? এটি ব্যবহারের প্রভাবগুলি কী কী?


1
জেনকিন্স অফিশিয়াল ব্লগে একটি নিবন্ধ রয়েছে যা এই টীকাটি প্রবর্তন করে এবং আপনাকে সহায়তা করতে পারে। jenkins.io/blog/2017/02/01/pipline-scalability-best- অনুশীলন
袁文涛

উত্তর:


141

আপনি যে ব্যতিক্রমটি দেখছেন তা স্ক্রিপ্ট সুরক্ষা এবং স্যান্ডবক্সিংয়ের কারণে । মূলত, ডিফল্টরূপে, আপনি যখন পাইপলাইন স্ক্রিপ্টটি চালান, এটি একটি স্যান্ডবক্সে চলে যা কেবলমাত্র কয়েকটি নির্দিষ্ট পদ্ধতি এবং ক্লাস ব্যবহারের অনুমতি দেয়। হোয়াইটলিস্ট অপারেশন করার উপায় আছে, উপরের লিঙ্কটি পরীক্ষা করুন।

@NonCPSআপনি কোন বস্তু যা serializable না ব্যবহার পদ্ধতি আছে যখন টীকা দরকারী। সাধারণত, আপনার পাইপলাইন স্ক্রিপ্টে আপনি যে সমস্ত বস্তু তৈরি করেন সেগুলি অবশ্যই সিরিয়ালাইজ করতে হবে (এর কারণ হ'ল জেনকিন্স অবশ্যই স্ক্রিপ্টের স্থিতিটি সিরিয়াল করতে সক্ষম হবে যাতে এটি থামানো এবং ডিস্কে সঞ্চয় করা যায়)।

আপনি যখন @NonCPSকোনও পদ্ধতি প্রয়োগ করেন, জেনকিন্স বিরতি দেওয়ার ক্ষমতা ছাড়াই একসাথে পুরো পদ্ধতিটি সম্পাদন করে। এছাড়াও, আপনাকে কোনও টীকাবিহীন পদ্ধতির মধ্যে থেকে কোনও পাইপলাইন পদক্ষেপ বা সিপিএস রূপান্তরিত পদ্ধতিগুলি উল্লেখ করার অনুমতি নেই @NonCPSএই সম্পর্কে আরও তথ্য এখানে পাওয়া যাবে

ব্যতিক্রম হ্যান্ডলিংয়ের ক্ষেত্রে: আপনি যা अनुभव করছেন তা 100% নিশ্চিত নয়; আমি নিম্নলিখিতটি চেষ্টা করেছি এবং এটি প্রত্যাশার মতো কাজ করে:

@NonCPS
def myFunction() {
    throw new RuntimeException();
}

try {
    myFunction();
} catch (Exception e) {
    echo "Caught";
}

এবং

@NonCPS
def myFunction() {
    throw new RuntimeException();
}

def mySecondFunction() {
    try {
        myFunction();
    } catch (Exception e) {
        echo "Caught";
    }
}

mySecondFunction();

এবং পরিশেষে:

@NonCPS
def myFunction() {
    throw new RuntimeException();
}

@NonCPS
def mySecondFunction() {
    try {
        myFunction();
    } catch (Exception e) {
        echo "Caught";
    }
}

mySecondFunction();

সমস্ত প্রত্যাশিত হিসাবে "ধরা" মুদ্রণ।

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