Pipelines with Jenkinsfile runs in a sandbox and thus you need to approve 
certain functions.
Manage Jenkins -> In-process Script Approval

mandag 13. juni 2016 12.32.14 UTC+2 skrev Jerry Steele følgende:
>
> Thanks for getting me started on this. If you don't mind helping me 
> troubleshoot, I'll carry on:
>
> I think the parameterized version is the one I need, as I would like the 
> build tool to run with the $gitBranch argument of the new branch that has 
> just been created. However, when I attempt to run this job, I get the 
> following error:
>
> First time build. Skipping changelog. [Pipeline] End of Pipeline 
> org.jenkinsci.plugins.scriptsecurity.sandbox.RejectedAccessException: Scripts 
> not permitted to use method groovy.lang.Binding hasVariable java.lang.String 
> at 
> org.jenkinsci.plugins.scriptsecurity.sandbox.whitelists.StaticWhitelist.rejectMethod(StaticWhitelist.java:160)
>  at 
> org.jenkinsci.plugins.scriptsecurity.sandbox.groovy.SandboxInterceptor.onMethodCall(SandboxInterceptor.java:119)
>  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:4) 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.NativeMethodAccessorImpl.invoke0(Native Method) at 
> sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) 
> at 
> sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
>  at java.lang.reflect.Method.invoke(Method.java:606) at 
> com.cloudbees.groovy.cps.impl.ContinuationPtr$ContinuationImpl.receive(ContinuationPtr.java:72)
>  at com.cloudbees.groovy.cps.impl.ConstantBlock.eval(ConstantBlock.java:21) 
> at com.cloudbees.groovy.cps.Next.step(Next.java:58) at 
> com.cloudbees.groovy.cps.Continuable.run0(Continuable.java:154) at 
> org.jenkinsci.plugins.workflow.cps.SandboxContinuable.access$001(SandboxContinuable.java:19)
>  at 
> org.jenkinsci.plugins.workflow.cps.SandboxContinuable$1.call(SandboxContinuable.java:33)
>  at 
> org.jenkinsci.plugins.workflow.cps.SandboxContinuable$1.call(SandboxContinuable.java:30)
>  at 
> org.jenkinsci.plugins.scriptsecurity.sandbox.groovy.GroovySandbox.runInSandbox(GroovySandbox.java:108)
>  at 
> org.jenkinsci.plugins.workflow.cps.SandboxContinuable.run0(SandboxContinuable.java:30)
>  at 
> org.jenkinsci.plugins.workflow.cps.CpsThread.runNextChunk(CpsThread.java:164) 
> at 
> org.jenkinsci.plugins.workflow.cps.CpsThreadGroup.run(CpsThreadGroup.java:276)
>  at 
> org.jenkinsci.plugins.workflow.cps.CpsThreadGroup.access$000(CpsThreadGroup.java:78)
>  at 
> org.jenkinsci.plugins.workflow.cps.CpsThreadGroup$2.call(CpsThreadGroup.java:185)
>  at 
> org.jenkinsci.plugins.workflow.cps.CpsThreadGroup$2.call(CpsThreadGroup.java:183)
>  at 
> org.jenkinsci.plugins.workflow.cps.CpsVmExecutorService$2.call(CpsVmExecutorService.java:47)
>  at java.util.concurrent.FutureTask.run(FutureTask.java:262) at 
> hudson.remoting.SingleLaneExecutorService$1.run(SingleLaneExecutorService.java:112)
>  at 
> jenkins.util.ContextResettingExecutorService$1.run(ContextResettingExecutorService.java:28)
>  at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:471) 
> at java.util.concurrent.FutureTask.run(FutureTask.java:262) at 
> java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
>  at 
> java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
>  at java.lang.Thread.run(Thread.java:745) Finished: FAILURE
>
> This seems to suggest that the if statement is not possible for security 
> reasons. Is the branch name exposed as an environment variable that I can 
> grab in the Jenkinsfile? Or alternatively, can I change the security 
> settings to allow the script to run?
>
> Thanks!
>
>
> On Friday, 10 June 2016 20:31:18 UTC+1, Craig Rodrigues wrote:
>>
>> Hi,
>>
>> You can try something like this to get started:
>>
>>
>> def gitUrl = "https://github.com/twisted/twisted.git";
>> def gitBranch = "trunk"
>>
>> node {
>>     stage "Check out from Git"
>>     git branch: "$gitBranch", url: "$gitUrl"
>>     
>>     stage "Build code"
>>     sh "sudo -Hs build_tool arg1 $gitUrl subproject_a $gitBranch"
>> }
>>
>>
>>
>> I would recommend going further.  Make your Pipeline job parameterized.  
>> Add a parameter GIT_BRANCH,
>> and set the default value of that to the branch you want to build in that 
>> specific job.
>>
>>
>> def gitUrl = "https://github.com/twisted/twisted.git";
>> def gitBranch
>>
>> if (getBinding().hasVariable("GIT_BRANCH")) {
>>     gitBranch = GIT_BRANCH
>> }
>>
>> node {
>>     stage "Check out from Git"
>>     git branch: "$gitBranch", url: "$gitUrl"
>>     
>>     stage "Build code"
>>     sh "sudo -Hs build_tool arg1 $gitUrl subproject_a $gitBranch"
>> }    
>>
>>
>>
>> You can add more build parameters as you need.
>>
>> --
>> Craig
>>
>> On Fri, Jun 10, 2016 at 8:40 AM, Jerry Steele <[email protected]> 
>> wrote:
>>
>>> Hello,
>>>
>>> I'm looking into getting Jenkins to build feature branches for our 
>>> github projects, but I'm not entirely sure where to start. Pipeline looks 
>>> like it might fit the bill, but I'm having trouble getting my head round 
>>> the Jenkinsfile. I've found the online docs and the "Groovy" generator but 
>>> am not really sure how to tie it all together. If anyone has a bit oftime 
>>> to help me, that would be great :)
>>>
>>> We currently use our own build tool to test code as deployed to github, 
>>> then build the artifacts into a debian package which is uploaded to Amazon 
>>> S3 and deployed by hand later.
>>>
>>> We currently have separate jobs for each of the major branches of our 
>>> project:
>>>
>>> subproject_a-qa
>>> subproject_a-staging
>>> subproject_a-production
>>>
>>> subproject_b-qa
>>> subproject_b-staging
>>> subproject_b-production
>>>
>>> subproject_c-qa
>>> subproject_c-staging
>>> subproject_c-production
>>>
>>> The jobs are very simple - they poll github, looking at a specific 
>>> branch, then if that has changed, they will execute a shell script which 
>>> looks like this (generic):
>>>
>>> sudo -Hs build_tool arg1 $GIT_URL <subproject_a> <environment(qa/staging
>>> /prod)>
>>>
>>> So, what I'd need is something that builds the following jobs when a 
>>> feature branch is pushed to look something like:
>>>
>>> sudo -Hs build_tool arg1 $GIT_URL <subproject_a> <feature_branch_name>
>>> sudo -Hs build_tool arg1 $GIT_URL <subproject_b> <feature_branch_name>
>>> sudo -Hs build_tool arg1 $GIT_URL <subproject_c> <feature_branch_name>
>>>
>>> Or else, know how to build those.
>>>
>>> Is this possible with Pipeline? Or am I looking at the wrong tool here? 
>>> I've started a multibranch test project, but am basically stuck at the 
>>> Jenkinsfile stage, and most tutorials appear to refer to using mvn, which 
>>> I'm not familiar with. the build tool is written in Python and is testing 
>>> building for Ruby on Rails :)
>>>
>>> Any help very much appreciated. Any more info needed, please let me 
>>> know...
>>>
>>> Thanks
>>>
>>> Jerry
>>>
>>>

-- 
You received this message because you are subscribed to the Google Groups 
"Jenkins Users" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To view this discussion on the web visit 
https://groups.google.com/d/msgid/jenkinsci-users/649bffd5-727d-49a5-991b-67ee068dcb4a%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to