2015-03-18 5 views
5

Ich versuche mvn release:prepare in einem Multi-Modul-Projekt zu tun, das auf einem Gitlab-Server gehostet wird.Maven und Gitlab: Release: Vorbereitung verwendet die falsche SCM-URL

Die pom.xml für mein Master POM enthält:

<scm> 
    <connection>scm:git:http://my-git-server.example.com/git/somebody/my-project.git</connection> 
    <url>http://my-git-server.example.com/git/somebody/my-project</url> 
</scm> 

Wenn ich mvn release:prepare -DautoVersionSubmodules=true tun, ist es alles kompiliert und läuft den Test, aber dann irgendwie:

[INFO] Executing: /bin/sh -c cd /home/somebody/git/my-project && git tag -F /tmp/maven-scm-1594218362.commit my-project-1.0.0 
[INFO] Working directory: /home/somebody/git/my-project 
[INFO] Executing: /bin/sh -c cd /home/somebody/git/my-project && git push http://my-git-server.example.com/git/somebody my-project-1.0.0 
[INFO] Working directory: /home/somebody/git/my-project 
... 
[ERROR] Failed to execute goal org.apache.maven.plugins:maven-release-plugin:2.3.2:prepare (default-cli) on project iwes-lib-master: Unable to tag SCM 
[ERROR] Provider message: 
[ERROR] The git-push command failed. 
[ERROR] Command output: 
[ERROR] fatal: repository 'http://my-git-server.example.com/git/somebody/' not found 
[ERROR] -> [Help 1] 

So ist es mir zu sagen maven-release-plugin denkt, dass das übergeordnete Verzeichnis zu meinem Git-Repository das Repository ist, das dort freigelassen wird.

Hinzufügen einer developerConnection hilft nicht.

Beim Versuch, SVN zu verwenden, schlägt es mit „Zugriff verweigert:

<scm> 
    <connection>scm:git:http://my-git-server.example.com/git/somebody/my-project.git</connection> 
    <developerConnection>ssh://[email protected]:10022/somebody/my-project.git</developerConnection> 
    <url>http://my-git-server.example.com/git/somebody/my-project</url> 
</scm> 

gebe ich.

[INFO] Executing: /bin/sh -c cd /home/jra/Documents/git/my-project && git push ssh://[email protected]:10022/somebody my-project-master-1.0.0 
.... 
[ERROR] Access denied. 

Also, es wieder das Verzeichnis Eltern verwendet

Wie zwinge ich das Release-Plugin dazu, die reale URL zu verwenden, die ich dort angegeben habe?

+0

Ich bin nicht sicher, ob Sie eine Lösung gefunden haben, aber vielleicht meine scm Änderung funktioniert auch für dich – OkieOth

Antwort

1

EDIT: Die Workaround, die ich hier vorgeschlagen habe, funktioniert nicht für release:perform, tatsächlich fand ich bis heute keine machbare Lösung. Ich mache jetzt die Freigabe manuell, wie ich unten beschreiben werde.

Ich habe zu diesem Thema mehr untersucht und ich denke, es ist ein Fehler. Ich reichte eine JIRA für sie: MRELEASE-900

ich abgeladen maven-release-plugin und bin jetzt die Freigabe manuell die folgende Art und Weise zu tun (Beispiel: Release 1.3.0, Snapshot-Version ist 1.3.0-SNAPSHOT):

  1. git checkout master && git pull nur um sicher zu sein
  2. git checkout -b release-1.3 && git push -u origin release-1.3
  3. cd path/to/my/master/project
  4. mvn versions:set, es mir die neue Version für 1.3.0-SNAPSHOT angeben fragt, gebe ich 1.3.0
  5. git commit -a so die neue Version eingecheckt in
  6. git tag release-1.3.0
  7. git push && git push --tags - An diesem Punkt gibt es einen Tag release-1.3.0 in der Branche release-1.3, in der alle relevanten POM Versionsnummern sind 1.3.0
  8. git checkout master
  9. git merge release-1.3 - noch nicht festschreiben, ich aktualisiere zuerst die Versionen.
  10. mvn versions:set, setzen neue SNAPSHOT Version, wie pro meine Konvention, dies wäre 1.4.0-SNAPSHOT
  11. git commit -a
  12. git push

dann kann ich einen Jenkins Job erstellen oder, was ich auf dem Tag wie release-1.3.0 zu verarbeiten die Freisetzung.

- Alte Antwort Referenz unten -

Nach rund Stossen und verschiedene Dinge auszuprobieren, habe ich einige Fortschritte: Ich habe die Maven-Release-Plugin denken zu lassen, dass my-project.git ein Verzeichnis und einen faux hinzufügen Datei an die URL.

Die folgenden Werke:

<scm> 
    <connection>scm:git:http://my-git-server.example.com/git/somebody/my-project.git/.git</connection> 
    <developerConnection>scm:git:http://my-git-server.example.com/git/somebody/my-project.git/.git</developerConnection> 
    <url>http://my-git-server.example.com/git/somebody/my-project</url> 
</scm> 

Und das gleiche mit tSSH:

<scm> 
    <connection>scm:git:http://my-git-server.example.com/git/somebody/my-project.git/.git</connection> 
    <developerConnection>ssh://[email protected]:10022/somebody/my-project.git/.git</developerConnection> 
    <url>http://my-git-server.example.com/git/somebody/my-project</url> 
</scm> 

Jetzt release:prepare funktioniert, aber release:perform schlägt fehl, weil es von ssh://[email protected]:10022/somebody/my-project.git/.git herunterladen will.

0

Ich habe das gleiche Problem, in meinem Fall das Plugin der pom aktualisiert mit der richtigen Version zu entfernten schiebt aber wenn versucht, den Tag zu generieren es fehlschlägt, weil es das Tag des übergeordneten Verzeichnis zu schieben versucht.

Drücken Sie die pom mit der richtigen Version

git push [email protected]:parent/project.git refs/heads/master:refs/heads/master 

aber wenn versucht aktualisiert meistern sie den Tag

push [email protected]:parent refs/tags/v1.46 

jemand zu schieben Haben sie gelöst?

1

ich mit einem Anruf wie die

mvn deploy scm:tag 

in der gleichen Ausgabe lief ich eine Gitlab Installation bin mit und es erlaubt, auch keine Anrufe wie diese

[INFO] Executing: /bin/sh -c cd /home/user/prog/gitlab/test-user_server && git tag -F /tmp/maven-scm-482134407.commit test-user_server-1.1-SNAPSHOT 
[INFO] Working directory: /home/user/prog/gitlab/test-user_server 
[INFO] Executing: /bin/sh -c cd /home/user/prog/gitlab/test-user_server && git push [email protected]:testplus/test-user_server.git refs/tags/test-user_server-1.1-SNAPSHOT 
[INFO] Working directory: /home/user/prog/gitlab/test-user_server 
[ERROR] Provider message: 
[ERROR] The git-push command failed. 
[ERROR] Command output: 
[ERROR] Permission denied, please try again. 

Das Problem ist dies Anruf

/bin/sh -c cd /home/user/prog/gitlab/test-user_server && git push [email protected]:testplus/test-user_server.git refs/tags/test-user_server-1.1-SNAPSHOT 

Aber dieser Aufruf ist nicht wirklich notwendig, weil ich den mvn in der Wurzel meiner Git-Repos starte itory. Stattdessen funktioniert ein Befehlszeilenaufruf wie der folgende.

git push origin refs/tags/test-user_server-1.1-SNAPSHOT

So modifizierte ich meine scm Konfiguration in meinem pom.xml auf eine Zeichenfolge wie folgt aus und es funktioniert für mich wie ein Zauber.

<scm> 
    <developerConnection>scm:git:origin</developerConnection> 
</scm> 

Ich entwickle unter einem Linux-Betriebssystem und so habe ich nicht getestet, ob es auch auf Windows-System funktioniert.

0

Wie einige gesagt haben, kann diese Abhilfe Arbeit macht die Phase des Release vorzubereiten, nicht aber die Phase durchführt (in meinem Fall, dass es war). ich es endlich geschafft, eine Vollversion zu arbeiten haben durch den richtigen Weg zu finden, um die Daten eingeben, um die developperConnection Tag legen:

<scm> 
    <developerConnection>scm:git:[email protected]:groupProject/project.git</developerConnection> 
    <tag>HEAD</tag> 
</scm> 

Viele andere URL-Format in meinem Fall angenommen wurden, aber am Ende während des ausführen fehlgeschlagen ist oder Bereite die Phase der Veröffentlichung vor (scm: git: ssh: // git @ gitlab ... hatte zum Beispiel dieses Problem). Ich weiß nicht, ob diese Lösung für Gitlab oder vielleicht mein Projekt spezifisch ist, aber ich verbrachte viel Zeit, diese Problemumgehung zu finden ...

Verwandte Themen