【问题标题】:can't push git's tag to remote as maven release process无法将 git 的标签推送到远程作为 maven 发布过程
【发布时间】:2016-09-19 17:09:03
【问题描述】:

我正在使用 maven 发布插件,以便能够使用 jenkins 的发布插件。我正在使用在 linux 系统(centos)上运行它的多模块项目。 为此,我在父 pom 中添加了以下插件配置:

<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-release-plugin</artifactId>
     <version>2.5.3</version>
     <configuration>
        <tagNameFormat>v@{project.version}</tagNameFormat>
        <arguments>-Dmaven.test.skip=true -DskipTests -Dbatch=true</arguments>
        <tagBase>http://gitcore/user/app/tags</tagBase>
     </configuration>
</plugin>

还添加到pom.xml 这些行的顶部:

<scm>
   <connection>scm:git:git@gitcore:user/app.git</connection>
  <developerConnection>scm:git:git@gitcore:user/app.git</developerConnection>
   <url>http://gitcore.company.local/</url>
</scm>

之后,我运行以下 maven 命令: mvn -B release:clean release:prepare release:perform

准备成功通过 它还将 pom 版本及其模块(子项目)的推广推送到 git origin。 它只创建具有正确版本的本地 git 标签,但没有成功推送到远程。 使用 -X 运行 maven 后我得到的是:

org.apache.maven.lifecycle.LifecycleExecutionException: 无法在项目 projectParent 上执行目标 org.apache.maven.plugins:maven-release-plugin:2.5.3:prepare (default-cli): 无法标记 SCM 提供者消息: git-push 命令失败。 命令输出: 拒绝访问。 致命:无法从远程存储库读取。

请确保您具有正确的访问权限并且存储库存在。

在这些行之上,我注意到与推送 git 标签相关的以下内容:

[INFO] Executing: /bin/sh -c cd /home/mickey/App/ProjectParent && git push git@gitcore:user/app.git refs/heads/release_version_8_0:refs/heads/release_version_8_0
[INFO] Working directory: /home/mickey/App/ProjectParent
[INFO] Tagging release with the label v8.0.2...
[DEBUG] ScmTagPhase :: scmTagParameters remotingTag true
[DEBUG] ScmTagPhase :: scmTagParameters scmRevision null
[DEBUG] ScmTagPhase :: fileSet  basedir = /home/mickey/App; files = []
[INFO] Executing: /bin/sh -c cd /home/mickey/App && git tag -F /tmp/maven-scm-876857130.commit v8.0.2
[INFO] Working directory: /home/mickey/App
[INFO] Executing: /bin/sh -c cd /home/mickey/App && git push **git@gitcore:user** refs/tags/v8.0.2
[INFO] Working directory: /home/mickey/App

我尝试在本地运行最后一次推送 (git push git@gitcore:user),但在从 maven 运行时遇到了同样的错误,但是在我添加到 push 命令之后,还有它工作的文件。我不明白为什么它没有在我放入 pom 时使用整个标签路径运行 git push 的整个命令。

【问题讨论】:

  • 我刚刚注意到工作目录中的 git 标签有所不同。工作目录:/home/mickey/App 而不是日志中所附的工作目录:/home/mickey/App/ProjectParent。这有什么场景吗?
  • 我想我明白了。我调试了 maven 发布插件,并在进入 git 中的标记步骤之前发现了一些奇怪的原因,该插件试图在当前文件夹上方的一个文件夹中查找它根本不是一个项目。

标签: java git maven jenkins maven-release-plugin


【解决方案1】:

我有类似的问题,但我使用的是平面目录多模块,例如:

release-workspace\
|
|--release-parent
|    |+pom.xml (modules: ../release-module1, ../release-module2)
|--release-module1
|    |+pom.xml (parent: ../release-parent/pom.xml)
|--release-module2
|    |+pom.xml (parent: ../release-parent/pom.xml)

2.x 版本不支持平面目录多模块。你可以在这里查看https://issues.apache.org/jira/browse/MRELEASE-261

作为一种解决方法,您可以在根目录中创建一个 pom.xml

release-workspace\
|
|--release-parent
|    |+pom.xml (parent: ../pom.xml, modules: ../release-module1, ../release-module2)
|--release-module1
|    |+pom.xml (parent: ../release-parent/pom.xml)
|--release-module2
|    |+pom.xml (parent: ../release-parent/pom.xml)
|--pom.xml (modules: release-parent) <-- maven-release-plugin goes

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-03-10
    • 2018-06-24
    • 2010-10-25
    相关资源
    最近更新 更多