Hi,
I'm trying to setup and understand an end-to-end git-gerrit-jenkins
maven scenario.
What I've created so far is:
- developers checkout sources from git
- developers commit and push to gerrit
- jenkins triggers ci builds and deploy snapshots to nexus
- developers make additional reviews in gerrit and submit changes
Now I'm stuck at the release process:
- I wanted to take advantage of the maven release plugin and more
specific the jenkins maven release plugin, so that a developer can
trigger the release with a jenkins job which also deployes the release
to the nexus repository.
- Now I assume: because any change goes through gerrit code review,
the release plugin also has to push its pom changes through gerrit. Am
I right?
So in my pom I define the corresponding developerConnection for
gerrit:
<scm>
<url>
http://git.foobar.corp/SANDBOX/andreas/
foobar.git</url>
<connection>scm:git:git://git.foobar.corp/SANDBOX/
andreas/
foobar.git</connection>
<developerConnection>scm:git:ssh://git.foobar.corp:
29418/SANDBOX/
andreas/foobar.git</developerConnection>
</scm>
Now when triggering a release job, maven is unable to
checkin the updated poms.
<snip>
Caused by: org.apache.maven.shared.release.ReleaseExecutionException:
An error is occurred in the checkin process: Exception while executing
SCM command.
at
org.apache.maven.shared.release.phase.ScmCommitPhase.checkin(ScmCommitPhase.java:
128)
at
org.apache.maven.shared.release.phase.ScmCommitPhase.execute(ScmCommitPhase.java:
109)
at
org.apache.maven.shared.release.DefaultReleaseManager.prepare(DefaultReleaseManager.java:
203)
at
org.apache.maven.shared.release.DefaultReleaseManager.prepare(DefaultReleaseManager.java:
140)
at
org.apache.maven.shared.release.DefaultReleaseManager.prepare(DefaultReleaseManager.java:
103)
at
org.apache.maven.plugins.release.PrepareReleaseMojo.prepareRelease(PrepareReleaseMojo.java:
211)
... 30 more
Caused by: org.apache.maven.scm.ScmException: Exception while
executing SCM command.
at
org.apache.maven.scm.command.AbstractCommand.execute(AbstractCommand.java:
63)
at
org.apache.maven.scm.provider.git.AbstractGitScmProvider.executeCommand(AbstractGitScmProvider.java:
289)
at
org.apache.maven.scm.provider.git.AbstractGitScmProvider.checkin(AbstractGitScmProvider.java:
215)
at
org.apache.maven.scm.provider.AbstractScmProvider.checkIn(AbstractScmProvider.java:
354)
at
org.apache.maven.shared.release.phase.ScmCommitPhase.checkin(ScmCommitPhase.java:
124)
... 35 more
Caused by: org.apache.maven.scm.ScmException: Detecting the current
branch failed: fatal: ref HEAD is not a symbolic ref
at
org.apache.maven.scm.provider.git.gitexe.command.branch.GitBranchCommand.getCurrentBranch(GitBranchCommand.java:
144)
at
org.apache.maven.scm.provider.git.gitexe.command.checkin.GitCheckInCommand.createPushCommandLine(GitCheckInCommand.java:
185)
at
org.apache.maven.scm.provider.git.gitexe.command.checkin.GitCheckInCommand.executeCheckInCommand(GitCheckInCommand.java:
125)
at
org.apache.maven.scm.command.checkin.AbstractCheckInCommand.executeCommand(AbstractCheckInCommand.java:
53)
at
org.apache.maven.scm.command.AbstractCommand.execute(AbstractCommand.java:
59)
... 39 more
channel stopped
<snap>
Is there maybe another (better) release strategy than pushing the
release change through gerrit.
I think from the gerrit point of view, its not a good practice to make
changes directly in gerrits upstream. What do you think?
Thanks in advance.
Andy