জেনকিনস সিআই পাইপলাইন স্ক্রিপ্টগুলিকে পদ্ধতি গ্রোভি.লং.গ্রোভিঅবজেক্ট ব্যবহারের অনুমতি নেই


104

আমি জাভা প্রকল্পগুলি সংকলনের জন্য জেনকিনস 2 ব্যবহার করছি, আমি একটি pom.xML থেকে সংস্করণটি পড়তে চাই, আমি এই উদাহরণটি অনুসরণ করছিলাম:

https://github.com/jenkinsci/pipeline-plugin/blob/master/TUTORIAL.md

উদাহরণটি পরামর্শ দেয়:

সমস্যাযুক্ত ফাংশন সহ পূর্ণ জেনকিনস পাইপলাইন প্রদত্ত

দেখে মনে হচ্ছে ফাইল সিস্টেম অ্যাক্সেস করতে কিছু সুরক্ষা সমস্যা রয়েছে তবে আমি কী বুঝতে পারি না এটি কী সমস্যা দিচ্ছে (বা কেন):

আমি উদাহরণের চেয়ে কিছুটা আলাদা করছি:

def version() {
    String path = pwd();
    def matcher = readFile("${path}/pom.xml") =~ '<version>(.+)</version>'
    return matcher ? matcher[0][1] : null
}

'সংস্করণ' পদ্ধতি চালানোর সময় আমি যে ত্রুটিটি পাচ্ছি:

org.jenkinsci.plugins.scriptsecurity.sandbox.RejectedAccessException: Scripts not permitted to use method groovy.lang.GroovyObject invokeMethod java.lang.String java.lang.Object (org.codehaus.groovy.runtime.GStringImpl call org.codehaus.groovy.runtime.GStringImpl)
    at org.jenkinsci.plugins.scriptsecurity.sandbox.whitelists.StaticWhitelist.rejectMethod(StaticWhitelist.java:165)
    at org.jenkinsci.plugins.scriptsecurity.sandbox.groovy.SandboxInterceptor.onMethodCall(SandboxInterceptor.java:117)
    at org.jenkinsci.plugins.scriptsecurity.sandbox.groovy.SandboxInterceptor.onMethodCall(SandboxInterceptor.java:103)
    at org.kohsuke.groovy.sandbox.impl.Checker$1.call(Checker.java:149)
    at org.kohsuke.groovy.sandbox.impl.Checker.checkedCall(Checker.java:146)
    at com.cloudbees.groovy.cps.sandbox.SandboxInvoker.methodCall(SandboxInvoker.java:15)
    at WorkflowScript.run(WorkflowScript:71)
    at ___cps.transform___(Native Method)
    at com.cloudbees.groovy.cps.impl.ContinuationGroup.methodCall(ContinuationGroup.java:55)
    at com.cloudbees.groovy.cps.impl.FunctionCallBlock$ContinuationImpl.dispatchOrArg(FunctionCallBlock.java:106)
    at com.cloudbees.groovy.cps.impl.FunctionCallBlock$ContinuationImpl.fixArg(FunctionCallBlock.java:79)
    at sun.reflect.GeneratedMethodAccessor408.invoke(Unknown Source)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:601)
    at com.cloudbees.groovy.cps.impl.ContinuationPtr$ContinuationImpl.receive(ContinuationPtr.java:72)
    at com.cloudbees.groovy.cps.impl.FunctionCallBlock$ContinuationImpl.dispatchOrArg(FunctionCallBlock.java:100)
    at com.cloudbees.groovy.cps.impl.FunctionCallBlock$ContinuationImpl.fixArg(FunctionCallBlock.java:79)
    at sun.reflect.GeneratedMethodAccessor408.invoke(Unknown Source)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:601)
    at com.cloudbees.groovy.cps.impl.ContinuationPtr$ContinuationImpl.receive(ContinuationPtr.java:72)
    at com.cloudbees.groovy.cps.impl.ContinuationGroup.methodCall(ContinuationGroup.java:57)
    at com.cloudbees.groovy.cps.impl.FunctionCallBlock$ContinuationImpl.dispatchOrArg(FunctionCallBlock.java:106)
    at com.cloudbees.groovy.cps.impl.FunctionCallBlock$ContinuationImpl.fixArg(FunctionCallBlock.java:79)
    at sun.reflect.GeneratedMethodAccessor408.invoke(Unknown Source)

আমি এই সংস্করণগুলি ব্যবহার করছি: প্লাগইন পাইপলাইন 2.1 জেনকিনস ২.২


আমার সম্পর্কে একই রকম ত্রুটি ছিল Scripts not permitted to use method, তবে এটি ঘটেছিল কারণ আমি scm 'checkout'পরিবর্তে লিখেছিলাম checkou scm। যদি কেউ এর মধ্যে পড়ে তবে খারাপ সিনট্যাক্সের জন্য দেখুন :)। মার্টেন কিয়েফ্ট বলেছিলেন এমনভাবে করা আমাকে খারাপ আদেশ সম্পর্কে আরও স্পষ্ট ত্রুটি বার্তাটি দেখার অনুমতি দিয়েছে :)
এমনভাবে করায় আমাকে পেয়েছিল

উত্তর:


261

দ্রুত ঠিক করা

আমার অনুরূপ সমস্যা ছিল এবং আমি এটি নিম্নলিখিত করে সমাধান করেছি

  1. জেনকিনে নেভিগেট করুন> জিনকিনগুলি পরিচালনা করুন> প্রক্রিয়াটির স্ক্রিপ্ট অনুমোদন
  2. একটি মুলতুবি কমান্ড ছিল, যা আমাকে অনুমোদন করতে হয়েছিল।

জেনকিন্স ২.61১ এ প্রক্রিয়া অনুমোদনের লিঙ্কে বিকল্প 1: স্যান্ডবক্স অক্ষম করুন

এই নিবন্ধটি গভীরভাবে ব্যাখ্যা করার সাথে সাথে গ্রোভী স্ক্রিপ্টগুলি ডিফল্টরূপে স্যান্ডবক্স মোডে চালিত হয়। এর অর্থ হ'ল প্রশাসনিক অনুমোদন ছাড়াই গ্রোভি পদ্ধতিগুলির একটি উপসেট চালানোর অনুমতি দেওয়া হয়েছে। স্ক্রিপ্টগুলি স্যান্ডবক্স মোডে না চালানোও সম্ভব, যা বোঝায় যে পুরো স্ক্রিপ্টটি একবারে প্রশাসকের দ্বারা অনুমোদিত হওয়া দরকার। এটি ব্যবহারকারীদের সময়ে প্রতিটি লাইন অনুমোদন করা থেকে বিরত রাখে।

স্যান্ডবক্স ছাড়াই স্ক্রিপ্ট চালানো আপনার স্ক্রিপ্টের ঠিক নীচে আপনার প্রকল্পের কনফিগারেশনে এই চেকবক্সটি আনচেক করে করা যেতে পারে: এখানে চিত্র বর্ণনা লিখুন

বিকল্প 2: স্ক্রিপ্ট সুরক্ষা অক্ষম করুন

যেমন এই নিবন্ধটি ব্যাখ্যা করেছে এটি স্ক্রিপ্ট সুরক্ষা সম্পূর্ণরূপে অক্ষম করাও সম্ভব। প্রথমে অনুমতি স্ক্রিপ্ট সুরক্ষা প্লাগইন ইনস্টল করুন এবং তারপরে আপনার jenkins.xML ফাইলটি পরিবর্তন করুন এই যুক্তি যুক্ত করুন:

-Dpermissive-স্ক্রিপ্ট-security.enabled = সত্য

সুতরাং আপনি jenkins.xML দেখতে কিছু দেখতে পাবেন:

<executable>..bin\java</executable>
<arguments>-Dpermissive-script-security.enabled=true -Xrs -Xmx4096m -Dhudson.lifecycle=hudson.lifecycle.WindowsServiceLifecycle -jar "%BASE%\jenkins.war" --httpPort=80 --webroot="%BASE%\war"</arguments>

আপনি যদি এটি প্রয়োগ করেন তবে আপনি কী করছেন তা আপনি নিশ্চিত হন!


1
পুরো স্ক্রিপ্ট অনুমোদন করা ভাল, দলের কাঠামোর উপর নির্ভর করে। সম্পূর্ণ অ্যাক্সেস সহ কয়েকটি বিকাশকারী এটি যথেষ্ট সুন্দর। তবে একাধিক টিমের সাথে একটি সেটআপ অ্যাডমিনদের সমস্ত পাইপলাইন স্ক্রিপ্টগুলির প্রতিটি পরিবর্তনের অনুমোদনের জন্য বাধ্য করবে।
রজার লেহমান

2
বিকল্প 3 (সত্যই প্রথম পরামর্শ হওয়া উচিত) হ'ল সমস্যাযুক্ত অচিহ্ন তালিকাভুক্ত কোড পরিবর্তন করা । এই ক্ষেত্রে, একটি সরল ব্যবহার @NonCPSজন্য Matcherব্যবহার যথেষ্ট হবে। পুরো পাইপলাইন এবং বিশেষত পুরো জেনকিন্স ইনস্টলেশনটির জন্য সুরক্ষা অক্ষম করার ক্ষেত্রে এই ক্ষেত্রে কোনও প্রয়োজন নেই। প্রতিটি অবরুদ্ধ কলকে স্বতন্ত্রভাবে মূল্যায়ন করুন এবং সিদ্ধান্ত নিন যে আপনার যদি তাদের সত্যিকারের অনুমোদনের প্রয়োজন হয়।
এমকোবিট

1
@ এমকোবিট আমার পক্ষে কাজ করে না। @NonCPSসাহায্য করে না
ওয়ারওয়ারিচ

@ ওয়ারওয়ারিয়াক হুম, আপনি যদি Matcherনিজেই ফিরে আসছেন তবে এটি হতে পারে , কারণ ইন্টারফেসটি Matcherকার্যকর করে না Serializable। এটি একটি নতুন প্রশ্ন জিজ্ঞাসা মূল্য হতে পারে। আমি চাই যে মূল প্রশ্নে উল্লেখ করা ডকুমেন্টেশনটি বজায় রাখা হয়েছিল এবং এটি দিয়ে ভুল হওয়া উচিত নয়।
এমকোবিট

2
@ এমকোবিট আমি এমন NonCPS একটি ফাংশন দিয়ে সজ্জিত করেছি যা ব্যবহার করে currentBuild.rawBuild.getCause(Cause.UserIdCause).getUserId()। ননসিপিএস আমি যা পড়েছি তা থেকে সুরক্ষা সমস্যাগুলিতে মোটেই সহায়তা করে না।
ওয়ারওয়ারিচ

12

আপনার কাজের কনফিগারেশনে আপনাকে গ্রোভির জন্য স্যান্ডবক্সটি অক্ষম করতে হবে।

বর্তমানে মাল্টিব্রাঞ্চ প্রকল্পগুলির পক্ষে এটি সম্ভব নয় যেখানে স্ক্রোম থেকে গ্রোভি স্ক্রিপ্ট আসে। আরও তথ্যের জন্য https://issues.jenkins-ci.org/browse/JENKINS-28178 দেখুন


6

আমি যখন ইউজার ইনপুট-এ ইউজার-ইনপুট পরামিতিগুলির সংখ্যা 3 থেকে কমিয়ে 1 এঁকেছি তখন এটি ব্যবহারকারীর ইনপুটের পরিবর্তনশীল আউটপুট ধরণেরটিকে অ্যারে থেকে আদিম থেকে পরিবর্তিত করে।

উদাহরণ:

myvar1 = userInput['param1']
myvar2 = userInput['param2']

প্রতি:

myvar = userInput

আমি যে উপসর্গটি অনুভব করেছি তার জন্য এটি ঠিক ঠিক। ত্রুটি বার্তা ছিল org.jenkinsci.plugins.scriptsecurity.sandbox.RejectedAccessException: Scripts not permitted to use method groovy.lang.GroovyObject invokeMethod java.lang.String java.lang.Object। পদ্ধতিটি 2 টি প্যারামিটারের প্রত্যাশা করেছিল এবং 3 পেয়েছিল
টাইলার

4

এসসিএম সঞ্চিত গ্রোভি স্ক্রিপ্টগুলির স্যান্ডবক্সিং সন্ধানের জন্য, আমি স্ক্রিপ্টটি গ্রোভি কমান্ড ( গ্রোভি স্ক্রিপ্ট ফাইলের পরিবর্তে ) হিসাবে চালানোর পরামর্শ দিচ্ছি :

import hudson.FilePath
final GROOVY_SCRIPT = "workspace/relative/path/to/the/checked/out/groovy/script.groovy"

evaluate(new FilePath(build.workspace, GROOVY_SCRIPT).read().text)

এই ক্ষেত্রে, গ্রোভি স্ক্রিপ্টটি কর্মক্ষেত্র থেকে জেনকিন্স মাস্টারে স্থানান্তরিত করা হয়েছে যেখানে এটি কার্যকর করা যেতে পারে system Groovy Script। যতক্ষণ না গ্রোভি স্যান্ডবক্স ব্যবহার না করা হয় ততক্ষণ স্যান্ডবক্সিং দমন করা হয়


5
এটিকে ক্লিঙ্কি, ঝুঁকিপূর্ণ এবং ফিরে এসে আপনাকে কামড় দিতে বাধ্য seems
সাইমন ফোর্সবার্গ

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

3
আমার ক্ষেত্রে, পুরানো জেনকিন্স থেকে আপগ্রেড হওয়ার পরে, আমার গ্রোভি স্ক্রিপ্টটি কাজ করা বন্ধ করে দিয়েছে এবং এটির কাজ করার একমাত্র উপায় হ'ল স্ক্রিপ্টটি 300 বার চালানো (কেবলমাত্র একটি অনুমান) এবং প্রতিটি রানের জন্য জেনকিন্স ইউআইতে ক্লিক করার অনুমতি দেওয়া হবে সমস্ত পদ্ধতি 200 লাইনের স্ক্রিপ্টে কল করে। তবুও আপনি যদি কোনওভাবে সেগুলি উত্পন্ন করতে সক্ষম হন তবে ইউআই আপনাকে সমস্ত অনুমোদিত পদ্ধতি কলগুলির সম্পূর্ণ তালিকা পেস্ট করার অনুমতি দেয় না। অতিরিক্তভাবে, ইউআই পদ্ধতি কলগুলির কিছু প্রদর্শন বন্ধ করে দিয়েছে এবং কিছুক্ষণ পরে আমি এগিয়ে যেতে পারিনি।
স্টেপান ভাভরা
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.