Thanks for the info re: In-process script approval, that worked :)

@Mark, I'm pretty sure that I need to glean info about the branch from the 
current build, because this has to be passed as an argument to my build 
tool. I was hoping that this could be done via an environment variable, but 
this doesn't seem to be possible.

I tried the method here 
<http://stackoverflow.com/questions/35554983/git-variables-in-jenkins-workflow-plugin>,
 
but confusingly, that threw an error like this:

[multibranch test] Running shell script
+ git rev-parse --abbrev-ref HEAD
fatal: ambiguous argument 'HEAD': unknown revision or path not in the working 
tree.
Use '--' to separate paths from revisions, like this:
'git <command> [<revision>...] -- [<file>...]'


... 


...which seems to be an issue with git itself.

Is there a tried and tested way of getting environment variables like this 
into the build process?

Thanks

Jerry

On Monday, 13 June 2016 12:00:22 UTC+1, Mark Waite wrote:
>
> For the multi-branch development work I've been doing, it has been better 
> to avoid placing branch information inside the Jenkinsfile.  The problem I 
> had was that most of my branches are short-lived.  They exist long enough 
> to allow me to validate a pull request, but then they are merged to the 
> master branch.  If I place branch information inside the Jenkinsfile on 
> that short-lived branch, then the branch information from the short-lived 
> evaluation branch would be merged into the master branch when the proposed 
> change is merged into the master branch.
>
> Instead of placing branch information inside the Jenkinsfile, I think you 
> want to use the "checkout scm" pipeline step like Liam Newman did in 
> https://github.com/jenkinsci/git-plugin/blob/master/Jenkinsfile .  That 
> same Jenkinsfile exists on other branches in that repository, and each 
> branch that has a Jenkinsfile is now evaluated from a multi-branch pipeline 
> project (as in 
> https://github.com/jenkinsci/git-plugin/blob/2.5.0-beta2/Jenkinsfile).
>
> The same technique is being used in for many more branches in my 
> evaluation fork of that plugin repository.  Some examples include 
> https://github.com/MarkEWaite/git-plugin/blob/3.0.0-beta/Jenkinsfile , 
> https://github.com/MarkEWaite/git-plugin/blob/master-PR350-extendGitSCMSource/Jenkinsfile
>  , 
> https://github.com/MarkEWaite/git-plugin/blob/master-PR398-ioexception-from-submodule/Jenkinsfile
>  and 
> https://github.com/MarkEWaite/git-plugin/blob/master-PR411-parallel-tests/Jenkinsfile
>  .
>
> Thanks,
> Mark Waite
>
> On Mon, Jun 13, 2016 at 4:40 AM Sverre Moe <[email protected] 
> <javascript:>> wrote:
>
>> 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] <javascript:>.
>> To view this discussion on the web visit 
>> https://groups.google.com/d/msgid/jenkinsci-users/649bffd5-727d-49a5-991b-67ee068dcb4a%40googlegroups.com
>>  
>> <https://groups.google.com/d/msgid/jenkinsci-users/649bffd5-727d-49a5-991b-67ee068dcb4a%40googlegroups.com?utm_medium=email&utm_source=footer>
>> .
>> For more options, visit https://groups.google.com/d/optout.
>>
>

-- 
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/e9f89c01-4539-43d5-be3a-1fc2d6923707%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to