TESTO distaccato per plugin Git Jenkins

Sono nuovo di Git e anche di Jenkins. Il mio problema è che non riesco a far funzionare il plugin Jenkins Maven.

Quando creo una build Maven comune con Jenkins, funziona bene, ma quando provo a eseguire una versione con il plugin di rilascio Maven, ottengo la seguente traccia dello stack:

org.apache.maven.lifecycle.LifecycleExecutionException: Failed to execute goal org.apache.maven.plugins:maven-release-plugin:2.3.2:prepare (default-cli) on project parent: An error is occurred in the checkin process: Exception while executing SCM command. at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:217) at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:153) at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:145) at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject(LifecycleModuleBuilder.java:84) at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject(LifecycleModuleBuilder.java:59) at org.apache.maven.lifecycle.internal.LifecycleStarter.singleThreadedBuild(LifecycleStarter.java:183) at org.apache.maven.lifecycle.internal.LifecycleStarter.execute(LifecycleStarter.java:161) at org.apache.maven.DefaultMaven.doExecute(DefaultMaven.java:320) at org.apache.maven.DefaultMaven.execute(DefaultMaven.java:156) at org.jvnet.hudson.maven3.launcher.Maven3Launcher.main(Maven3Launcher.java:79) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) at java.lang.reflect.Method.invoke(Method.java:597) at org.codehaus.plexus.classworlds.launcher.Launcher.launchStandard(Launcher.java:329) at org.codehaus.plexus.classworlds.launcher.Launcher.launch(Launcher.java:239) at org.jvnet.hudson.maven3.agent.Maven3Main.launch(Maven3Main.java:158) at hudson.maven.Maven3Builder.call(Maven3Builder.java:98) at hudson.maven.Maven3Builder.call(Maven3Builder.java:64) at hudson.remoting.UserRequest.perform(UserRequest.java:118) at hudson.remoting.UserRequest.perform(UserRequest.java:48) at hudson.remoting.Request$2.run(Request.java:326) at hudson.remoting.InterceptingExecutorService$1.call(InterceptingExecutorService.java:72) at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303) at java.util.concurrent.FutureTask.run(FutureTask.java:138) at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908) at java.lang.Thread.run(Thread.java:662) Caused by: org.apache.maven.plugin.MojoExecutionException: An error is occurred in the checkin process: Exception while executing SCM command. at org.apache.maven.plugins.release.PrepareReleaseMojo.prepareRelease(PrepareReleaseMojo.java:295) at org.apache.maven.plugins.release.PrepareReleaseMojo.execute(PrepareReleaseMojo.java:247) at org.apache.maven.plugin.DefaultBuildPluginManager.executeMojo(DefaultBuildPluginManager.java:101) at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:209) ... 27 more 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.AbstractScmCommitPhase.checkin(AbstractScmCommitPhase.java:160) at org.apache.maven.shared.release.phase.AbstractScmCommitPhase.performCheckins(AbstractScmCommitPhase.java:145) at org.apache.maven.shared.release.phase.ScmCommitPreparationPhase.runLogic(ScmCommitPreparationPhase.java:76) at org.apache.maven.shared.release.phase.AbstractScmCommitPhase.execute(AbstractScmCommitPhase.java:78) at org.apache.maven.shared.release.DefaultReleaseManager.prepare(DefaultReleaseManager.java:234) at org.apache.maven.shared.release.DefaultReleaseManager.prepare(DefaultReleaseManager.java:169) at org.apache.maven.shared.release.DefaultReleaseManager.prepare(DefaultReleaseManager.java:146) at org.apache.maven.shared.release.DefaultReleaseManager.prepare(DefaultReleaseManager.java:107) at org.apache.maven.plugins.release.PrepareReleaseMojo.prepareRelease(PrepareReleaseMojo.java:291) ... 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:291) at org.apache.maven.scm.provider.git.AbstractGitScmProvider.checkin(AbstractGitScmProvider.java:217) at org.apache.maven.scm.provider.AbstractScmProvider.checkIn(AbstractScmProvider.java:410) at org.apache.maven.shared.release.phase.AbstractScmCommitPhase.checkin(AbstractScmCommitPhase.java:156) ... 38 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:147) at org.apache.maven.scm.provider.git.gitexe.command.checkin.GitCheckInCommand.createPushCommandLine(GitCheckInCommand.java:192) at org.apache.maven.scm.provider.git.gitexe.command.checkin.GitCheckInCommand.executeCheckInCommand(GitCheckInCommand.java:132) at org.apache.maven.scm.command.checkin.AbstractCheckInCommand.executeCommand(AbstractCheckInCommand.java:54) at org.apache.maven.scm.command.AbstractCommand.execute(AbstractCommand.java:59) ... 42 more channel stopped Finished: FAILURE 

Il comando e il messaggio di errore non riusciti sono:

 [INFO] Executing: /bin/sh -c cd /var/lib/jenkins/workspace/test_maven/parent && git symbolic-ref HEAD [INFO] Working directory: /var/lib/jenkins/workspace/test_maven/parent mojoFailed org.apache.maven.plugins:maven-release-plugin:2.3.2(default-cli) projectFailed ch.apkern.achilles:parent:1.0-SNAPSHOT sessionEnded 

Ho capito che il plug-in Git Jenkins crea un HEAD distaccato “(nessun ramo)” che causa il problema, credo. Ma non ho assolutamente idea del perché questo riferimento sia stato creato o di come posso risolvere questo problema.

Sarei grato per qualsiasi aiuto.

Nessuna delle configurazioni di Jenkins dell’altra risposta ha funzionato per me senza dover creare passaggi manuali. Ciò che funziona davvero è semplice:

 Repository URL:  Branches to build: master Checkout/merge to local branch (optional): master 

Il campo Checkout/merge to local branch (optional) è scomparso nella versione corrente (2.2.1) del plugin Git.

Sembra essersi spostato su Additional Behaviours -> Check out to specific local branch :

inserisci la descrizione dell'immagine qui

L’impostazione di tale valore in master mi ha ottenuto un ramo estratto anziché una testa separata.

AGGIORNAMENTO (novembre 2015): Si prega di notare che questa soluzione è stata fornita per la versione specifica del plugin Git (1.1.26). Nelle versioni successive il plugin è stato aggiornato per semplificare la configurazione.

Per la versione 1.1.26 del plugin GIT di Jenkins, provare questo:

Vai a Configurazione lavoro. Scorri fino alla sezione Git e fai clic sul pulsante “Avanzate …” sotto “Archivi”. Quindi impostare:

 Name: origin Refspec: +refs/heads/branch-0.1:refs/remotes/origin/localbranchname 

Quindi fai clic su un altro pulsante “Avanzate …” e imposta:

 Checkout/merge to local branch (optional): localbranchname 

Puoi nominare il ramo locale come preferisci, ma la destinazione in Refspec deve corrispondere al nome del ramo locale in quel campo facoltativo (in questo caso “localbranchname”). Questo assegnerà HEAD a localbranchname in questo modo:

 HEAD -> refs/heads/localbranchname -> 7a698457751bdc043cfda631b81e3812c5361790 

Il rilascio di Maven dovrebbe passare ora a Jenkins. A proposito, questo funziona per me con Jenkins 1.492 e Jenkins GIT plug-in versione 1.1.26.

in Git Quando hai un ramo estratto, come master o dev o qualsiasi altro ramo locale, il tuo HEAD (file nella cartella .git) conterrà un riferimento al ramo corrispondente. Pertanto è “allegato”.

Quando esegui alcune operazioni come rebase, si fonde o si verifica un commit particolare. Ad esempio, ogni volta che vedi “nessun ramo” il tuo HEAD non ha un riferimento a nessun ramo locale ma punta direttamente al commit, cioè ha all’interno il vero SHA-1. Ciò significa che è staccato – staccato da qualsiasi ramo. Non è stato creato alcun nuovo riferimento “nessun ramo”.

Il comando git symbolic-ref HEAD sta verificando se il contenuto HEAD è un riferimento o un SHA-1 e lo stampa.

Lo puoi vedere facendo:

 git checkout master git symbolic-ref HEAD git checkout HEAD~2 # going two commits back git symbolic-ref HEAD git checkout master # coming back 

La maggior parte delle volte il plugin git di Jenkins funziona con il codice in stato HEAD distaccato. Non sono sicuro del funzionamento del plug-in di rilascio di Maven, ma sono sicuro al 99% che sia necessario il rilascio da un ramo specifico. Per risolvere il problema, consiglierei di specificare come passo di pre-build o comando di shell qualcosa del genere:

 git checkout master; git pull origin master 

Questo risolverà il problema, spero;)

Voglio build diversi rami e controllare ogni ramo sotto il suo nome. Sto usando il plugin GIT 2.4.0.

La risposta di Matthias Braun ti porta un ramo nominato, ma non prende il nome dal ramo remoto.

Invece di impostare il master ramo locale, impostare il ramo locale $GIT_BRANCH .

Ho trovato questa soluzione in https://issues.jenkins-ci.org/browse/JENKINS-6856

Ha lo stesso problema La soluzione @Eugene ha funzionato una sola volta. C’è stato un errore nel secondo tentativo – “imansible cancellare HEAD dal repository” o qualcosa del genere.

Ho fondato questo ( fonte ):

E passi extra di m2 (pre-build)

git checkout master || git checkout -b master

git reset –hard origine / master

E ora penso sia ok.

Ho avuto lo stesso problema. Ho provato la soluzione di Constantine, che ha funzionato perfettamente ma il tag e i commit sono stati inseriti nel repository remoto “localbranchname”.

Così ho fatto lo stesso, ma manualmente: per prima cosa aggiungo uno script di shell pre-step:

 git branch -f localJenkins git checkout localJenkins 

Quindi uno script di shell post-passi:

 git checkout master git rebase localJenkins git branch -D localJenkins git push origin master git push --tag 

Funziona! In questo modo, non hai jenkins branch remoto, commit e tag saranno sul ramo principale (o altro).

spero che questo ti aiuti !

Aggiungi alla riga di comando di -DpushChanges=false -DlocalCheckout=true per preparare la versione: -DpushChanges=false -DlocalCheckout=true

Ciò significa che Maven userebbe quello che jenkins ha ottenuto all’interno della directory di lavoro .git , e non clonerà il telecomando o spingerà al remoto.

Raccomando di configurare refs/remotes/origin/develop completi come Git “Branch to build”. In questo modo mi sembra più comprensibile.

In tal caso il tuo $ GIT_BRANCH sarebbe magicamente impostato da Jenkins per origin/develop

Quindi, invece di usare GitPublisher eccessivamente complicato (ma portatile), basta aggiungere un passaggio post-build “Execute Shell”:

 echo Remote branch is $GIT_BRANCH, replacing origin with refs/heads. git push --follow-tags "$GIT_URL" "+HEAD:${GIT_BRANCH/#origin\//refs/heads/}" 

Questo spinge qualunque cosa sia cambiata, come pom.xml e tag.

(RISOLTO)

Ciao, ho avuto lo stesso problema con maven-release-plugin: 2.5.3 e maven-scm-provider-jgit: 1.9.5.

Volevo essere in grado di selezionare il ramo per la “build di generazione parametrizzata” questo non ha funzionato e quando ho scelto “Checkout / Unisci al ramo locale (opzionale)” ha funzionato ma è finito con un ramo “origine / origine / mybranch” in remoto (origine ripetuta).

Così:

  • Aggiungi “Parametro Git” a “Questo progetto è parametrizzato”
    Nome: filiale
    ParameterType: Branch
    Clicca Avanzato:
    Filiale Filtro: origine /(.*)
    (questo era il trucco!)

  • Repository Git:
    Rami da build: ref / remotes / origin / $ {branch}

  • Comportamenti aggiuntivi: -> Dai un’occhiata a una filiale locale specifica
    Nome del ramo: $ {branch}

Divertiti 🙂

(RISOLTO)

Ciao, ho avuto lo stesso problema quando ho provato a creare una versione di generazione parametrizzata da un ramo con maven-release-plugin: 2.5.3 e maven-scm-provider-jgit: 1.9.5.

Volevo essere in grado di selezionare il ramo per la “build di generazione parametrizzata” questo non ha funzionato e quando ho scelto “Checkout / Unisci al ramo locale (opzionale)” ha funzionato ma è finito con un ramo “origine / origine / mybranch” in remoto (origine ripetuta).

Così:

  • Aggiungi “Parametro Git” a “Questo progetto è parametrizzato”
    Nome: filiale
    ParameterType: Branch
    Clicca Avanzato:
    Filiale Filtro: origine /(.*)
    (questo era il trucco!)

  • Repository Git:
    Rami da build: ref / remotes / origin / $ {branch}

  • Comportamenti aggiuntivi: -> Dai un’occhiata a una filiale locale specifica
    Nome del ramo: $ {branch}

Divertiti 🙂