Using Jenkins 1.609.3, Git plugin 2.4.0.

We have configured most of our jobs to allow jobs to be initiated by the 
Stash Webhook to Jenkins.  To allow developers to manually initiate a build 
of any branch, the jobs use the Git Parameter to set a BRANCH variable.

Using this configuration, the Git Parameter is configured to set "**" as 
the default branch to build.  This allows the Stash Webhook to initiate a 
build of any branch.  In order to allow the job to perform a maven release, 
we have configured the Git SCM to checkout to local branch "master".  This 
all works well as long as we are not doing a maven release, or when we do a 
maven release on the master branch.  The strategy breaks down if the 
developer attempts a maven release on another branch when the maven 
release:prepare goal tries to push pom updates.  Note that the maven 
release plugin uses the current local branch in the push as "git push url 
localBranch:localBranch"  As a result, when the build is for "some_branch" 
which has been checked out to local branch "master" we get an error on "git 
push ... master:master" because the remote "master" is not in sync with the 
local.  No surprises here since the local "master" is actually 
"some_branch".

To resolve this, we have deleted the "checkout to local branch" additional 
action, and added a pre-build step that does the following:'
# checkout to a local branch using the remote branch name
LOCAL_GIT_BRANCH=${GIT_BRANCH/*\//}
git rev-parse --quiet --verify ${LOCAL_GIT_BRANCH} && git branch -D 
${LOCAL_GIT_BRANCH}
git checkout -b ${LOCAL_GIT_BRANCH} ${GIT_COMMIT}

With this in place, the build checks the code out to a local branch with 
the same name as the remote branch allowing the maven release:prepare goal 
to push changes to the branch that is being build.

NOTE that we have tried to configure the "checkout to local branch" using 
the property that is configured by the Git ($BRANCH) but that results in 
local branch names of "origin/master", "origin/some_branch", ...  This 
results in release:prepare doing pushes as "git push ... 
origin/some_branch:origin/some_branch" which results in a new remote branch 
named "origin/some_branch"  We have seen repos with branches named 
"origin/master".  As a result, the desired branch is not updated, and a new 
branch is created.

QUESTION/SUGGESTION/...
It would be nice to have an option in the Git plugin to "checkout to local 
branch" that derives the local branch name from the remote branch name, 
without having to add our pre-build step.  Thus, if I select 
"origin/some_branch" from the Git parameter, I could checkout to local 
branch using the Git Parameter $BRANCH which would resolve to "some_branch" 
sans the "origin/" prefix.

Steps to Reproduce:
1. configure a parameterized job with a git parameter using "BRANCH" as the 
parameter name
2. configure the Git scm additional behavour to checkout to local branch 
"$BRANCH"
3. configure job with as a maven release.
4. perform a maven releae, selecting one of the branches from the list of 
Git Parameter options.
5. observe console output to examine the "git push" commands generated by 
the release:prepare goal.


-- 
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 jenkinsci-users+unsubscr...@googlegroups.com.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/jenkinsci-users/eeeff5a0-a7c8-4252-bbec-33168968a14e%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to