That makes absolute sense, but I just tried that and got the same error..


On 13 June 2016 at 12:42, Mark Waite <[email protected]> wrote:

> By default, the git plugin checks out a "detached head" rather than
> checking out to a named local branch.  If you add the "Additional
> Behaviours" to do a "Checkout to specific local branch" and assign it the
> value "**", then the plugin will attempt to checkout to a local branch
> which matches the branch name from the source repository.
>
> That capability was added in git plugin 2.4.3 as the implementation of
> https://issues.jenkins-ci.org/browse/JENKINS-33202 .
>
> Mark Waite
>
> On Mon, Jun 13, 2016 at 5:37 AM Jerry Steele <[email protected]>
> wrote:
>
>> 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]> 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].
>>>
>>>
>>>> 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
>> <https://groups.google.com/d/msgid/jenkinsci-users/e9f89c01-4539-43d5-be3a-1fc2d6923707%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 a topic in the
> Google Groups "Jenkins Users" group.
> To unsubscribe from this topic, visit
> https://groups.google.com/d/topic/jenkinsci-users/ZrkPJGo4x18/unsubscribe.
> To unsubscribe from this group and all its topics, send an email to
> [email protected].
> To view this discussion on the web visit
> https://groups.google.com/d/msgid/jenkinsci-users/CAO49JtFwLz0ji%2BEwzuTPE0K%2BiaydzMNB3X%3DrpAMhp3cpFZof-A%40mail.gmail.com
> <https://groups.google.com/d/msgid/jenkinsci-users/CAO49JtFwLz0ji%2BEwzuTPE0K%2BiaydzMNB3X%3DrpAMhp3cpFZof-A%40mail.gmail.com?utm_medium=email&utm_source=footer>
> .
>
> For more options, visit https://groups.google.com/d/optout.
>



-- 
---

Jerry Steele
Telephone: +44 (0)7492 910225
http://www.ticktockhouse.co.uk
GPG: 43A3A8C6

-- 
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/CAH9ZavrvSUdY0iR0EEcGcnz_CUscyDXLvWY3OcFEJ0SQ58GDzw%40mail.gmail.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to